在生产中,我们有一个CentOS 5 Linux机箱,它运行Apache 1.6.0_21上的多个Apache Tomcat 5.5.30实例。每个Tomcat都托管一个Java EE WebApp,它从Postgres 9.1 RDBMS中提取数据并生成HTML/PDF /等报告。
每隔几天,由于触发器尚未确定,其中一个Java进程将开始增加内存使用量(几十个演出),直到机器开始将内存分页为HD,从而使整个服务器到达一个静止的。 我通常会使用JProbe来监视对象正在消耗的所有内存,但由于服务器是无头Linux安装,这不是一个选项。
是否有一个无头(CLI)工具可以定期记录哪些Java对象消耗的内存最多?这甚至是诊断问题的最好方法吗?如何诊断与生产linux内存相关的Java崩溃问题
UPDATE: 使用以下收到的反馈,我意识到问题的一部分是,我们没有得到实际的碰撞,但流程刚刚页面RAM到HD直到整个机器变得反应迟钝。这个(我想)的一个解决方案是设置-Xmx参数,以限制Java可以使用的最大内存容量为几GB。不幸的是,JVM看起来好像忽略了这个设置,并且尽可能多的消费而不会崩溃。是否有另一种强制执行限制的方法?
你可以告诉JVM和操作系统版本。 – 2012-03-16 03:29:51
另外,请做一个ps -el | grep java并发送传递给进程的最终参数。 – 2012-03-16 04:20:38