我们有一个RESTful Web服务(Java,托管在Tomcat中)。它不时失败(不是每周)。当它失败时,Java CPU消耗将达到100%并占用所有可用内存。它本身并没有完成。我必须重新启动服务器。
Tomcat访问日志中没有任何可疑之处。我猜我们的一个用户可能会提交一个非常“重”的请求,这会导致服务器关闭。这个请求是否可能不在Tomcat日志中,因为它从未完成?
非常感谢
马克西姆
答案 0 :(得分: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