PS Survivor Space 几乎占满

2017-05-09 13:54:49 +08:00
 mutelog

Tomcat 6 + JDK 1.6 Server Mode

使用 jconsole 查看内存占用情况,发现 Survivor Space 几乎占满,Tomcat 响应缓慢。

当前 Tomcat 的虚拟机参数设置如下:

set JAVA_OPTS=-server -Xms1024m -Xmx2048m -XX:PermSize=256m -XX:MaxPermSize=512m

请问应当怎样调整虚拟机参数?

8358 次点击
所在节点    程序员
2 条回复
hand515
2017-05-09 14:26:21 +08:00
S0 和 S1 不是经常满的吗
hyperdak
2017-05-09 14:38:33 +08:00
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/360097

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX