我们在tomcat服务器上部署了一个Web应用程序.我们运行了某些预定的作业,之后堆内存达到峰值并且稳定下来,一切似乎都很好.然而,系统管理员抱怨内存使用情况(Linux上的"top")不断增加预定作业的数量.什么是堆内存和CPU内存之间的相互关系?可以通过任何JVM设置进行控制吗?我使用JConsole来监控系统.
我通过JConsole强制进行垃圾收集,并且堆使用率下降,但是Linux上的内存使用量仍然很高,并且从未降低.
任何想法或建议会有很大帮助吗?
JVM进程分配的内存与堆大小不同.使用的堆大小可能会下降而不会实际减少JVM分配的空间.JVM必须接收一个触发器,指示它应该缩小堆大小.正如@Xepoch所提到的,这是由...控制的-XX:MaxHeapFreeRatio
.
然而,系统管理员抱怨内存使用情况(Linux上的"top")不断增加预定的作业[运行]越多.
那是因为你很可能有某种内存泄漏.当系统管理员看到进程慢慢咀嚼越来越多的空间时,他们往往会抱怨.
任何想法或建议会有很大帮助吗?
你看过线程数了吗?您是应用程序创建自己的线程并将它们发送到死锁并永远等待?您是否正在使用可能正在使用JNI的任何第三方API?
观察到的可能是虚拟大小,而不是 Java 进程的驻留集大小?如果您的目标是减少占用空间,则可能不希望在 JVM 堆参数中包含-Xms
任何最小大小,并将 70% 调整-XX:MaxHeapFreeRatio=
为较小的数字,以允许更积极的堆收缩。
同时,请提供更多关于 Linux 内存从未减少的评论中观察到的内容的详细信息。什么指标?
归档时间: |
|
查看次数: |
16808 次 |
最近记录: |