Come rintracciare una perdita di descrittori di file?

Ho un process java (Glassfish) che sta perdendo i descrittori dei file. Lo so perché ho la java.io.IOException: Too many open files utile java.io.IOException: Too many open files eccezioni di java.io.IOException: Too many open files . Posso guardare in /proc/PID#/fd e vedere tutti i descrittori di file aperti. Quando uso lsof ho un numero molto elevato di voci come questa:

java 18510 root 8811u sock 0,4 1576079 non è in grado di identificare il protocollo
java 18510 root 8812u sock 0,4 1576111 non è in grado di identificare il protocollo
java 18510 root 8813u sock 0,4 1576150 non è in grado di identificare il protocollo

  • In Linux, come posso vedere come un process è un file?
  • Come mappare un porto effimero a un pid?
  • tracciare un'apertura su un determinato file
  • Come può lsof riportre un numero maggiore di file aperti di quello che dice ulimit dovrebbe essere consentito?
  • Come rendere il mio capo capire che un errore del server è una cosa negativa?
  • Come calcolare ulimit -n (descrittori di file) per un server squid dedicato
  • Vedo 12 nuovi creati al minuto. Quali opzioni posso usare su lsof o quali altri strumenti sono disponibili per aiutarti a individuare i descrittori dei file di socket where il protocollo non può essere identificato?

  • L'esecuzione di lsof -i mostra un sacco di connessioni in CLOSE_WAIT? Devo preoccuparmi
  • Come monitorare tutti i file che un process si apre durante la sua vita
  • Monitoraggio TCP su un server: confronto netstat vs lsof?
  • come posso vedere se un filehandle aperto è scritto o less su un sistema linux?
  • lsof - limita l'output a file fisici solo - come?
  • Come può lsof riportre un numero maggiore di file aperti di quello che dice ulimit dovrebbe essere consentito?
  • 3 Solutions collect form web for “Come rintracciare una perdita di descrittori di file?”

    per visualizzare le prime 20 handle di file utilizzando i processi:

     for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20 

    l'output è nel count della manopola del file di formato, pid, cmndline per il process

    output di esempio

     701 1216 /sbin/rsyslogd-n-c5 169 11835 postgres: spaceuser spaceschema [local] idle 164 13621 postgres: spaceuser spaceschema [local] idle 161 13622 postgres: spaceuser spaceschema [local] idle 161 13618 postgres: spaceuser spaceschema [local] idle 

    Diventa familiare con il command strace. Esegue il monitoraggio delle chiamate di sistema. Recentemente l'ho usata per rintracciare le perdite di descrittori di file che hanno causato il nostro demone snmpd a bloccarsi ripetutamente. Ci vuole un po 'di abitudini, ma è un potente strumento.

    È ansible utilizzare strace per associare a un process in esecuzione (non dimenticare il flag -f per seguire i processi secondari).

    Cosa stai esattamente cercando di individuare? Gli indirizzi IP remoti associati ai FD persi, il codice difettoso o qualcos'altro?

    Come hai già identificato che c'è una perdita, contattare gli ingegneri responsabili di questo process di Java sembra un passo successivo ragionevole.

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