Tomcat 6 + JDK 1.6 Server Mode
使用 jconsole 查看内存占用情况,发现 Survivor Space 几乎占满,Tomcat 响应缓慢。
当前 Tomcat 的虚拟机参数设置如下:
set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m
请问应当怎样调整虚拟机参数?
1
hand515 2017-05-09 14:26:21 +08:00
S0 和 S1 不是经常满的吗
|
2
hyperdak 2017-05-09 14:38:33 +08:00 1
jvm 参数里面缺少了对新生代的配置,可以通过 `-Xmn` 加上。
`Xms` 和 `Xmx` 都是设置成`Xmx` 的值,避免每次回收(因为初始空间小)之后又扩容. Survivor Space 是新生代复制回收算法的一个区,其中分为 S0 和 S1,每次回收是这样进行的:Eden+S0->S1,Eden 和 S0 中存活的对象会移动到 S1 中,回收完成时,S0 变空。然后下一轮就是 Eden+S1->S0。 你可以使用 `jstat -gcutil pid 2000 2000` 来观察这个复制回收对新生代的影响。 然后开头的 `-server` 现在没什么用了,x64 的 jdk 自动都已经只有 server 模式了。 建议使用以下的参数:`-Xmx2g -Xms2g -Xmn512m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+UseParallelOldGC -Xloggc:/somewhere/somename.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution` 这个设置将打印 gc 日志,可以使用 gceasy.io 来分析 gc 日志。 ORA 官方介绍垃圾回收器和搭配的文章: https://blogs.oracle.com/jonthecollector/our-collectors |