Fout: te veel geopende bestanden | AEM

In het artikel wordt het probleem opgelost waarbij in de logbestanden de fout "Te veel bestanden" waardoor Adobe Experience Manager (AEM) niet reageert.

Beschrijving description

Omgeving

Adobe Experience Manager

Probleem/symptomen

De logbestanden bevatten de fout 'Te veel bestanden'  en Adobe Experience Manager (AEM) reageert niet.

Resolutie resolution

De oplossing voor dit probleem is:

  1. Controleren wat de oorzaak is van het bereiken van de maximale bestandsgrootte
  2. Verhoog de limiet of repareer de toepassingsfouten.

A. Zoeken welke bestanden of sockets open blijven

Opmerking - Bestandslimieten voor openen gelden voor alle gecombineerde geopende bestanden, pijpen en sockets, niet alleen voor bestanden.

Op Linux-platform Lijst met geopende bestanden (lsof) kan worden gebruikt om te zuiveren welke middelen open door het proces worden gehouden.

Hier volgt een voorbeeldscript dat nuttig kan zijn lsof uitvoer:

#!/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

Voorbeelduitvoer:

$> ./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 de uitvoer van de gegenereerde lsof-sorted-counts-*.txt bestand.  U ziet hier welke bestanden of sockets op dat moment door het proces worden geopend.

Als er open sockets of bestanden worden weergegeven die niet nog geopend moeten zijn, is dit waarschijnlijk het gevolg van een toepassingsfout. Werk de toepassingscode bij om bestanden en sockets te sluiten nadat u deze hebt gebruikt.

Een veelvoorkomende oorzaak van het aanhouden van open sockets is aangepaste code waarmee webservices worden gemaakt. Bibliotheken zoals Apache Commons worden vaak HttpClient worden gebruikt maar verbindingen worden nooit door de ontwikkelaars gesloten. Zie dit artikel voor meer informatie over Apache Commons HttpClient.

B. De limiet voor de shellsessie verhogen

Controleer de gebruikerslimiet voor maximaal geopende bestanden en voer vervolgens de volgende handelingen uit als dezelfde gebruiker die het proces AEM uitvoeren als:

ulimit -Sn ulimit -Hn

Wanneer het gebruiken van het standaardbeginmanuscript van AEM/CQ, doe het volgende om de grens te verhogen:

  1. Openen crx-quickstart/bin/start voor bewerking
  2. De variabele toevoegen CQ_MAX_OPEN_FILES boven aan het script: CQ_MAX_OPEN_FILES=8192 export CQ_MAX_OPEN_FILES

Als u de fout ziet -bash: ulimit: open files: cannot modify limit: Operation not permitted wanneer het beginnen van AEM, dan werkt de configuratie hierboven niet.

In plaats daarvan, is het noodzakelijk om de grens in /etc/security/limits.conf. Zie hieronder voor meer informatie over het aanpassen van de gebruikerslimiet.

Als u een externe toepassingsserver zoals JBoss of Websphere gebruikt, volgt u de onderstaande secties en verifieert u deze met de documentatie van de leverancier.

Opmerking: als geen van de configuraties in dit artikel het probleem verhelpt, ziet u welke bestanden zijn geopend met de opdracht lsof -p (-p is het proces-id van het problematische proces). Mogelijk laat uw toepassing de bestandshandgrepen open. Als u ziet dat de handgrepen meestal door AEM worden vastgehouden en niet door uw toepassing, neemt u contact op met de ondersteuningsafdeling.

C. De gebruikerslimieten verhogen

Als u het maximumaantal geopende bestanden voor gebruikers buiten de hoofdmap wilt wijzigen, wijzigt u de instelling file/etc/security/limits.conf. U kunt de limiet per gebruiker instellen:

crx_process_username soft nofile 8092

crx_process_username hard nofile 20000

Opmerking: deze configuratie wordt pas van kracht wanneer de gebruiker zich opnieuw aanmeldt.

D. De systeemlimiet verhogen

Soms is de gebruikerslimiet hoog genoeg, maar heeft het systeem zelf het maximumaantal bestanden bereikt. Voer de volgende handelingen uit als gebruiker/hoofdgebruiker:

  1. Controleer de maximale instelling voor het geopende bestand op het besturingssysteem (als deze lager is dan 20000, is het raadzaam deze instelling te verhogen).
    cat /proc/sys/fs/file-max
  2. Voeg deze regel toe aan /etc/sysctl.conf om de maximale waarde voor het openen van het bestand te verhogen:
    fs.file-max = 300000
  3. Voer deze opdracht uit:
    sysctl -p
  4. Controleer of de nieuwe waarde wordt weergegeven wanneer u deze opdracht uitvoert:
    cat /proc/sys/fs/file-max

Opmerking: deze configuratie wordt pas van kracht wanneer de gebruiker zich opnieuw aanmeldt.

Oorzaak

De oorzaak is een van de twee mogelijkheden:

  • De toepassing sluit geen bronnen, zoals bestanden of sockets na het gebruik ervan.
  • Of de toepassing vereist meer open dossiers dan door het proces wordt toegestaan.

Aanvullende informatie

Deze fout treedt op wanneer het systeem of de gebruiker de maximale handgrepen voor het aantal bestanden gebruikt.

U kunt ook het volgende doen:

  1. Meld u aan bij http://localhost:4502/crxde als beheerder.
  2. Bladeren naar /libs/granite/monitoring/config
  3. Klik met de rechtermuisknop en verwijder elk subknooppunt van /libs/granite/monitoring/config
  4. Klik op Alles opslaan. Start CQ opnieuw.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f