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:
- Controleren wat de oorzaak is van het bereiken van de maximale bestandsgrootte
- 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:
- Openen
crx-quickstart/bin/start
voor bewerking - 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:
- 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
- Voeg deze regel toe aan /etc/sysctl.conf om de maximale waarde voor het openen van het bestand te verhogen:
fs.file-max = 300000
- Voer deze opdracht uit:
sysctl -p
- 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:
- Meld u aan bij http://localhost:4502/crxde als beheerder.
- Bladeren naar
/libs/granite/monitoring/config
- Klik met de rechtermuisknop en verwijder elk subknooppunt van
/libs/granite/monitoring/config
- Klik op Alles opslaan. Start CQ opnieuw.