lsof在我的服务器上运行非常慢


8

我正在其中一台Linux服务器中运行lsof,以检查/tmp/incoming_data.txtext3系统中的一个文件()是否被其他程序打开。我的服务器上有很多TCP连接。奇怪的是,'sudo lsof'的执行需要大约两分钟的时间才能完成,并且在这两分钟之内使用了99.x%的CPU。

我使用的命令是sudo lsof /tmp/incoming_data.txt。我尝试了“ 定影器 ”,它需要大约相同数量的CPU和执行时间。有什么我可以解决的问题吗?


经过两分钟后,lsof显示什么?该文件打开了多少个进程和线程?不运行lsof时CPU负载是多少?
Michael Martinez

Answers:


7

如果您确定可以跳过打开的TCP或UDP连接,因为您提到的连接太多,则可以使用lsof的方言特定选项-X

lsof -X

阅读lsof的手册页,然后搜索“ -X”以获取详细信息。


17

传递该-n选项以跳过解析IP连接的DNS名称。几乎可以肯定,这将是所有放缓的最大部分。


1
嗨,@ Zoredache,非常感谢您的答复。我已经尝试了-n和-P选项,但是它们似乎都没有帮助。都一样谢谢!
詹姆斯·甘

如果它仍然很慢,那么我可能会使用strace运行它,看看是否能弄清楚为什么它很慢。
Zoredache 2015年

1
这在MacOS X El Capitan上为我工作
Andrew Miner

@JamesGan我有同样的问题。你有没有发现问题?
Noldorin '18

大。这在MacOS 10.14上为我工作
忍者

0

我发现了这个小NPM软件包,它在加快文件lsof的速度方面做得很出色:https : //www.npmjs.com/package/lsof-mac-fast

我创建了一个包装器脚本来使用它:

node ~/tools/MacOs/lsof.js db.mv.db 1000
repeating using interval: 1000
COMMAND  PID  USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
java    7336 jumar  256u   REG    1,4 194465792 53854404 
db.mv.db

这是我的脚本:

// https://www.npmjs.com/package/lsof-mac-fast
var fastLsof = require('lsof-mac-fast');

var myArgs = process.argv.slice(2);
var fileToCheck = myArgs[0];
var repeatIntervalMs = myArgs[1];
// console.log('myArgs: ', myArgs);

function lsofFile(file) {
  fastLsof.lsof([file], function(err, stdout, stderr) {process.stdout.write(stdout)});
}

if (repeatIntervalMs) {
  // repeat until killed
  // https://javascript.info/settimeout-setinterval
  console.log('repeating using interval: ' + repeatIntervalMs);
  var timerId = setInterval(() => lsofFile(fileToCheck),  repeatIntervalMs);
} else {
  // just one time
  lsofFile(fileToCheck);
}

重复间隔可能非常低,例如10 ms似乎可以正常工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.