Ambiente
Experience Manager
Problema/Sintomi
I file di registro contengono l'errore "Troppi file" e Adobe Experience Manager (AEM) non risponde.
Causa
La causa è una delle due possibilità:
La soluzione a questo problema consiste in:
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 (lsof
Il 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
|
| — | — |
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 |
---|
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:
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:
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.