Errore: troppi file aperti | AEM

Descrizione

Ambiente
Experience Manager

Problema/Sintomi
I file di registro contengono l'errore "Troppi file" e Adobe Experience Manager (AEM) non risponde.

Risoluzione

Causa

La causa è una delle due possibilità:

  • L’applicazione non riesce a chiudere le risorse, come file o socket, dopo averle utilizzate.
  • L’applicazione richiede un numero di file aperti superiore a quello consentito dal processo.

La soluzione a questo problema consiste in:

  1. Individuare la causa del raggiungimento del limite di file aperti
  2. Aumentare il limite o risolvere i bug dell’applicazione.


Trovare i file o i socket rimasti aperti

** I limiti relativi ai file aperti si applicano al totale di file, pipe e socket aperti, non solo ai file.

Sulla piattaforma Linux, l'elenco di Open File (lsofIl comando ) può essere utilizzato per eseguire il debug delle risorse aperte dal processo.

Di seguito è riportato uno script di esempio per raccogliere output lsof utili:

 

| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/bin/bash if $ # -eq 0    then      echo "No PID specified"      echo "Run command with PID, for example:"      echo "lsof-script.sh 12345"      exit 2 fi
 
JAVA_PROCESS_PID=$1
 
lsof -p $JAVA_PROCESS_PID lsof -output-$JAVA_PROCESS_PID.txt
 
echo "Files open by the process:" cat lsof -output-$JAVA_PROCESS_PID.txt |  wc -l
 
echo "Generated output file with counts of grouped open files lsof-sorted-counts-$JAVA_PROCESS_PID.txt" cat lsof -output-$JAVA_PROCESS_PID.txt | awk '{print $9}' | sed -e "s/\(.*\)\(segmentstore\).*$/\1\2/" sed -e "s/\(.*\)\(repository/index\).*$/\1\2/" | sed -e "s/\(.*\)\(felix/bundle\).*$/\1\2/" sed -e "s/\(.*\)\(/lib\).*$/\1\2/" sed -e "s/\(.*\)\(/logs\).*$/\1\2/" sed -e "s/\(.*\)\(/ext\).*$/\1\2/" | sort | uniq -c | sort -rn -k1 lsof -sorted-counts-$JAVA_PROCESS_PID.txt
 
echo "Total open files in OS:" lsof | wc -l |
| — | — |


Output di esempio:
 
1
2
3
4
5
6
$ ./lsof-script.sh 18070 Files open by the process:      1995 Generated output file with counts of grouped open files: lsof-sorted-counts-18070.txt Total open files in OS:     18399

Esamina l’output del file `lsof-sorted-counts-*.txt` generato.  Mostra quali file o socket sono attualmente aperti dal processo.

Se trovi i socket aperti o i file elencati che non dovrebbero ancora essere aperti, è probabile che sia dovuto a un bug dell'applicazione. Aggiorna il codice dell’applicazione per chiudere i file e i socket dopo averli utilizzati.

Una causa comune della presenza di socket aperti residui è il codice personalizzato che genera il servizio web. In molti casi, librerie come Apache Commons HttpClient vengono utilizzati ma le connessioni non vengono mai chiuse dagli sviluppatori. Vedi articolo per maggiori dettagli su Apache Commons HttpClient.

 Aumentare il limite per la sessione della shell

Verifica il limite dell’utente per il numero massimo di file aperti, quindi esegui il comando seguente in qualità di utente che esegue il processo AEM:

ulimit -Sn ulimit -Hn

Quando utilizzi lo script di avvio predefinito di AEM/CQ, effettua le operazioni seguenti per aumentare il limite:

  1. Apri crx-quickstart/bin/start per la modifica
  2. Aggiungi la variabile CQ_MAX_OPEN_FILES nella parte superiore dello script: CQ_MAX_OPEN_FILES=8192 esporta CQ_MAX_OPEN_FILES

Se vedi l'errore "-bash: ulimit: file aperti: impossibile modificare il limite: Operazione non consentita" all'avvio di AEM, la configurazione di cui sopra non funziona.

Invece, è necessario aumentare il limite in /etc/security/limits.conf. Per maggiori dettagli su come riconfigurare il limite dell’utente, vedi di seguito.

Se utilizzi un server applicazioni di terze parti come JBoss o Websphere, segui le sezioni seguenti e verifica con la documentazione del fornitore.

Nota:

Se nessuna delle configurazioni di questo articolo risolve il problema, vedi quali file sono aperti utilizzando il comando lsof -p. (-p è l'id del processo problematico.) È possibile che l’applicazione lasci aperti gli handle di file. Se noti che gli handle sono tenuti aperti principalmente da AEM e non dalla tua applicazione, contatta il supporto.


 Aumentare i limiti dell'utente

Per modificare il numero massimo di file aperti per gli utenti non root, modificare il file/etc/security/limits.conf. Puoi impostare il limite per ciascun utente:

crx_process_username soft nofile 8092

crx_process_username hard nofile 20000

Nota:

Questa configurazione diventerà effettiva solo al successivo accesso dell’utente.


 Aumentare il limite del sistema

Talvolta il limite dell’utente è sufficientemente alto, ma il sistema ha raggiunto il numero massimo di file. Esegui quanto segue come utente su/root:

  1. Controlla l’impostazione massima dei file aperti sul sistema operativo (se è inferiore a 20.000, è opportuno aumentarla):
    cat /proc/sys/fs/file-max
  2. Aggiungi questa riga a /etc/sysctl.conf per aumentare il valore massimo del file aperto del sistema:
    fs.file-max = 300000
  3. Esegui questo comando:
    sysctl -p
  4. Verifica che il nuovo valore venga visualizzato quando esegui questo comando:
    cat /proc/sys/fs/file-max

Nota:

Questa configurazione diventerà effettiva solo al successivo accesso dell’utente.


 Informazioni aggiuntive

Questo errore si verifica quando il sistema o l’utente utilizza il numero massimo di handle di file.

SCARICA
Recupera il file 
Script della shell che è possibile utilizzare per monitorare l’utilizzo dei file aperti. Usa questo script solo se l’errore “Troppi file aperti” persiste anche dopo aver aumentato il numero massimo di file. In alternativa, puoi usarlo se sospetti che CRX o l’applicazione stia lasciando aperti gli handle di file. Prima di utilizzare lo script, configura le seguenti variabili: JAVA_HOME, QUICKSTART_PATH, OUTPUT_DIR, USER, MAX_FILES_THRESHOLD. Per utilizzare lo script, configuralo come un processo cron.

In questa pagina