我们有一个部署在tomcat服务器上的Web应用程序。我们运行一些特定的定时作业,之后堆内存升高并恢复到正常水平,所有看起来都很好。然而,系统管理员抱怨说随着计划任务增加,内存使用率(在Linux上的top命令)不断增加。堆内存和CPU内存之间有什么关联?它可以通过任何JVM设置进行控制吗?我使用JConsole监控系统。我通过JConsole强制进行了垃圾回收,堆使用量降低了,但是Linux上的内存使用量仍然很高并且没有下降。有任何想法或建议吗?
-XX:MaxHeapFreeRatio
控制。同时,提供更多关于Linux内存从未减少的细节是什么?使用了什么度量标准?
-Xms
和-Xmx
选项是什么?还要计算% RES / VIRT和% RES / SHR并报告回来。它可能会报告很高,但进程可能有很大一部分是共享的。 - Jé Queue您可以使用 -Xmx 和 -Xms 设置来调整堆的大小。在 Tomcat 中,您可以在启动之前设置一个环境变量:
export JAVA_OPTS=”-Xms256m -Xmx512m”
这将最初创建一个大小为256MB的堆,最大大小为512MB。
一些更多的细节: http://confluence.atlassian.com/display/CONF25/Fix+'Out+of+Memory'+errors+by+increasing+available+memory