lsof chạy rất chậm trong máy chủ của tôi


8

Tôi đang chạy lsof trong một trong các máy chủ Linux của mình để kiểm tra xem một tệp ( /tmp/incoming_data.txt) trong hệ thống ext3 có được mở bởi các chương trình khác không. Máy chủ của tôi có rất nhiều kết nối TCP trên đó. Điều kỳ lạ là việc thực thi 'sudo lsof' mất khoảng hai phút để hoàn thành và nó sử dụng CPU 99.x% trong hai phút đó.

Lệnh tôi đã sử dụng là sudo lsof /tmp/incoming_data.txt. Tôi đã thử " fuser ", mất khoảng thời gian thực hiện cùng CPU. Có bất cứ điều gì tôi có thể làm khắc phục vấn đề này?


Sau khi hai phút trôi qua, điều gì lsofthể hiện? Có bao nhiêu tiến trình và chủ đề có tập tin đó mở? Tải CPU khi không chạy lsof là gì?
Michael Martinez

Câu trả lời:


7

Nếu bạn chắc chắn rằng bạn có thể bỏ qua các kết nối TCP hoặc UDP đang mở, vì bạn đã đề cập có quá nhiều trong số chúng, bạn có thể sử dụng tùy chọn dành riêng cho phương ngữ của lsof -X.

lsof -X

Đọc trang hướng dẫn của lsof và tìm kiếm '-X' để biết thông tin chi tiết.


16

Vượt qua -ntùy chọn để bỏ qua việc giải quyết tên DNS của các kết nối IP. Đây gần như chắc chắn sẽ là phần lớn nhất của bất kỳ sự chậm lại nào.


1
Xin chào, @Zoredache, cảm ơn rất nhiều vì đã trả lời. Tôi đã thử cả hai tùy chọn -n và -P và cả hai đều không có vẻ hữu ích. Cảm ơn vì tất cả!
James Gan

Nếu nó vẫn còn chậm, thì có lẽ tôi sẽ chạy nó với bước đi và xem liệu tôi có thể hiểu tại sao nó chậm không.
Zoredache

1
Điều này làm việc cho tôi trên MacOS X El Capitan
Andrew Miner

@JamesGan Tôi có cùng một vấn đề. Bạn đã bao giờ tìm ra vấn đề?
Noldorin

Tuyệt quá. Điều này làm việc cho tôi trên MacOS 10.14
Ninja

0

Tôi đã tìm thấy gói NPM nhỏ này thực hiện công việc tuyệt vời là tăng tốc lsof cho các tệp: https://www.npmjs.com/package/lsof-mac-fast .

Tôi đã tạo một tập lệnh bao bọc để sử dụng nó:

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

Đây là kịch bản của tôi:

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

Khoảng thời gian lặp lại có thể rất thấp, ví dụ 10 ms dường như hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.