看看开启了4个项目的ECLIPSE启动并运行了一段时间的GC日志:
|
|
前面做了三次GC之后间隔了700多秒才进行下一次GC,看来前面的优化是有效果的,但是第三次和第四次的GC都是FULL的,实际变化在perm的内存分配,再看看最后的堆信息,perm的使用率打到了99%可用空间为80多M,看来我们的初始化持久代的大小还是偏小,直接将-XX:PermSize=64M-XX:MaxPermSize=96M两个属性加到96M再看看。
|
|
我启动eclipse之后,打开了几个JAVA文件,并且开启了一次WTP插件的tomcat服务器,然后关闭了eclipse,这次并没有出现full gc,perm的使用率是91%还有空余空间,以后再加别的项目估计也不会有太大问题,持久代的问题已经解决了,再回过头来看看旧生代,使用率只有27%,这个可以承受,暂时忽略,接下来优化的是新生代,from space的使用率有32%,基本够用,那么说明这几次的GC实际上是内存对象从edem转向from space,edem和from的大小比例是8:1,这样都小的话我们可以适当放大新生代的大小,先前我们设定的-Xmn256M,可以将这个值适当调大,我们看看最后一次GC的信息:
GC的时候新生代的使用大小为224132K约为218M大约占用了新生代90%的空间,由于旧生代只有27%的使用率,这样可以大胆的将-Xmn调成384M,再看看效果:
|
|
果然有效果,从日志来看,新生代的的使用率很高,应该用不了多久会再进行一次GC,可惜我已经关闭eclipse,旧生代的使用率还有所下降,也许是操作次数少的原因。从总的结果来看这次对新生代的调优感觉是很好的,这次对eclipse的调优只是对内存分配的调优,并没有对GC的方式进行调优,因为我觉得在新生代的GC的时候任何一种GC方式对性能不会很大的影响,至少在eclipse里面还好,说白了还是要依据项目而定,也是应该根据需求而定,其实今天对新生代的调优我就觉得是鸡肋,只是不想做太监,还是硬着头皮把这个调优的blog结束掉。
总结一下:
GC调优不是高高在上的圣坛,只要有一定的分析能力和对java内存结构和分配策略有一定了解,相信人人都能做调优,这些调优参数不用记在脑子里面的,除非你是专职做GC调优的人,知道原理就行。
PS:昨天我在运行的过程中还是出现了问题,出现的提示我没有截图,意思是perm space的空间已经用完,但是这并不导致eclipse崩溃,但是会一直提示,而且eclipse运行N卡,估计是不停的做full gc,(我没有看gc日志),最后我将perm的参数调到128M-256M,这回就快很多了,看来做调优还真的是一个长期调整的过程。