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:

  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 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:

  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, ü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:

  1. Ü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
  2. 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
  3. Führen Sie diesen Befehl aus:
    sysctl -p
  4. 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:

  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