我是一名开发人员,在 CentOS 5 机器上运行一个网站,其中包含 Apache Tomcat 6.x、Alfresco Labs 3(独立的 .war 文件)和几个自定义 Web 应用程序。
在过去的几个月里,服务器一直在正常运行,但就在前几天,有人通过 Alfresco 上传了一张图片,该网站停止了响应。除此之外,所有通过 Tomcat 运行的 Web 应用程序也没有响应。我尝试在本地进行远程登录(即 telnet localhost 80),但没有连接就超时了。
查看最近的日志文件(localhost...log),我看到一个以java.lang.OutOfMemoryError: PermGen space failure开头的堆栈跟踪,经过一番谷歌搜索后,最大 perm 大小从 128MB 增加到 384MB。我们认为这会解决问题,但今天它又回来了,tomcat 又宕机了(除了日志中没有 PermGen 堆栈跟踪)
另一个不断弹出的堆栈跟踪如下:
Jun 16, 2009 3:38:26 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet default threw exception
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:707)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
我不知道这是否相关,因为它似乎并没有真正使 Tomcat 崩溃,但它似乎经常弹出。我认为这没什么大不了的另一个原因是在过去一个月左右的时间里,它一直出现在我们的日志中。
除此之外,我不完全确定该怎么做。我真的没有任何其他线索可以检查。我猜这是一个露天问题,但我不能肯定地说。我今天更改配置所做的唯一一件事就是将 permgen 大小增加到 512MB,但这可能无济于事,因为这次我们实际上并没有收到 PermGen 错误。
有任何想法吗?