我发现elasticsearchUbntu 14.04 linux vm 中的进程持有许多文件处理程序,而当我使用 lsof 进行进一步分析时,它只会给出一些令人困惑的结果,如下所示:
$ lsof -p | wc -l
$ lsof -p 63589 | wc -l
960
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 63589 ubuntu mem REG 202,65 5614666 8627864 /var/elasticsearch/nodes/0/indices/jetty/1/index/_2uid_Lucene41_0.tim
$ lsof -n | grep | wc -l
$ lsof -n | grep 63589 | wc -l
111268
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 63589 12817 ubuntu 625r REG 202,65 5014 8627698 /var/elasticsearch/nodes/0/indices/cde_api_server/1/index/_3h65.cfs
java 63589 63611 ubuntu 207u 0000 0,9 0 7413 anon_inode
java 63589 63611 ubuntu 208r FIFO 0,8 0t0 737362 pipe
似乎如果使用 lsof-p,结果中不会有 TID?但它应该列出 pid 63589 的所有文件描述符,对吗?
960 与 111268 的差别如此之大,有人能帮忙解释一下吗?
答案1
你试试这个怎么样?
lsof -n | grep 63589 | head -100
“lsof” 是打开文件的列表。因此,每次您都可以得到不同的结果。但是,960 和 111268 相差太大了。可能存在类似 PID 的进程(例如 163589 包括 63589)。因此,请检查“lsof -n | grep”的结果
答案2
第一个命令
lsof -p 63589
将显示 id 为 63589 的进程的所有打开的文件
第二个
lsof -n | grep 63589
将显示由进程 63589 打开的文件以及由 63589 进程创建的线程(这就是 TIP 列存在的原因)。第二个命令计算出更多结果完全正常。