Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么新的遗迹会吞噬很多tomcat的记忆?_Java_Tomcat_Memory Leaks_Jvm Arguments_Newrelic - Fatal编程技术网

Java 为什么新的遗迹会吞噬很多tomcat的记忆?

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/

最近,我们开始使用New Relic来监控托管在tomcat 7.0.6服务器上的生产webapp,但我们观察到,该tomcat的内存占用在不断增加,在一周内,它会耗尽所有服务器(AWS High memory Double Extra Large Instance)内存并变得无响应,唯一的方法是重新启动它。 我们在启动tomcat时提供Xms和Xmx参数,但在几个小时内,tomcat进程的内存使用量会超过Xmx值,并且会一直增加,直到所有服务器内存都用完。下面是进程命令:

/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进行了测试