서버에서 lsof가 매우 느리게 실행됩니다 Linux 서버

Linux 서버 중 하나에서 lsof를 실행 /tmp/incoming_data.txt하여 ext3 시스템의 하나의 파일 ( )이 다른 프로그램에 의해 열려 있는지 확인 합니다. 내 서버에는 많은 TCP 연결이 있습니다. 이상한 점은 ‘sudo lsof’의 실행이 완료되는 데 약 2 분이 걸리고 2 분 동안 99.x % CPU를 사용한다는 것입니다.

내가 사용한 명령은 sudo lsof /tmp/incoming_data.txt입니다. CPU와 실행 시간이 거의 같은 ” fuser “를 시도 했습니다. 이 문제를 해결할 수있는 방법이 있습니까?



답변

열린 TCP 또는 UDP 연결을 건너 뛸 수 있다고 확신하는 경우 너무 많음을 언급 했으므로 lsof의 방언 별 옵션을 사용할 수 있습니다 -X.

lsof -X

자세한 정보는 lsof의 매뉴얼 페이지를 읽고 ‘-X’를 검색하십시오.


답변

-nIP 연결의 DNS 이름 확인을 건너 뛰 려면 옵션을 전달하십시오. 이것은 거의 모든 둔화의 가장 큰 부분이 될 것입니다.


답변

https://www.npmjs.com/package/lsof-mac-fast 파일의 속도를 높이는 훌륭한 작업을 수행하는이 작은 NPM 패키지를 발견했습니다 .

그것을 사용하기 위해 래퍼 스크립트를 만들었습니다.

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);
}

반복 간격은 실제로 낮을 수 있습니다. 예를 들어 10ms가 제대로 작동하는 것 같습니다.