我在具有 2GB RAM 的 debian-lenny x64 服务器上运行带有 apache 2.2 和 mod_jk 1.2.26 的 tomcat 7。
我的服务器有一个奇怪的问题:每隔几个小时,有时(在负载下)每隔几分钟,我的 tomcat ajp-connector 就会因内存泄漏错误而暂停,但似乎这个错误也会影响系统的其他一些部分(例如其他一些正在运行的应用程序也停止工作)&我必须重新启动服务器才能解决问题一段时间。
我已经检查了 catalina.out 好几天了,但似乎在暂停 ajp 并显示此消息之前没有唯一的错误模式:
INFO: Pausing ProtocolHandler ["ajp-bio-8009"]
有时在暂停前会出现此消息:
Exception in thread "ajp-bio-8009-Acceptor-0" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)...
有时这个:
INFO: Reloading Context with name [] has started
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5482)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:230)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3847)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:424)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1214)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1400)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1410)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1410)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1389)
at java.lang.Thread.run(Thread.java:619)
java.sql.SQLException: null, message from server: "Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug"...
& 有时是与程序的其他部分相关的输出消息。
我检查了我的应用程序源代码,我猜它不会导致问题,我还使用 jConsole 检查了内存使用情况。流浪点是,当服务器出现故障时,在堆和非堆 jvm 内存空间上都会显示大量可用内存。正如我之前所说,在服务器崩溃后,许多其他应用程序也失败了,当我想重新启动它们时,它会给出一个资源暂时不可用的消息(我还检查了我的 limits.conf 文件)。
所以我真的很困惑这个严重的问题很多天了,我真的不知道了。所以,任何人都可以给我任何建议来解决这个复杂的& 未知问题???
这个错误最可能的原因是什么?