【发布时间】:2009-04-02 23:27:07
【问题描述】:
我们正在运行一个使用 Java 64 位 5 gigs 的 -Xmx 最大堆大小的 Web 应用程序。我们无法控制 java 代码。我们只能调整配置参数。我们面临的情况是,Java 进程在启动时占用了分配的全部堆后,它开始对网站请求的响应非常缓慢。我的猜测是等待 GC 收集未使用的内存对象。
下图将向您展示 linux 中的 top 图像,显示进程的危急情况。
top image of java process http://cp.images.s3.amazonaws.com/ForumImages/java-gc-issue.jpg
有什么办法可以帮助java重新获得分配空间内已使用的内存。
编辑 1: 我使用下面的一些答案来回答我的问题。因为我的问题太难回答了,结果变成了讨论。我将发布我如何能够监控 GC 周期,并且我会以更多的票数选择答案。我通过真正的 vnc 查看器使用了 jconsole,以便能够从我的 windows 机器挂钩到运行 tomcat 的 linux 机器。
我使用这个参数来启动java进程:
-Djava.awt.headless=true -server -Xms512m -Xmx5120m -Dbuild.compiler.emacs=true -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=4999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
这是我得到的输出类型,从 jconsole 到 vnc 查看器。 GC Sample Image http://cp.images.s3.amazonaws.com/ForumImages/Sample_GC_Image.jpg
【问题讨论】:
-
这与编程无关。
标签: java memory tomcat memory-management