Java 为什么新的遗迹会吞噬很多tomcat的记忆?
最近,我们开始使用New Relic来监控托管在tomcat 7.0.6服务器上的生产webapp,但我们观察到,该tomcat的内存占用在不断增加,在一周内,它会耗尽所有服务器(AWS High memory Double Extra Large Instance)内存并变得无响应,唯一的方法是重新启动它。 我们在启动tomcat时提供Xms和Xmx参数,但在几个小时内,tomcat进程的内存使用量会超过Xmx值,并且会一直增加,直到所有服务器内存都用完。下面是进程命令:Java 为什么新的遗迹会吞噬很多tomcat的记忆?,java,tomcat,memory-leaks,jvm-arguments,newrelic,Java,Tomcat,Memory Leaks,Jvm Arguments,Newrelic,最近,我们开始使用New Relic来监控托管在tomcat 7.0.6服务器上的生产webapp,但我们观察到,该tomcat的内存占用在不断增加,在一周内,它会耗尽所有服务器(AWS High memory Double Extra Large Instance)内存并变得无响应,唯一的方法是重新启动它。 我们在启动tomcat时提供Xms和Xmx参数,但在几个小时内,tomcat进程的内存使用量会超过Xmx值,并且会一直增加,直到所有服务器内存都用完。下面是进程命令: /usr/java/
/usr/java/jdk1.6.0_24//bin/java
-Djava.util.logging.config.file=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/conf/logging.properties
-Xms8192m
-Xmx8192m
-javaagent:/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/newrelic/newrelic.jar
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Duser.timezone=Asia/Calcutta
-Djava.endorsed.dirs=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/endorsed
-classpath /xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/bin/bootstrap.jar:/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/bin/tomcat-juli.jar
-Dcatalina.base=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6
-Dcatalina.home=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6
-Djava.io.tmpdir=/xxx/xxx/xxx/xxx/apache-tomcat-7.0.6/temp org.apache.catalina.startup.Bootstrap start"
理想情况下,我希望这个进程不会使用超过8GB的内存,但在几个小时内它会超过10GB,在几天内它会超过20GB,而此服务器上的所有其他内容都会因此受到影响(我使用“top”来查看内存使用情况)。这怎么可能呢?我正在分享有关上述事件的更多信息。内存泄漏不在Java堆中。应用程序从未出现任何内存不足错误(8GB是我们设置的Java堆最大限制)。然而,虚拟内存和驻留内存一直在增加,直到RAM耗尽内存。 我们已经确认,当使用文物保护剂时,会发生泄漏。 版本:New Relic Agent v2.1.2很抱歉给您添麻烦。我们(NewRelic)正在调查这个问题,但第一个建议是请尝试Java代理的最新2.2.1版本,该版本对我们插入类的方式进行了重大更改
当我们有更多信息时,我将在这里继续讨论。有一个问题会影响任何Sun/Oracle JVM,并将表现为非堆内存的无限增长。对于newrelic Java代理版本2.16+,有一个变通方法,在公共部分的newrelic.yml文件中添加一个关闭延迟来进行类转换
class_transformer:
shutdown_delay: 3600
从
解决Oracle JVM错误,该错误在极少数情况下会导致本机错误
内存泄漏
在极少数情况下,Oracle JVM会泄漏本机操作系统内存(而不是堆)
当类被代理截获时。此设置将
关闭在给定数量的
秒。代理将继续监视在此之前加载的类
时间
我是一名工程师,在NewRelic从事Java代理的工作。如果愿意,您可以在以下位置打开此问题的支持票证:support@newrelic.com. 您正在使用哪个版本的Java代理?另外,内存爆炸是在系统内存还是堆内存中?我似乎也有这个问题,所以你并不孤单。这个周末我向newrelic提交了一份支持请求。在我们的例子中,tomcat死于OutOfMemory异常。我也遇到了这个问题。我刚刚用2.6进行了测试