Jam*_*sev 10 java lsof ioexception
我在Linux上使用PID 25426运行Java应用程序.运行时lsof -p 25426,我注意到:
java 25426 uid 420w FIFO 0,8 0t0 273664482 pipe
java 25426 uid 421r FIFO 0,8 0t0 273664483 pipe
java 25426 uid 461r FIFO 0,8 0t0 273622888 pipe
java 25426 uid 463w FIFO 0,8 0t0 273633139 pipe
java 25426 uid 464r FIFO 0,8 0t0 273633140 pipe
java 25426 uid 465r FIFO 0,8 0t0 273622889 pipe
java 25426 uid 471w FIFO 0,8 0t0 273623682 pipe
java 25426 uid 472r FIFO 0,8 0t0 273633141 pipe
Run Code Online (Sandbox Code Playgroud)
该结果应如何解释?
我正在解决有太多打开文件的问题,并试图了解这个观察是否相关.
随着应用程序继续运行,pipe条目数量会变化(上下).
Dee*_*ala 18
- java - 打开文件的进程.
- 25426 - 这应该是真正的PID.如果没有,请通过发布标题告诉我们它是什么.
- 420 w - 文件描述符编号,后跟打开的模式.(读/写)
- 0,8 - 主要次要设备识别.
- 273664482 - 文件的inode.
- 管道 - 在您的应用程序中打开的FIFO管道.
你没有关闭所有你的流.在读取或写入模式下有许多打开文件描述符正在写入未命名的管道.最常见的情况是人们使用Runtime.getRuntime.exec()然后继续保持与进程关联的流打开.您可以使用commons IO utils库来关闭它们,也可以自己关闭它们.
try
{
p = Runtime.getRuntime().exec("something");
}
finally
{
if (p != null)
{
IOUtils.closeQuietly(p.getOutputStream());
IOUtils.closeQuietly(p.getInputStream());
IOUtils.closeQuietly(p.getErrorStream());
}
}
Run Code Online (Sandbox Code Playgroud)
如果这不是问题,您需要深入研究代码库并确定泄漏流的位置并插入它们.
| 归档时间: |
|
| 查看次数: |
11805 次 |
| 最近记录: |