暗黑城堡new
作者暗黑城堡new·2014-03-04 14:18
其它·XXX科技有限公司

GC垃圾回收日志分析

字数 1944阅读 5378评论 1赞 0
WAS打开“详细垃圾回收开关”生成native_stderr.log的方法: 
服务器-->应用程序服务器(server1)--->java和进程管理---->进程定义---->java虚拟机------>详细垃圾回收 

查看垃圾回收的详细信息 
在WAS的日志目录下,WebSphereAppServer5logsserver1,查看文件“native_stderr.log的内容, ” 
………… 
<AF[3]: Allocation Failure. need 528 bytes, 13780 ms since last AF> 
<AF[3]: managing allocation failure, action=1 (0/167351272) (8807960/8807960)> 
<GC(3): GC cycle started Tue Jun 21 13:25:10 2005 
<GC(3): freed 131440728 bytes, 79% free (140248688/176159232), in 150 ms> 
<GC(3): mark: 137 ms, sweep: 13 ms, compact: 0 ms> 
<GC(3): refs: soft 0 (age >= 32), weak 14, final 362, phantom 0> 
<AF[3]: completed in 172 ms
………… 
其中第一行红色部分是Allocation Failure时间,记做A;最后一行红色部分是本次垃圾回收时间,记做B。 
如果“native_stderr.log”文件中有连续的A÷B < 10的话,说明目前WAS性能将下降,需要增加WAS的内存或减小WEB容器的线程池的设置。

根据GC所处的代,将GC叫法归纳如下:

young generation

young gc == minor gc

tenured generation

old gc == cms gc == major gc == full gc 

full gc都是串行方式的,耗时很长,所以我们需要尽量减少发生频次。

常用JVM参数

分析gc日志后,经常需要调整jvm内存相关参数,常用参数如下

-Xms初始堆大小,默认为物理内存的1/64(<1GB);默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制

-Xmx:最大堆大小,默(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM减少堆直到-Xms的最小限制

-Xmn新生代的内存空间大小,注意:此处的大小是(eden+ 2 survivor space)。与jmap -heap中显示的New gen是不同的。整个堆大小=新生代大小 + 老生代大小 + 永久代大小。 
在保证堆大小不变的情况下,增大新生代后,将会减小老生代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

-XX:SurvivorRatio新生代中Eden区域与Survivor区域的容量比值,默认值为8。两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10

-Xss每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。应根据应用的线程所需内存大小进行适当调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。一般小的应用, 如果栈不是很深, 应该是128k够用的,大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"-Xss is translated in a VM flag named ThreadStackSize”一般设置这个值就可以了。

-XX:PermSize设置永久代(perm gen)初始值。默认值为物理内存的1/64

-XX:MaxPermSize设置持久代最大值。物理内存的1/4


如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论1 条评论

djhuangdjhuang信息分析/架构师ibm
2014-10-19 17:57
下面的那些参数不适用IBM JVM的吧
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广