0

我是一名开发人员,在 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 错误。

有任何想法吗?

4

3 回答 3

1

最简单的解决方法可能是检查您使用的 tomcat 版本是否在任何其他版本中存在此错误,您可能只需要升级/恢复 tomcat。

找到这个,希望它有用

http://www.nabble.com/-jira--Created:-(WW-3106)-SEVERE:-Servlet.service()-for-servlet-default-threw-exception-java.lang.IllegalStateException-(显示-a-BLANK-PAGE-to-user)-td23291783.html

于 2009-06-16T22:40:39.163 回答
1

您还应该寻找内存泄漏——您是否从战争中加载了可以从共享库中加载的类?此外——某些日志记录类可能会导致 tomcat 保留加载的类(这是填充 permgen 空间的内容)而不是 GC。查看 tomcat 类加载器并确保您没有从应用程序级类加载器加载超过您需要的内容。

于 2009-06-19T01:23:01.977 回答
1

从 256 到 512 MB 稳定了再次发生的 tomcat permgen 不稳定性。将 RAM 翻倍保证了临时改进,并且很可能会从修复到开发。否则会浪费时间进行分析,了解原因,然后无论如何将 RAM 翻倍。

于 2009-06-16T23:28:00.957 回答