记一次 java.lang.OutOfMemoryError: PermGen space解决过程

来源:互联网 发布:mac版premiere出gif 编辑:程序博客网 时间:2024/06/05 05:11

tomcat工程,运行一段时间卡死。日志报Perm内存溢出。
记录一下排查过程,以及解决思路

查看堆区内存使用情况

jmap -heap pid

Attaching to process ID 14735, please wait...Debugger attached successfully.Server compiler detected.JVM version is 24.65-b04using thread-local object allocation.Parallel GC with 8 thread(s)     #采用并行GC策略    #java heap配置Heap Configuration:         MinHeapFreeRatio = 0               MaxHeapFreeRatio = 100   MaxHeapSize      = 8392802304 (8004.0MB)   NewSize          = 1310720 (1.25MB)     MaxNewSize       = 17592186044415 MB   OldSize          = 5439488 (5.1875MB)   #老生代大小   NewRatio         = 2    SurvivorRatio    = 8    PermSize         = 21757952 (20.75MB)   #JVM初始分配的非堆内存   MaxPermSize      = 85983232 (82.0MB)    #永久带最大空间   G1HeapRegionSize = 0 (0.0MB)#堆实际使用情况Heap Usage:PS Young GenerationEden Space:   capacity = 2796552192 (2667.0MB)   used     = 0 (0.0MB)   free     = 2796552192 (2667.0MB)   0.0% usedFrom Space:   capacity = 524288 (0.5MB)   used     = 0 (0.0MB)   free     = 524288 (0.5MB)   0.0% usedTo Space:   capacity = 524288 (0.5MB)   used     = 0 (0.0MB)   free     = 524288 (0.5MB)   0.0% usedPS Old Generation   capacity = 5595201536 (5336.0MB)   used     = 87076912 (83.04301452636719MB)   free     = 5508124624 (5252.956985473633MB)   1.5562783831777958% usedPS Perm Generation   capacity = 85983232 (82.0MB)   used     = 85983080 (81.9998550415039MB)   free     = 152 (1.4495849609375E-4MB)   99.99982322134623% used31026 interned Strings occupying 3399648 bytes.

对一些配置的定义,在此稍作解释;

  • MinHeapFreeRatio
    指定 jvm heap 在使用率小于 n 的情况下 ,heap 进行收缩 ,Xmx==Xms 的情况下无效 , 如 :-
  • XX:MinHeapFreeRatio=30
    指定 jvm heap 在使用率大于 n 的情况下 ,heap 进行扩张 ,Xmx==Xms 的情况下无效 , 如 :-XX:MaxHeapFreeRatio=70
  • NewSize/MaxNewSize:定义YOUNG段的尺寸,NewSize为JVM启动时YOUNG的内存大小;MaxNewSize为最大可占用的YOUNG内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。
  • NewRatio=2 年轻代(包括1个Eden和2个Survivor区)与年老代的比值。表示年轻代比年老代为1:2。
  • SurvivorRatio=8:设置年轻代中Eden区与Survivor区的比值。表示2个Survivor区(JVM堆内存年轻代中默认有2个大小相等的Survivor区)与1个Eden区的比值为2:4,即1个Survivor区占整个年轻代大小的1/6。

上面是java进程内存的使用情况。可以看到永久带满了,而其他区域使用率不高。

查看gc情况

jstat -gc -h 10 14735 1000
这里写图片描述

其中

  • C结尾的是Capacity
  • U结尾的是Used
  • S0为年轻代中第一个survivor
  • S1为年轻代中第二个survivor
  • E为年轻代中Eden
  • O为老年代
  • P为永久带
  • YGC从应用程序启动到采样时年轻代中gc次数
  • YGCT从应用程序启动到采样时年轻代中gc所用时间
  • 单位为KB

    从上图可以看出。在1秒内,系统做了8次Full GC。

这样看,原因已经很明显了,Perm区容量太小,导致频繁Full GC,最终Full GC也无法释放足够空间时,报 java.lang.OutOfMemoryError: PermGen space。而堆区内存过大,存在浪费现象。因此,解决办法是调大Perm区内存,减小堆区内存。

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 行车证丢了被交警查到怎么办 手机摔了一下一半黑屏了怎么办 三星手机的显示屏插头坏了怎么办? 被普通的手机维修店骗了怎么办? 手机外屏裂了内屏进水了怎么办 小米2s手机忘了解锁图案怎么办 红米note5手机屏烂了怎么办 网上买好高铁票身份证没带怎么办 高铁票买好了身份证丢了怎么办 苏州园区社保卡丢了怎么办 大学办的社保卡丢了怎么办 毕业六年了大学社保卡丢了怎么办 医保卡丢了补办后卡里余额怎么办 银行卡丢了记不住卡号怎么办 哈尔滨医保卡挂失后又找到了怎么办 孩子在哈尔滨户口在外地医保怎么办 椒江二桥通行证被扣走了怎么办 住建委查到买房材料不真怎么办 房子租出去被别人又租出去了怎么办 在成都乘出租车房产证掉了怎么办 电信不限量卡限网速了怎么办 only实体店换货没有小票怎么办 运管所包车单不给盖章怎么办 上海留学生落户过了取号时间怎么办 电信固话怎么办才能显示自己公司 日本跟团签证没有资产证明怎么办 摇号手机号换了密码忘了怎么办 小客车摇号的账号密码忘了怎么办 去银行交违章罚款单子丢了怎么办 我的身份证被别人办了信用卡怎么办 北京驾驶证在深圳扣了分怎么办 c照一次被扣12分怎么办 教师资格证认定申请表填错了怎么办 外地车在北京违章没有牡丹卡怎么办 护士辞职了原单位不给延续怎么办 护士证注册的单位倒闭了怎么办 护士证注册的医院倒闭了怎么办 显示发货了但没物流信息怎么办 考科目三被别人举报了怎么办 科目一考了5没过怎么办 常州c1驾驶证满了12分怎么办