Perché file-nr e lsof contano sui file aperti differiscono? [chiuso]


19

Sto incontrando un problema all'improvviso; tutte le mie applicazioni e il server funzionavano bene e all'improvviso vedo spuntare il numero di file aperti.

Lo sto verificando con questo comando:

cat /proc/sys/fs/file-nr

Quando controllo con questo mostra 44544 0 128000, quindi 44544 è il numero di file aperti.

Ma quando controllo con questo comando - lsof | wc -l mostra - 28384.

Quindi quale è corretto?

Il mio limite massimo di file aperti è 65535

ulimit -a
open files                      (-n) 65535

Voglio conoscere i primi 5 processi che utilizzano più file aperti. Posso ottenere questo da lsofma il conteggio mostrato qui è molto diverso dall'altro comando che ho menzionato sopra.

Posso ottenere i dettagli dei processi contati da questo comando cat /proc/sys/fs/file-nr?

Secondo il link sotto indicato dice che non possiamo, Come visualizzare i descrittori di file aperti ma non usando il comando lsof

C'è un lavoro in giro per me? Devo scoprire quale processo è iniziato all'improvviso usando più file aperti.

AGGIORNAMENTO Scusate ragazzi per il disturbo. Ho trovato l'errore che stavo facendo NON stavo controllando lsof | wc -l da root. questa è la ragione per cui stavo vedendo un'enorme differenza.

c'è ancora una differenza tra l'output del file -nr e lsof | wc -l (dalla radice). lsof count è più del file -nr count. la ragione di ciò è che il file -nr ignora alcune delle directory (che sono considerate file da lsof) ho trovato questo motivo da una piccola ricerca su google stesso. in ogni modo! grazie ragazzi per tutto l'aiuto!



Sta lsof | wc -l davvero mostrando un numero negativo?
Joe Sewell,

3
quello non era un segno negativo, è un trattino!
Vasanth Nag KV,

Risposte:


8

Sembra che ci siano due domande in gioco qui. Innanzitutto, è possibile trovare la documentazione completa delle strutture file-nr e file-max su

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

Questo definisce i campi in quel file come:

I tre valori in file-nr indicano il numero di handle di file allocati, il numero di handle di file allocati ma non utilizzati e il numero massimo di handle di file. Linux 2.6 riporta sempre 0 come il numero di handle di file gratuiti - questo non è un errore, significa solo che il numero di handle di file allocati corrisponde esattamente al numero di handle di file utilizzati.

Spero che sia abbastanza chiaro. La seconda domanda ha avuto risposta nel thread sopra citato ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi ) e sembra devolvere a entrambi

  1. "usa lsof" e filtra l'output in modo appropriato se hai bisogno di ottenere una buona approssimazione dei descrittori di file in uso da un processo o,
  2. attraversare il filesystem / proc (e comunque filtrare l'output) per ottenere uno snapshot nel tempo dell'uso del descrittore di file.

La difficoltà di ottenere metriche accurate per questo è significativa, poiché il numero di FD in uso in un dato punto può variare molto rapidamente su un sistema.

Il seguente thread suggerisce uno schema di filtro per l'approccio 'lsof':

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim


aggiornata la mia domanda. ma grazie per tutte le informazioni lassù.
Vasanth Nag KV,

Ma come è possibile, che ulimitsecondo me posso aprire fino a 1024 file, se lsof | wc -ldice che ne ho già 1545?
Nakilon,

Si prega di leggere le pagine del manuale su lsofe ulimitper la risposta alla domanda.
Thomas N,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.