当前位置: 首页 > 知识库问答 >
问题:

如何在Java中查找非堆空间内存泄漏?

公冶翰池
2023-03-14

我们有一个使用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

webserver平均每分钟接收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容器上找到关闭堆内存大小。有办法找到吗?

搜索了一段时间后,我在Jetty发现了下面的这个bug。

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

共有1个答案

亢琦
2023-03-14

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

 类似资料:
  • 问题描述:我们在一个web应用程序(在CQ5上)中面临以下问题: 系统配置详细信息:系统内存: 7GB Xmx: 3.5 GB Xms: 1 GB MaxPermGen: 300MB最大观察线程数: 620(包括300个超文本传输协议请求服务线程)Xss:默认值 问题是cq5 java进程(运行servlet引擎)消耗的内存随着时间的推移而不断增加。一旦达到6到6.5GB以上(系统内存达到7GB)

  • 我需要找到Flutter的内存泄漏。如何找到他们?以及如何为测试创建内存泄漏?

  • 问题内容: 我必须在Java应用程序中找到内存泄漏。我对此有一些经验,但希望就此方法论/战略提出建议。欢迎任何参考和建议。 关于我们的情况: 堆转储大于1 GB 我们有5次堆放场。 我们没有任何测试案例可以激发这一点。仅在使用至少一个星期后,它才会在(大规模)系统测试环境中发生。 该系统建立在内部开发的传统框架上,该框架具有许多设计缺陷,以至于无法将它们全部计算在内。 没有人深入了解该框架。它已被

  • 问题内容: 您如何找到Java中的内存泄漏(例如使用JHat)?我试图在JHat中加载堆转储,以进行基本了解。但是,我不明白我应该如何找到根引用(ref)或任何被称为根引用的东西。基本上,我可以说哈希表条目有几百兆字节([java.util.HashMap $ Entry或类似的东西),但是地图到处都是……使用某种方法可以搜索大型地图,还是找到大对象树的一般根? [编辑]好的,到目前为止,我已经阅

  • 我用java写了一个项目,使用JNI使用C++库。所有的代码都是我们写的,所以我有所有的源代码。 几个小时后,机器内存耗尽,尽管我的进程只是迭代文件,并且删除了与上一个文件有关的所有内存。 谢了。

  • 问题内容: 我怀疑我们的ActiveMQ连接桥中存在严重的内存泄漏- 我们看到的是典型的内存泄漏模式(应用程序加载正常,如果长时间运行或在短时间内一次又一次地重新启动,则会降低速度) 。我查找了发现Java内存泄漏的现代最佳实践,许多开发人员似乎正在放弃传统工具(如jhat / jmap)来代替new(er)。 启动此工具(并花几个小时阅读其教程)后,我便能够为CPU和内存拍摄探查器快照。 在这一