java - Tomcat 许多 NioBlockingSelector$BlockPoller 实例填满了内存

标签 java linux tomcat nio connector

我在使用 Tomcat 7.0.42 over Java 7 (Java(TM) SE Runtime Environment (build 1.7.0_51-b13)) Java HotSpot(TM) 64 位服务器的应用程序时遇到了一个反复出现的问题虚拟机(build 24.51-b03,混合模式))

问题是,在没有任何可见原因的情况下,并且显然是随机的(我认为显然不是)Java 堆填充超过 75%,并且激活了一个完整的垃圾收集器。

问题是,FullGC之后,没有释放内存,所以,FullGC重新开始。这不断重复,因此 CPU 只忙于执行 GC,几乎没有 CPU 周期分配给任何其他线程,有效地挂起所有其他 Tomcat 线程。

这发生在不超过 5 或 10 分钟的时间内。

它似乎与系统负载无关,因为当我没有超过 2 个线程处于 Activity 状态和运行时也会发生这种情况。

由于 Java 进程没有响应,即使尝试获取堆或堆栈转储也很困难。

无论如何,我曾经得到过一次堆直方图,不幸的是我现在没有完整的直方图(我的错,我在没有通知的情况下删除了文件)但我从聊天中保留了这些信息:

1:      48504970     1552159040  org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller$2
2:      48506821     1164163704  java.util.concurrent.ConcurrentLinkedQueue$Node

如您所见,有超过 48k 个 org.apache.tomcat.util.net.NioBlockingSelector$BlockPoller$2 实例和相同数量的 java.util.concurrent .ConcurrentLinkedQueue$Node 实例(这个由第一个持有)。这最多可容纳 2.5GB,而我的内存堆是 3GB。

我有一个出现此问题的时间的 jstack 线程转储,我不能在这里张贴字符限制。如果有人想看,请询问,我会分享。

我现在唯一的解决方案是终止 Tomcat java 进程并重新启动服务器。

这可能是什么原因?

甚至出现的时间似乎都是随机的。它有时在早上发生,有时在晚上发生。一天同一天发生两次(中间重启了Tomcat)。

我在 Java 7 (build 1.7.0_51-b13) 上运行 Tomcat 7.0.42 over Linux (Linux version 3.10.0-123.9.2.el7.x86_64 (builder@kbuilder.dev.centos.org ) (gcc 版本 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Tue Oct 28 18:05:26 UTC 2014).

我还有 JBoss Infinispan Cache 和 Apollo MQ 消息服务的实例,但我认为这两者都不是罪魁祸首。

最佳答案

大多数 http 线程在 log4j 中被阻塞。

您的 log4j 级别可能太低(例如跟踪)

这导致:

  • 争论
  • 内存分配
  • 表现不佳

由于争用,内存保持时间更长。

尝试将 log4j 级别设置为 WARN。

这可能无法解决您所有的问题,但会有所帮助。

关于java - Tomcat 许多 NioBlockingSelector$BlockPoller 实例填满了内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275936/

相关文章:

java - 如何忽略 Solr 索引中的某些 HTML 部分(例如页眉、菜单、页脚)?

java - 过滤器操作符不在

python - 什么条件导致打开的非阻塞命名管道 (fifo) 为 "unavailable"用于读取?

java - 如何让 Tomcat 在启动时预编译 JSP?

tomcat - 无法加载 JDBC 驱动程序类 'org.neo4j.jdbc.Driver'

Java EE 6 java.lang.NoClassDefFoundError glassfish

java - Google 钱包在线 API

javascript - linux 共享库可以打开、显示和 printf 到终端吗?

linux - 使用 grep 提取值

tomcat - Jenkins 网络应用程序部署