如何找出打开的文件?

如何找出打开的文件?

lsof -n包含数千个如下的条目:

COMMAND     PID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
java      27181       root 5044u     FIFO                0,8       0t0  359768953 pipe
java      27181       root 5045u     0000                0,9         0       4734 anon_inode
java      27181       root 5046u     FIFO                0,8       0t0  359781352 pipe
java      27181       root 5047r     FIFO                0,8       0t0  359798491 pipe
java      27181       root 5048u     FIFO                0,8       0t0  359768702 pipe
java      27181       root 5049u     FIFO                0,8       0t0  359771810 pipe
java      27181       root 5050u     FIFO                0,8       0t0  359771810 pipe
java      27181       root 5051u     0000                0,9         0       4734 anon_inode
java      27181       root 5052u     0000                0,9         0       4734 anon_inode
java      27181       root 5053u     0000                0,9         0       4734 anon_inode
java      27181       root 5054u     FIFO                0,8       0t0  359778526 pipe
java      27181       root 5055u     FIFO                0,8       0t0  359798491 pipe
java      27181       root 5056u     FIFO                0,8       0t0  359828660 pipe
java      27181       root 5057u     0000                0,9         0       4734 anon_inode
java      27181       root 5058u     FIFO                0,8       0t0  359778518 pipe
java      27181       root 5059u     FIFO                0,8       0t0  359778518 pipe
java      27181       root 5060u     FIFO                0,8       0t0  359828660 pipe
java      27181       root 5061u     0000                0,9         0       4734 anon_inode
java      27181       root 5062u     0000                0,9         0       4734 anon_inode
java      27181       root 5063u     FIFO                0,8       0t0  359778520 pipe
java      27181       root 5064u     FIFO                0,8       0t0  359778520 pipe
java      27181       root 5065u     0000                0,9         0       4734 anon_inode
java      27181       root 5066u     FIFO                0,8       0t0  359781378 pipe
java      27181       root 5067u     FIFO                0,8       0t0  359843851 pipe
java      27181       root 5068u     FIFO                0,8       0t0  359828693 pipe
java      27181       root 5069u     FIFO                0,8       0t0  359831577 pipe
java      27181       root 5070u     FIFO                0,8       0t0  359781378 pipe
java      27181       root 5071u     0000                0,9         0       4734 anon_inode
java      27181       root 5072u     0000                0,9         0       4734 anon_inode
java      27181       root 5073u     0000                0,9         0       4734 anon_inode
java      27181       root 5074u     0000                0,9         0       4734 anon_inode
java      27181       root 5075u     FIFO                0,8       0t0  359943483 pipe
java      27181       root 5076u     0000                0,9         0       4734 anon_inode
java      27181       root 5077u     FIFO                0,8       0t0  359835297 pipe
java      27181       root 5078u     FIFO                0,8       0t0  359932954 pipe
java      27181       root 5079u     0000                0,9         0       4734 anon_inode
java      27181       root 5080u     FIFO                0,8       0t0  359940230 pipe
java      27181       root 5081u     0000                0,9         0       4734 anon_inode
java      27181       root 5082u     FIFO                0,8       0t0  359835267 pipe
java      27181       root 5083u     FIFO                0,8       0t0  359838075 pipe
java      27181       root 5084u     FIFO                0,8       0t0  359895241 pipe
java      27181       root 5085u     FIFO                0,8       0t0  359843844 pipe
java      27181       root 5086u     FIFO                0,8       0t0  359828661 pipe
java      27181       root 5087r     FIFO                0,8       0t0  359787185 pipe
java      27181       root 5088w     FIFO                0,8       0t0  359787185 pipe
java      27181       root 5089u     FIFO                0,8       0t0  359840961 pipe
java      27181       root 5090u     0000                0,9         0       4734 anon_inode
java      27181       root 5091u     FIFO                0,8       0t0  359835297 pipe
java      27181       root 5092u     FIFO                0,8       0t0  359828661 pipe
java      27181       root 5093u     0000                0,9         0       4734 anon_inode
java      27181       root 5094u     0000                0,9         0       4734 anon_inode
java      27181       root 5095u     FIFO                0,8       0t0  359835267 pipe
java      27181       root 5096u     FIFO                0,8       0t0  359838075 pipe
java      27181       root 5097u     FIFO                0,8       0t0  359840961 pipe
java      27181       root 5098u     0000                0,9         0       4734 anon_inode
java      27181       root 5099u     0000                0,9         0       4734 anon_inode
java      27181       root 5100u     FIFO                0,8       0t0  359843851 pipe
java      27181       root 5101u     FIFO                0,8       0t0  359895241 pipe
java      27181       root 5102u     0000                0,9         0       4734 anon_inode
java      27181       root 5103u     FIFO                0,8       0t0  359843710 pipe

看起来我们的 Java 服务正在泄漏一些句柄。如何找出导致这种情况的原因?它是真实文件的句柄还是其他东西?

答案1

我的建议是使用斯特拉斯进一步调查:

  strace -e trace="open,close" -o /tmp/trace  -v java -version

这将报告文件的所有打开和关闭/tmp/trace,例如

[...]
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
close(3) 
[...]

相关内容