lsof corre muy lento en mi servidor

8

Estoy ejecutando lsof en uno de mi servidor Linux para verificar si otros archivos /tmp/incoming_data.txtabren un archivo ( ) en el sistema ext3. Mi servidor tiene mucha conexión TCP. Lo extraño es que la ejecución de 'sudo lsof' tarda unos dos minutos en finalizar y utiliza 99.x% de CPU durante esos dos minutos.

El comando que usé es sudo lsof /tmp/incoming_data.txt. He probado el " fusor ", que requiere aproximadamente la misma cantidad de CPU y tiempo de ejecución. ¿Hay algo que pueda hacer para solucionar este problema?

James Gan
fuente
Después de que hayan pasado esos dos minutos, ¿qué lsofmuestra? ¿Cuántos procesos e hilos tiene abierto ese archivo? ¿Cuál es la carga de la CPU cuando no se ejecuta lsof?
Michael Martinez

Respuestas:

7

Si está seguro de que puede omitir las conexiones TCP o UDP abiertas, ya que mencionó que hay demasiadas, puede usar la opción específica de dialecto de lsof -X.

lsof -X

Lea la página de manual de lsof y busque '-X' para obtener información detallada.

Daniel t.
fuente
16

Pase la -nopción de omitir la resolución de nombres DNS de conexiones IP. Es casi seguro que será la porción de gran cantidad de desaceleraciones.

Zoredache
fuente
1
Hola, @Zoredache, muchas gracias por la respuesta. He intentado ambas opciones, -n y -P, y ambas no parecen ayudar. Gracias de todos modos!
James Gan
Si aún es lento, entonces probablemente lo ejecutaría con strace y vería si puedo entender por qué fue lento.
Zoredache
1
Esto funcionó para mí en MacOS X El Capitan
Andrew Miner
@JamesGan Tengo el mismo problema. ¿Alguna vez descubriste el problema?
Noldorin el
Excelente. Esto funcionó para mí en MacOS 10.14
Ninja
0

Encontré este pequeño paquete NPM que hace un trabajo maravilloso al acelerar lsof para archivos: https://www.npmjs.com/package/lsof-mac-fast .

Creé un script de envoltura para usarlo:

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

Este es mi guión:

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

El intervalo de repetición puede ser realmente bajo, por ejemplo, 10 ms parece funcionar bien.

Juraj Martinka
fuente