Fehler: Zu viele geöffnete Dateien | AEM

Der Artikel behandelt das Problem, dass die Protokolldateien den Fehler "viele Dateien enthalten, was dazu führt, dass 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:

  1. Finden Sie heraus, was dazu führt, dass das Limit für geöffnete Dateien erreicht wird.
  2. Erhöhen Sie entweder das Limit oder beheben Sie die Anwendungsfehler.

a. Finden Sie heraus, welche Dateien oder Sockets offen gelassen werden

Hinweis - Die Beschränkungen für offene Dateien gelten für die Gesamtanzahl der kombinierten offenen Dateien, Pipes und Sockets, nicht nur für Dateien.

Auf Linux-Plattformen kann der List of Open File (lsof) verwendet werden, um herauszufinden, welche Ressourcen vom Prozess offen gehalten werden.

Im Folgenden finden Sie ein Beispielskript zur Erfassung nützlicher lsof:

#!/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.  Sie zeigt an, welche Dateien oder Sockets derzeit vom Prozess offen gehalten werden.

Wenn Sie offene Sockets oder Dateien finden, die noch nicht geöffnet sein sollten, dann ist dies wahrscheinlich auf einen Anwendungsfehler zurückzuführen. Aktualisieren Sie den Anwendungs-Code, um Dateien und Sockets nach deren Verwendung zu schließen.

Eine häufige Ursache für offene Sockets ist benutzerdefinierter Code, der einen Webdienst erstellt. In vielen Fällen werden Bibliotheken wie Apache Commons HttpClient verwendet, aber die Verbindungen werden von den Entwicklern nie geschlossen. Siehe diesen Artikel für Details zur Apache Commons-HttpClient.

b. Erhöhen Sie das Limit für die Shell-Sitzung

Überprüfen Sie das Benutzerlimit für maximal geöffnete Dateien und führen Sie dann das Folgende als derselbe Benutzer aus, unter dem der 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:

  1. Öffnen Sie crx-quickstart/bin/start zur Bearbeitung
  2. 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, dann sehen Sie nach, 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 Benutzerlimits

Um die maximale Anzahl offener Dateien für Nicht-Root-Benutzer zu ändern, ändern Sie die 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.

T. Erhöhen Sie das Systemlimit

Manchmal ist das Benutzerlimit hoch genug, aber das System selbst hat die maximale Anzahl von Dateien erreicht. Führen Sie das folgende als su/root-Benutzer aus:

  1. Überprüfen Sie die Einstellung für die maximale Anzahl geöffneter Dateien auf dem Betriebssystem (wenn sie unter 20000 liegt, ist es sinnvoll, diese Einstellung zu erhöhen).
    cat /proc/sys/fs/file-max
  2. Fügen Sie diese Zeile zu /etc/sysctl.conf hinzu, um den Höchstwert für offene Dateien im System zu erhöhen:
    fs.file-max = 300000
  3. Führen Sie diesen Befehl aus:
    sysctl -p
  4. Vergewissern Sie sich, 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 Datei-Handles verwendet.

Sie können auch Folgendes tun:

  1. Melden Sie sich bei http://localhost:4502/crxde als Admin-Benutzer an.
  2. Navigieren zu /libs/granite/monitoring/config
  3. Klicken Sie mit der rechten Maustaste, und löschen Sie jeden Unterknoten von /libs/granite/monitoring/config
  4. Klicken Sie auf Alle speichern. Starten Sie CQ neu.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f