一 问题描述
监控发现某个Java进程的Perm Size使用量从定时任务执行时间点开始就陡增到%90以上,定时任务执行完成后Perm Size仍然不下降。这是一个问题。相应的Heap Size大小比较平稳,没有出现陡增的现象。JDK的版本是1.7
二 问题分析
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
转载于:https://blog.51cto.com/john88wang/1790348