如何在java中找到非堆空间内存泄漏?

时间:2017-03-07 14:54:49

标签: java memory docker memory-leaks

我们有一个使用eclipse-jetty版本8.1.6的java webserver。最近我们开始注意到内存不足错误。 我们几乎没有关于活动线程数的分析。这似乎在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 StackTrace:

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容器上找到off heap内存大小。 有没有办法找到它?

经过一段时间的搜索,我在码头发现了这个错误。

如何在不升级jetty的情况下验证错误是否是由于以下问题引起的?

相关错误ID:https://bugs.eclipse.org/bugs/show_bug.cgi?id=477817

1 个答案:

答案 0 :(得分:1)

您可以尝试将 -XX:-HeapDumpOnOutOfMemoryError 添加到java启动参数中并查看转储。

相关问题