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


8

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

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


이 2 분이 지나면 무엇을 lsof보여줍니까? 해당 파일을 몇 개의 프로세스와 스레드로 열었습니까? lsof를 실행하지 않을 때 CPU로드는 무엇입니까?
Michael Martinez

답변:


7

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

lsof -X

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


17

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


1
안녕하세요, @Zoredache, 답장을 보내 주셔서 감사합니다. 나는 -n과 -P 옵션을 모두 시도했지만 둘 다 도움이되지 않는 것 같습니다. 고마워요!
제임스 간

여전히 느리다면 아마도 strace로 실행하고 왜 느린 지 알아낼 수 있는지 알 것입니다.
Zoredache

1
이것은 MacOS X El Capitan
Andrew Miner에서

@ JamesGan 나는 같은 문제가 있습니다. 문제를 알아 낸 적이 있습니까?
Noldorin

큰. 이것은 MacOS 10.14에서 나를 위해 일했다
Ninja

0

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가 제대로 작동하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.