首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将进程文件描述符映射到java对象

如何将进程文件描述符映射到java对象
EN

Stack Overflow用户
提问于 2014-04-23 18:41:09
回答 1查看 1.6K关注 0票数 2

我有一个泄露文件描述符的web应用程序。在生产环境中,java进程上的文件描述符的数量随着时间的推移增长缓慢,并且在几个月后会耗尽文件描述符。文件描述符的当前限制相当高,为10240。

查看java进程时,文件描述符列表如下所示:

代码语言:javascript
复制
# ls -l /proc/32526/fd |wc -l
9558

# ls -l /proc/32526/fd
lr-x------ 1 userx userx 64 Apr 23 12:21 1229 -> /data/s1-js2-tier2-store6/52d/2ed/f73/1c80d154a055e5e
lr-x------ 1 userx userx 64 Apr 23 12:21 1230 -> /data/s1-js2-tier2-store6/52d/9aa/ad3/1c80d154a0688a6
lr-x------ 1 userx userx 64 Apr 23 12:21 1231 -> /data/s1-js2-tier2-store4/522/9c8/543/1c81a0c37763880
lr-x------ 1 userx userx 64 Apr 23 12:21 1232 -> /data/s1-js2-tier2-store6/52d/78c/4f3/1c80d154a06308c
lr-x------ 1 userx userx 64 Apr 23 12:21 1239 -> /data/s1-js2-tier2-store6/530/b88/753/1c80901a6d6541f (deleted)

我想要做的是选择一个文件描述符,然后以某种方式将其映射到实时JVM中的一个对象,这样我就可以探索哪些对象被遗漏了,以及谁持有对附加了文件描述符的对象的引用。

我想使用Eclipse连接到实时JVM,但要做到这一点,我需要重启JVM以添加调试端口/参数,但随后将需要等待数月才能出现相同的情况。

我如何在不重启JVM的情况下做到这一点?有没有什么转储工具可以帮助我解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2015-02-20 00:27:12

您需要的是VM的堆转储。

如果您使用的是JDK1.7,即使没有预先设置调试,也可以连接到JVM。您应该能够通过shell上的jmap获得堆转储。

代码语言:javascript
复制
jmap -dump:format=b,file=<FILENAME> <PID> 

将为您完成此操作。

然后,您可以将堆转储加载到Eclipse MAT中,并从那里进行分析。如果泄漏足够严重,那么使用默认报告检测它可能并不是很难。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23241878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档