1

我们有一个 RESTful Web 服务(Java,托管在 Tomcat 中)。有时它会失败(不是每周)。当它失败时,Java CPU 消耗达到 100% 并占用所有可用内存。它不会自行完成。我必须重新启动服务器。

Tomcat 访问日志中没有任何可疑之处。我猜我们的一个用户可能会提交一个非常“繁重”的请求,从而导致服务器停机。这个请求是否可能不在 Tomcat 日志中,因为它从未完成?

非常感谢

格言

4

1 回答 1

0

您的 Tomcat 进程更有可能正在泄漏内存,直到它没有更多可用内存为止。尝试记录每个请求的堆大小,然后注意它是否不断增长。

tomcat 类加载器可能会泄漏内存,尤其是在您使用“自动部署”功能时。

long freeMem=Runtime.getRuntime().freeMemory();
long maxMem=Runtime.getRuntime().maxMemory();
long totalMem=Runtime.getRuntime().totalMemory();

然后记录 freeMem/MaxMem 和 totalMem。如果 max 继续增长,您就会出现泄漏。

编辑:并回答你的问题。这取决于 tomcat 是如何失败的,以及您是如何设置日志记录的。但是对于我们的系统(一个相当默认的 apache mod_proxy=>tomcat,有一些致命的 tomcat 错误只记录在 catalina.out

于 2013-06-26T10:55:37.707 回答