一 问题描述

  监控发现某个Java进程的Perm Size使用量从定时任务执行时间点开始就陡增到%90以上,定时任务执行完成后Perm Size仍然不下降。这是一个问题。相应的Heap Size大小比较平稳,没有出现陡增的现象。JDK的版本是1.7


  wKiom1djtc_RXdG4AAPedLioTYk103.png-wh_50


二 问题分析

 JVM的PermSpace主要用于存放Java程序运行时的class和中间数据等。PermSize的最小值默认是系统内存的1/64,最大内存默认识系统内存的1/4.可以通过以下参数指定最小和最大PermSize

 -XX:PermSize=256M  -XX:MaxPermSize=256M

 Permanent Generation即永久代对于大多数的应用的GC回收性能都不会有明显的影响。然而,有些应用会动态地生产和加载很多class文件,例如一些JSP页面。这些应用就需要更大的PermSize来装载额外的class文件。

 

 使用 jmap -permstat 25230 打印永久代的统计信息

 使用 jmap或者jstat等java调试命令时如果使用root用户Java进程无响应,那么可以使用sudo -u noboday jmap -permstat 25230 这样指定Java进程的运行用户

 

三 问题解决

 重新启动Java进程继续观察,如果还是持续上涨可以尝试加大PermSize





参考文档:

http://developer.51cto.com/art/201203/321431.htm

http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html