Numero di file descrittori: diversi tra / proc / sys / fs / file-nr e / proc / $ pid / fd?

Vorrei controllare quanti file descrittori sono effettivamente utilizzati:

cat /proc/sys/fs/file-nr 12750 0 753795 

La prima colonna (12750) indica il numero di descrittori di file allocati dall'avvio.

  • Come generare un carico falso sul server linux per testare l'applicazione oracle R12
  • Ogni volta che uso sudo si blocca prima di completare
  • Come creare un alias per un nome utente su Linux?
  • Aggregazione delle NIC per ricevere solamente le connessioni su Linux
  • Bind process o utente a specifici IP (Linux)
  • Come colbind un RAID1 esistente a un nuovo sistema Linux?
  • Vorrei sapere perché il numero del command seguente è diverso (supponendo che questa linea restituisca il valore corretto:

    for pid in $(lsof | awk '{ print $2 }' | uniq); do find /proc/$pid/fd/ -type l 2>&1 | grep -v "No"; done | wc -l

    11069

  • strace mostra la lettura di lunga durata dalla presa mysql - mysql richiede molto tempo per eseguire query?
  • Ubuntu 16.04 Server MySql open_file_limit non supererà 65536
  • 2 Solutions collect form web for “Numero di file descrittori: diversi tra / proc / sys / fs / file-nr e / proc / $ pid / fd?”

    lsof elenca solo l'ID process . Per get informazioni sulle discussioni, è necessario utilizzare ps -eLf . Secondo l' man proc :

        / proc / [pid] / task (da Linux 2.6.0-test6)
               Questa è una directory che contiene una sottodirectory per ognuna
               thread nel process.  Il nome di ciascuna sottodirectory è il
               ID del thread numbersco ( [tid] ) del filetto (vedi gettid (2) ).
               All'interno di ciascuna di queste sottodirectory c'è un insieme di file
               con gli stessi nomi e contenuti come sotto il / proc / [pid]
               le directory.  Per gli attributi che vengono condivisi da tutti i thread,
               il contenuto di ciascuno dei file nell'ambito del task / [tid]
               le sottodirectory saranno le stesse del file corrispondente
               nella directory parent / proc / [pid] (ad esempio in un multithread
               process, tutti i file task / [tid] / cwd avranno gli stessi
               valore come il file / proc / [pid] / cwd nella directory padre,
               poiché tutti i thread in un process condividono un lavoro
               directory).  Per gli attributi che sono distinti per each thread,
               i file corrispondenti in task / [tid] possono essere diversi
               valori (ad esempio, vari campi in ciascuno dei task / [tid] / status
               i file possono essere diversi per each thread). 
    In un process multithread, il contenuto del file directory / proc / [pid] / task non sono disponibili se il principale il thread è già terminato (in genere chiamando pthread_exit (3) ).

    Potrei calcolare il numero di descrittori di file aperti eseguendo:

     ps -eL | awk 'NR > 1 { print $1, $2 }' | \ while read x; do \ find /proc/${x% *}/task/${x#* }/fd/ -type l; \ done | wc -l 

    Il risultato è 17270.

    Vediamo quanti file descrittori allocati dall'avvio:

     cat /proc/sys/fs/file-nr 11616 0 398855 

    Perché esiste un numero eccessivo di descrittori di file in /proc/[pid]/task/[tid]/fd rispetto al numero di handle di file allocate in /proc/sys/fs/file-nr ? Suppongo che siano creati da processi a fork ed child:

    man fork :

    Il figlio eredita le copie del set di descrittori di file aperti del genitore.

    man pthreads :

    POSIX.1 richiede inoltre che le discussioni condividano una gamma di altri attributi (cioè, questi attributi sono a livello di process piuttosto che per thread): – ID process

    • ID process principale

    • ID gruppo di process e ID session

    • controllare il terminal

    • ID utente e gruppo

    • aprire i file descrittori

    http://www.netadmintools.com/part295.html Alcuni file aperti che non utilizzano descrittori di file: file di libreria, il programma stesso (text eseguibile) e così via come sopra elencato. Questi file vengono considerati altrove nelle strutture dei dati del kernel (cat / proc / PID / mappe per visualizzare le librerie, ad esempio) ma non stanno utilizzando i descrittori di file e pertanto non esauriscono il massimo del descrittore di file del kernel.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.