java PermGen 溢出问题怎么优化

GrowingDarker 2016-01-26 03:30:12
在写web项目时,由于引入第三方库, PermGen 在项目访问一段时间后 就会溢出。请问怎么解决
...全文
4390 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
一名码农、 2018-02-02
  • 打赏
  • 举报
回复
永久代溢出的话看是不是大量使用了动态代理反射的技术生成了太多的class,这一部分的GC是不确定的,不像新生代的minorGC和MajorGC,这样只能查看代码中是否有上述情况,调优代码,要么就是扩充永久代大小,比如256M-512M,当然这只是权宜之计,还是得优化代码。请参考一下
哈希塞特 2017-11-11
  • 打赏
  • 举报
回复
换成jdk1.8就没这个错误了
潇潇暮雨_ 2017-10-31
  • 打赏
  • 举报
回复
引用 20 楼 zhangchao19890805 的回复:
想到了一个特别投机取巧、不是办法的办法。论坛的各位大神求轻喷。 注意: 前提是你的这个功能不是核心功能。业务场景上也不要求特别严格的高可用性。如果你的开发时间有限,并且你在公司可以调动的资源有限,可以尝试这个办法。 把这个偶尔溢出的功能封装成一个微服务。其他模块通过http请求调用这个功能的微服务。用 Docker 把这个新功能的微服务封装一下,容器创建参数加上--restart=always。当这个功能的微服务崩溃时自动重启。在生产环境建立多个相同的微服务,对这些微服务使用负载均衡,确保其中一个崩溃了,可以用另一个。现在有许多微服务相关的开源项目,比如 spring cloud 一类的。 以上内容的思路是: 就让它崩溃
让我想起了一篇文章,《禁用Python的GC机制后,Instagram性能提升10%》,里面在内存溢出后也是直接重启服务
zhangchao19890805 2017-10-11
  • 打赏
  • 举报
回复
想到了一个特别投机取巧、不是办法的办法。论坛的各位大神求轻喷。 注意: 前提是你的这个功能不是核心功能。业务场景上也不要求特别严格的高可用性。如果你的开发时间有限,并且你在公司可以调动的资源有限,可以尝试这个办法。 把这个偶尔溢出的功能封装成一个微服务。其他模块通过http请求调用这个功能的微服务。用 Docker 把这个新功能的微服务封装一下,容器创建参数加上--restart=always。当这个功能的微服务崩溃时自动重启。在生产环境建立多个相同的微服务,对这些微服务使用负载均衡,确保其中一个崩溃了,可以用另一个。现在有许多微服务相关的开源项目,比如 spring cloud 一类的。 以上内容的思路是: 就让它崩溃
tlzjff 2017-07-31
  • 打赏
  • 举报
回复
如果是第三方库的内存泄漏问题的话,你只能修改第三方的代码了呀,通过抓取dump文件,分析占用内存最多的资源有哪些,是否和第三方库有关系,还有你第三方库的名字是啥,看看有没有最新版本出来,解决了这个问题,先证明足确实由第三方库引起的问题,才好下手,最好分析到,是哪个类,哪行代码引起的问题,这样自己也可以去修改它
花间_拾零 2017-07-26
  • 打赏
  • 举报
回复
1。设置jvm参数-XX:PermSize=512m -XX:MaxPermSize=512m 2。打开jdk工具visualVM,看下首页的内存参数是否配置成功,实时监控内存使用情况。
花间_拾零 2017-07-26
  • 打赏
  • 举报
回复
引用 16 楼 jun1210 的回复:
配Tomcat的时候调整jvm参数,可参考调整为: -Xms1500m -Xmx2500m -XX:PermSize=512m -XX:MaxNewSize=1024m -XX:MaxPermSize=2024m -Djava.awt.headless=true
MaxPermSize可能要看总内存大小,有一定比例。不是可以无限大的
jun1210 2017-06-16
  • 打赏
  • 举报
回复
配Tomcat的时候调整jvm参数,可参考调整为: -Xms1500m -Xmx2500m -XX:PermSize=512m -XX:MaxNewSize=1024m -XX:MaxPermSize=2024m -Djava.awt.headless=true
Cx_轩 2017-06-08
  • 打赏
  • 举报
回复
调节JVM参数
q143000 2017-05-27
  • 打赏
  • 举报
回复
tomcat catlina里面的永久区大小调大点,参数楼上有
pp.pang 2017-02-13
  • 打赏
  • 举报
回复
-Xms128m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=128m -
谁是墨菲 2016-10-16
  • 打赏
  • 举报
回复
配Tomcat的时候调整jvm参数,可参考调整为: -Xms1500m -Xmx2500m -XX:PermSize=512m -XX:MaxNewSize=1024m -XX:MaxPermSize=2024m -Djava.awt.headless=true
乔不思 2016-04-20
  • 打赏
  • 举报
回复
调jvm参数~~~
爱睡觉的阿狸 2016-04-15
  • 打赏
  • 举报
回复
使用hibernate,运行时会生成很多代理类,容易造成这个问题。 再catalina文件第一行加上set JAVA_OPTS=-Xms512m -Xmx512m -Xmn170m -XX:PermSize=4m -XX:MaxPermSize=64m,其中-XX:MaxPermSize=64m是解决这个问题的关键。
  • 打赏
  • 举报
回复
使用第三方jar包,最容易出现永久层溢出的。
qq_33559864 2016-03-09
  • 打赏
  • 举报
回复
-Xms768m -Xmx1024m -XX:CompileThreshold=8000 -XX:PermSize=256m -XX:MaxPermSize=256m -Xverify:none -da
davidnk_csdn 2016-03-07
  • 打赏
  • 举报
回复
permgen 主要存常量、静态变量、类相关信息,看下full gc 的情况,另外看下内存那类占内存比较大。
武汉牛牛 2016-02-14
  • 打赏
  • 举报
回复
可以生成dump文件,然后使用ecipse-memory-analyzer工具分析一下。
wesleySun 2016-02-03
  • 打赏
  • 举报
回复
每次访问perm都在增加, 最有可能就是每次都生成新的class, 你可以看下heap dump log,还有你jasper的template用的什么? 请看下面: Use .jasper instead of .jrxml as template ! As we know .jasper is a compiled template as well as .jrxml is ASCII source code for the template, so if we use raw source code file (jrxml) as template in current spring application then at least spring frame work has to compile the source code file. That's a question of efficiency left to Spring framework as it is the jasper bean to handle the compilation and it is not guaranteed the compilation executed only once and only happens when the application starting. In short, after replace all templates with .jasper file, the log size has been significantly reduced and haven't seen the out of memory issue any more. I guess Spring container may be consume a lot of resource to compile jrxml to jasper at runtime. So it could be something should've improved by Jasper or Spring....
GrowingDarker 2016-02-02
  • 打赏
  • 举报
回复
报错就是说out of Memory PermGen 这些。框架ssh + jasper report 。 主要是 PermGen 每次访问界面都在增加,但一直不会减少
加载更多回复(3)

25,984

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧