tomcat - 错误记录和分析 Web 应用程序

标签 tomcat

我已在 windows7 计算机上使用 tomcat7 部署了两个 Web 应用程序。使用一段时间后,任何一个应用程序都会抛出 java.lang.OutOfMemoryError: PermGen space 错误。 2-3 分钟后,另一个应用程序也停止响应。因此,我开始查看 tomcat7 错误日志文件 tomcat7-stderr.xxx.log,我发现日志显示某些 http-bio 线程引发了内存不足错误。

我想知道哪个应用程序抛出第一个错误,所以我希望 tomcat 记录带有错误的应用程序名称,我该怎么做?

我可以检查每个 Web 应用程序从分配给 tomcat 的内存中占用了多少内存吗?

目前 tomcat 的初始内存池为 512 MB最大内存池为 900 MB

最佳答案

I want to know which application first throws error, so I want tomcat logs the error with the Application name, Is it possible to do?

Tomcat 以及您部署到 Tomcat 的所有应用程序都在一个 JVM 中运行。这意味着这些应用程序中的任何一个都可能是原因,但也意味着它也可能是导致问题的一个或多个应用程序的集合。换句话说,您可能无法只对一个应用程序指手画脚。

这就是说,因为您看到的是 OOME:PermGen,有几个可能的原因。

  • 您有很多(数千个)JSP。这些被编译为类,并且类增加了 PermGen 要求。这是一个合法的用例,如果您有大量 JSP,则只需要更大的 PermGen。
  • 您有一个动态生成类的应用程序。像 cglib 这样的库可以做到这一点。您可能没有直接使用它,但许多框架都使用它或类似的库。再次,我建议增加 PermGen,因为您可能只需要多一点来运行应用程序。
  • 您正在热重新部署应用程序(无需重新启动即可将新的 WAR 放入“webapps”目录中)。这本身并不是问题,但如果您的应用程序没有完全取消部署,您最终会出现缓慢的内存泄漏,从而导致 PermGen 空间耗尽。如果您遇到此问题,请查看 these slides特别是#11,它更多地讨论了这个问题并展示了如何找出原因。

在这三种情况中,最后一种无疑是最有可能发生的。

Can I check which web application is taking how much memory from memory allocated to tomcat 7?

附加分析器或 jvisualvm。他们中的大多数人对 PermGen 没有太多的了解,因为他们通常关注堆的使用,但他们会有所帮助。

如果您使用 jvisualvm,这些是一些用于调试内存相关问题的有用插件:“Memory Pools”、“Visual GC”和“VisualVM-BufferMonitor”。

默认情况下它们不会安装,因此您必须转到“工具”->“插件”并安装它们。

无论您使用什么工具,我怀疑您都会找到按应用程序划分内存使用情况的分割。 “应用程序”是一种容器级别的概念,JVM 或您的分析器可能无法理解这一概念。如果您需要隔离每个应用程序的内存使用情况,最好一次只将一个应用程序部署到 Tomcat。这样您就知道内存中唯一的内容是与该应用程序相关的资源。

如果您处于生产环境,您可能需要考虑运行多个单独的 Tomcat 实例(每个应用一个)。这样做的结果是,每个应用程序都将拥有单独的 JVM,并且如果其中一个应用程序出现故障,其他应用程序也不会受到影响。缺点是额外的 JVM 和 Tomcat 实例会产生一些开销。如果您有可用内存,那么为了获得额外的稳定性,这通常是可以接受的折衷方案。

after sometime of use any one of application throws java.lang.OutOfMemoryError: PermGen space error. after 2-3 mins another application also stops to respond.

当JVM发生OOME时,需要尽快重启JVM。 OOME 发生后,所有关于什么会继续起作用、什么不会继续起作用的赌注都已确定。恢复正常工作环境的唯一方法是重新启动 JVM。

关于tomcat - 错误记录和分析 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760411/

相关文章:

web-services - 如何查看 Tomcat 上可用的 Web 服务?

tomcat - 修改.class文件需要重启Tomcat吗

java - 无法使用 Spring MVC 将大文件上传到服务器?

java - 尝试在 Apache Tomcat 上部署 GWT 失败

tomcat - maven 2.2.1 Tomcat 7 无法调用 Tomcat 管理器 :401

tomcat - 使用 pem 文件在 tomcat 上启用 SSL

java - 如何在 Servlet 过滤器中执行昂贵的一次性初始化?

tomcat - 带 tomcat 的 Netbeans

java - 日志信息显示在嵌入式 jetty 中,但当应用程序部署到 tomcat 时不显示

java - 连接到 PHP 的 RESTful Java 应用程序