Fout: te veel geopende bestanden | AEM

Het artikel richt de kwestie waar de logboekdossiers de fout "teveel dossiers"bevatten aangezien een resultaat waarvan Adobe Experience Manager (AEM) niet antwoordt.

Beschrijving description

Milieu

Adobe Experience Manager

Uitgave/Symptomen

De logboekdossiers bevatten de fout "teveel dossiers" en Adobe Experience Manager (AEM) antwoordt 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 het platform van Linux, kan de Lijst van Open Dossier (lsof) bevel worden gebruikt om te zuiveren welke middelen open door het proces worden gehouden.

Hier volgt een voorbeeldscript voor het verzamelen van nuttige 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

de output van de Steekproef :

$> ./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 het 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. In veel gevallen worden bibliotheken zoals Apache Commons HttpClient gebruikt, maar verbindingen worden nooit door de ontwikkelaars gesloten. Zie dit artikelvoor details op Commons Apache HttpClient.

B. Verhoog de grens voor shell zitting

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. Voeg de variabele CQ_MAX_OPEN_FILES toe boven aan het script: CQ_MAX_OPEN_FILES=8192 export CQ_MAX_OPEN_FILES

Als u de fout -bash: ulimit: open files: cannot modify limit: Operation not permitted ziet bij het starten van AEM, werkt de bovenstaande configuratie niet.

In plaats daarvan moet de limiet voor /etc/security/limits.conf worden verhoogd. 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 de 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