Ini berjalan sangat lambat di server saya

8

Saya sedang menjalankan lsof di salah satu server Linux saya untuk memeriksa apakah satu file ( /tmp/incoming_data.txt) dalam sistem ext3 dibuka oleh program lain. Server saya memiliki banyak koneksi TCP. Yang aneh adalah eksekusi 'sudo lsof' membutuhkan waktu sekitar dua menit untuk selesai dan ia menggunakan CPU 99.x% selama dua menit itu.

Perintah yang saya gunakan adalah sudo lsof /tmp/incoming_data.txt. Saya sudah mencoba " fuser " yang membutuhkan jumlah CPU dan waktu eksekusi yang sama. Apakah ada yang bisa saya lakukan untuk memperbaiki masalah ini?

James Gan
sumber
Setelah dua menit itu berlalu, apa yang lsofditunjukkan? Berapa banyak proses dan utas yang membuka file itu? Berapa beban CPU saat tidak menjalankan lsof?
Michael Martinez

Jawaban:

7

Jika Anda yakin dapat melewati koneksi TCP atau UDP yang terbuka, karena Anda menyebutkan terlalu banyak, Anda dapat menggunakan opsi dialek khusus lsof -X.

lsof -X

Baca halaman manual lsof dan cari '-X' untuk informasi terperinci.

Daniel t.
sumber
16

Lewati -npilihan untuk melewati penyelesaian nama DNS koneksi IP. Ini hampir pasti akan menjadi bagian terbesar dari setiap perlambatan.

Sakit kepala
sumber
1
Hai, @Zoredache, terima kasih banyak atas jawabannya. Saya sudah mencoba opsi -n dan -P dan keduanya sepertinya tidak membantu. Terima kasih semuanya sama!
James Gan
Jika masih lambat, maka saya mungkin akan menjalankannya dengan strace dan melihat apakah saya bisa mengetahui mengapa itu lambat.
Zoredache
1
Ini bekerja untuk saya di MacOS X El Capitan
Andrew Miner
@ JamesGan saya memiliki masalah yang sama. Apakah Anda pernah memecahkan masalahnya?
Noldorin
Bagus. Ini bekerja untuk saya di MacOS 10.14
Ninja
0

Saya telah menemukan paket NPM kecil ini yang melakukan pekerjaan luar biasa mempercepat lsof untuk file: https://www.npmjs.com/package/lsof-mac-fast .

Saya membuat skrip wrapper untuk menggunakannya:

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

Ini skrip saya:

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

Interval pengulangan bisa sangat rendah, misalnya 10 ms tampaknya berfungsi dengan baik.

Juraj Martinka
sumber