gpt4 book ai didi

unix - tomcat java.util.logging进程

转载 作者:行者123 更新时间:2023-12-01 05:19:06 25 4
gpt4 key购买 nike

我有一个运行 tomcat7 的 linux (ubuntu) 服务器。服务器有 1GB 的内存,我收到了从 Java 抛出的堆空间错误。

基本上发生的事情是我的 tomcat 服务器(运行我的 servlet 代码)抛出异常,因为没有更多的内存可以分配。我的代码非常精简,所以我认为这不是问题所在。

当我查看 htop 时,我看到了很多 java 日志进程,我看到了大约 30 个这样的进程:

ps ax | grep java
7412 pts/0 Sl 0:02 /usr/bin/java -Djava.util.logging.config.file=/usr/share/tomcat/apache-tomcat-7.0.29/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat/apache-tomcat-7.0.29/endorsed -classpath /usr/share/tomcat/apache-tomcat-7.0.29/bin/bootstrap.jar:/usr/share/tomcat/apache-tomcat-7.0.29/bin/tomcat-juli.jar -Dcatalina.base=/usr/share/tomcat/apache-tomcat-7.0.29 -Dcatalina.home=/usr/share/tomcat/apache-tomcat-7.0.29 -Djava.io.tmpdir=/usr/share/tomcat/apache-tomcat-7.0.29/temp org.apache.catalina.startup.Bootstrap start
7426 pts/0 D+ 0:00 grep --color=auto java
25937 ? Sl 13:12 /usr/bin/java -Djava.util.logging.config.file=/usr/share/tomcat/apache-tomcat-7.0.29/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat/apache-tomcat-7.0.29/endorsed -classpath /usr/share/tomcat/apache-tomcat-7.0.29/bin/bootstrap.jar:/usr/share/tomcat/apache-tomcat-7.0.29/bin/tomcat-juli.jar -Dcatalina.base=/usr/share/tomcat/apache-tomcat-7.0.29 -Dcatalina.home=/usr/share/tomcat/apache-tomcat-7.0.29 -Djava.io.tmpdir=/usr/share/tomcat/apache-tomcat-7.0.29/temp org.apache.catalina.startup.Bootstrap start

随着时间的推移,这些 java 进程会慢慢泄漏内存,并且因为我只有 1gb 的 ram 可以使用我的 tomcat 服务器开始抛出堆空间异常。

我已经摆弄过 log4j(但它应该被关闭)并且我已经尽我所能关闭我能找到的配置中的日志记录。

任何帮助都会很棒,我只需要摆脱这些过程——它们太贪婪了。谢谢!

~丹

编辑:更多信息:

这可能是一个足够大的提示来完全解决这个问题 - 我检查了一些启动调试并提出了这个:

    Oct 02, 2012 8:50:08 AM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

SEVERE: The web application [/NMVServer] appears to have started a thread named [http-bio-8080-exec-53] but has failed to stop it. This is very likely to create a memory leak.
Oct 02, 2012 8:50:08 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads

SEVERE: The web application [/NMVServer] appears to have started a thread named [http-bio-8080-exec-54] but has failed to stop it. This is very likely to create a memory leak.
Oct 02, 2012 8:50:08 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads

SEVERE: The web application [/NMVServer] appears to have started a thread named [http-bio-8080-exec-62] but has failed to stop it. This is very likely to create a memory leak.
Oct 02, 2012 8:50:08 AM org.apache.catalina.loader.WebappClassLoader
clearReferencesThreads

SEVERE: The web application [/NMVServer] appears to have started a thread named [http-bio-8080-exec-64] but has failed to stop it. This is very likely to create a memory leak.

我发现的一个泄漏问题是由于 JDBC 驱动程序的错误 http://bugs.mysql.com/bug.php?id=36565根据几个论坛。这解决了我收到的另一条消息。

我一直在四处寻找,发现这个非常有用:

http://wiki.apache.org/tomcat/MemoryLeakProtection

现在我正努力听取您的所有建议,谢谢!

~丹

最佳答案

总的来说,我希望 java 中的日志记录代码已经过良好测试。如果您的日志记录配置没有生成日志输出,那么它的开销很低。您的 htop 结果可能显示 tomcat 中的一些空闲线程状态。

它可能正在记录,但您可能需要考虑 all the ways your application or another component may be leaking memory .

所有 JVM 都有非常好的诊断内存泄漏的工具。类似 this 的话题讨论找出正在发生的事情的好方法。

编辑一些想法

如果大量请求使用 HttpServletRequest.getSession(),您可能需要检查您的配置是否有太多 session 。 Manager组件配置在里面 Context对于无限 session ,默认为 -1。

the current issue fix list检查你的tomcat版本如果您遇到已知的内存泄漏。

最后,Tomcat 7 包含一个 JreMemoryLeakPreventionListener这可能会显示资源未被释放。

关于unix - tomcat java.util.logging进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com