Fehler: Zu viele geöffnete Dateien | AEM
Der Artikel behandelt das Problem, bei dem die Protokolldateien den Fehler "Zu viele Dateien"enthalten, wodurch Adobe Experience Manager (AEM) nicht reagiert.
Beschreibung description
Umgebung
Adobe Experience Manager
Problem/Symptome
Die Protokolldateien enthalten den Fehler 'Zu viele Dateien' und Adobe Experience Manager (AEM) reagiert nicht.
Auflösung resolution
Die Lösung dieses Problems ist:
- Finden Sie heraus, was dazu führt, dass das Limit für geöffnete Dateien erreicht wird.
- Erhöhen Sie entweder das Limit oder beheben Sie die Anwendungsfehler.
A. Finden Sie heraus, welche Dateien oder Sockets geöffnet bleiben
Hinweis - Die Beschränkungen für Öffnungen in Dateien gelten für die Gesamtanzahl der offenen Dateien, Pipelines und Sockets, nicht nur für Dateien.
Auf der Linux-Plattform kann der Befehl Liste der geöffneten Dateien (lsof
) verwendet werden, um zu debuggen, welche Ressourcen vom Prozess geöffnet sind.
Im Folgenden finden Sie ein Beispielskript zum Erfassen der nützlichen lsof
-Ausgabe:
#!/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
Beispielausgabe:
$> ./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
Inspect die Ausgabe der generierten lsof-sorted-counts-*.txt
-Datei. Sie zeigt an, welche Dateien oder Sockets derzeit vom Prozess offen gehalten werden.
Wenn Sie offene Sockets oder Dateien finden, die nicht geöffnet sein sollten, dann ist dies wahrscheinlich auf einen Anwendungsfehler zurückzuführen. Aktualisieren Sie Ihren Anwendungs-Code, um Dateien und Sockets nach der Verwendung zu schließen.
Eine häufige Ursache für die anhaltenden offenen Sockets ist benutzerdefinierter Code, der einen Webdienst bereitstellt. In vielen Fällen werden Bibliotheken wie Apache Commons HttpClient
verwendet, Verbindungen werden jedoch nie von den Entwicklern geschlossen. Weitere Informationen zu Apache Commons HttpClient
finden Sie in diesem Artikel .
B. Erhöhen Sie das Limit für die Shell-Sitzung
Überprüfen Sie das Limit des Benutzers auf maximal geöffnete Dateien und führen Sie dann Folgendes als derselbe Benutzer aus, als AEM Prozess ausgeführt wird:
ulimit -Sn ulimit -Hn
Wenn Sie das Standard-Startskript von AEM/CQ verwenden, gehen Sie wie folgt vor, um das Limit zu erhöhen:
- Öffnen Sie
crx-quickstart/bin/start
zur Bearbeitung - Fügen Sie die Variable
CQ_MAX_OPEN_FILES
am Anfang des Skripts hinzu:CQ_MAX_OPEN_FILES=8192 export CQ_MAX_OPEN_FILES
Wenn beim Starten von AEM der Fehler -bash: ulimit: open files: cannot modify limit: Operation not permitted
angezeigt wird, funktioniert die oben beschriebene Konfiguration nicht.
Stattdessen ist es notwendig, die Beschränkung in /etc/security/limits.conf
zu erhöhen. Weitere Informationen zur Neukonfiguration des Benutzerlimits finden Sie unten.
Wenn Sie einen Anwendungsserver eines Drittanbieters wie JBoss oder Websphere verwenden, befolgen Sie die folgenden Abschnitte und überprüfen Sie die Dokumentation des Anbieters.
Hinweis: Wenn keine der Konfigurationen in diesem Artikel das Problem löst, überprüfen Sie, welche Dateien mit dem Befehl lsof -p
geöffnet sind (-p ist die Prozess-ID des problematischen Prozesses). Es könnte sein, dass Ihre Anwendung Datei-Handles offen lässt. Wenn Sie sehen, dass die Handles hauptsächlich von AEM und nicht von Ihrer Anwendung gehalten werden, wenden Sie sich an den Support.
C. Erhöhen Sie die Benutzerbeschränkungen
Um die maximale Anzahl offener Dateien für Nicht-Root-Benutzer zu ändern, ändern Sie den file/etc/security/limits.conf
. Sie können das Limit für jeden Benutzer festlegen:
crx_process_username soft nofile 8092
crx_process_username hard nofile 20000
Hinweis: Diese Konfiguration wird erst wirksam, wenn sich der Benutzer das nächste Mal anmeldet.
D. Erhöhen Sie das Systemlimit
Manchmal ist der Benutzergrenzwert hoch genug, aber das System selbst hat die maximale Anzahl von Dateien erreicht. Führen Sie Folgendes als su/root-Benutzer aus:
- Überprüfen Sie die Einstellung für die maximal geöffnete Datei auf dem Betriebssystem (wenn sie unter 20000 liegt, ist es sinnvoll, diese Einstellung zu erhöhen).
cat /proc/sys/fs/file-max
- Fügen Sie diese Zeile zu /etc/sysctl.conf hinzu, um den Maximalwert der geöffneten Datei des Systems zu erhöhen:
fs.file-max = 300000
- Führen Sie diesen Befehl aus:
sysctl -p
- Stellen Sie sicher, dass der neue Wert angezeigt wird, wenn Sie diesen Befehl ausführen:
cat /proc/sys/fs/file-max
Hinweis: Diese Konfiguration wird erst wirksam, wenn sich der Benutzer das nächste Mal anmeldet.
Ursache
Die Ursache ist eine von zwei Möglichkeiten:
- Die Anwendung schließt Ressourcen wie Dateien oder Sockets nicht, nachdem sie sie benutzt hat.
- Oder die Anwendung erfordert mehr offene Dateien, als vom Prozess erlaubt sind.
Weitere Informationen
Dieser Fehler tritt auf, wenn das System oder der Benutzer die maximale Anzahl an Dateiverarbeitungen verwendet.
Sie können auch Folgendes tun:
- Melden Sie sich bei http://localhost:4502/crxde als Admin-Benutzer an.
- Navigieren zu
/libs/granite/monitoring/config
- Klicken Sie mit der rechten Maustaste und löschen Sie jeden Unterknoten von
/libs/granite/monitoring/config
- Klicken Sie auf Alle speichern . Starten Sie CQ neu.