【发布时间】:2017-03-07 14:54:49
【问题描述】:
我们有一个使用 eclipse-jetty 版本 8.1.6 的 java 网络服务器。最近我们开始注意到内存不足错误。 我们对活动线程数的分析很少。这在 100 左右似乎是合理的。该进程具有 5GB 最大堆内存和 4GB 初始堆内存。
Process Details
Environment: Docker(kubernetes)
java.version="1.8.0_91"
java.vm.info="mixed mode"
java.vm.name="Java HotSpot(TM) 64-Bit Server VM"
thread size = 1024K
ulimit is unlimited for max process per user.
Container(Pod) Max memory is allocated to be 8GB
网络服务器平均每分钟接收 350 个请求。我们还在 ELB(kubernetes 服务)后面运行了许多这样的实例。运行几个小时后,我们注意到这个 OOM。这个问题是随机的,它发生在压力测试中。
OOM 堆栈跟踪:
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method) [na:1.8.0_91]
at java.lang.Thread.start(Thread.java:714) [na:1.8.0_91]
at org.eclipse.jetty.util.thread.QueuedThreadPool.startThread(QueuedThreadPool.java:441) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
at org.eclipse.jetty.util.thread.QueuedThreadPool.dispatch(QueuedThreadPool.java:366) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
既然线程数是合理的。我怀疑有些内存泄漏。但我无法在 docker 容器上找到堆外内存大小。 有没有办法找到它?
搜索了一段时间后,我在码头下面发现了这个错误。
如何在不升级码头的情况下验证错误是否是由于以下问题引起的?
相关错误 ID:https://bugs.eclipse.org/bugs/show_bug.cgi?id=477817
【问题讨论】:
标签: java memory docker memory-leaks