gpt4 book ai didi

Java 句柄(互斥锁?)被泄露且未被释放(不是文件句柄)

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:06 24 4
gpt4 key购买 nike

我有一个运行很长时间的复杂 Java 应用程序。该应用程序一遍又一遍地执行相同的操作,几乎没有细微差别。我的问题是 Windows 任务管理器显示了 Java 进程的大量泄漏句柄(不是文件句柄)。

在压力下运行应用程序一段时间后,我会遇到奇怪的故障,例如应用程序卡住、消失,或者我在尝试打开文件时遇到 FileNotFoundException(“系统资源不足,无法完成请求的服务”)。

我使用 Windows 任务管理器查看问题所在,发现对于 java.exe 进程 - 句柄数量增加得非常快。线程数没有增加,使用的 RAM 量也没有增加。

然后我使用 SysInternal 的 Process Explorer 来了解这些句柄是什么。我看到它们不是文件句柄,而是数千个“Mutant”类型的句柄,名称为\BaseNamedObjects\??????n。根据网络上的某些站点,Mutant in Process explorer 表示 Mutex。我的 Java 应用程序不会有意创建任何互斥量。

下一步是使用分析工具来缩小泄漏源的范围。我使用了“J Optimizer”和“Java VirtualVM”。对于这两个应用程序,我都无法检测到泄漏的句柄。他们有内存泄漏检测器,但我找不到检测泄漏句柄的方法。

我的问题是:我该如何调试这个问题?我如何才能发现导致 handle 泄漏的原因?

谢谢

最佳答案

如果您对泄漏引用的分配方式感到好奇,请参阅:How to view memory allocation stacktrace in Java VisualVM

我不确定您如何追踪引用未能解除分配的原因。

关于Java 句柄(互斥锁?)被泄露且未被释放(不是文件句柄),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030739/

24 4 0