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’를 검색하십시오.
답변
-n
IP 연결의 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가 제대로 작동하는 것 같습니다.