Error: Demasiados archivos abiertos | AEM

El artículo aborda el problema de los archivos de registro que contienen el error "Demasiados archivos", como resultado de lo cual Adobe Experience Manager AEM () no responde.

Descripción description

Entorno

Adobe Experience Manager

Problema/Síntomas

Los archivos de registro contienen el error 'Demasiados archivos' y Adobe Experience Manager AEM () no responde.

Resolución resolution

La solución a este problema es:

  1. Averigüe cuál es la causa de que se haya alcanzado el límite de archivos abiertos
  2. Aumente el límite o arregle los fallos de la aplicación.

A. Encuentre los archivos o sockets que quedan abiertos

Nota: Los límites de archivos abiertos se aplican al total de archivos, conexiones y sockets abiertos combinados, no solo a los archivos.

En la plataforma Linux, el comando Lista de archivos abiertos (lsof) se puede usar para depurar qué recursos mantiene abiertos el proceso.

Este es un ejemplo de script para recopilar una salida útil de 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

Salida de ejemplo:

$> ./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 muestra el resultado del archivo lsof-sorted-counts-*.txt generado.  Muestra qué archivos o sockets mantiene actualmente abiertos el proceso.

Si encuentra en la lista sockets o archivos abiertos que no deberían estarlo, es probable que se deba a un error de la aplicación. Actualice el código de la aplicación para cerrar los archivos y sockets después de usarlos.

Una causa común de los sockets abiertos persistentes es el código personalizado que hace el servicio web. En muchos casos, se utilizan bibliotecas como Apache Commons HttpClient, pero las conexiones nunca son cerradas por los desarrolladores. Consulte este artículo para obtener detalles sobre Apache Commons HttpClient.

B. Aumente el límite de la sesión de shell

AEM Compruebe el límite del usuario para el máximo de archivos abiertos y, a continuación, ejecute lo siguiente como el mismo usuario con el que se ejecuta el proceso de la siguiente manera:

ulimit -Sn ulimit -Hn

Cuando use el script de inicio predeterminado de AEM/CQ, haga lo siguiente para aumentar el límite:

  1. Abra crx-quickstart/bin/start para editarlo
  2. Añada la variable CQ_MAX_OPEN_FILES en la parte superior del script: CQ_MAX_OPEN_FILES=8192 export CQ_MAX_OPEN_FILES

Si ve el error -bash: ulimit: open files: cannot modify limit: Operation not permitted al iniciar AEM, la configuración anterior no funciona.

En su lugar, es necesario aumentar el límite en /etc/security/limits.conf. A continuación hay detalles sobre cómo reconfigurar el límite de usuarios.

Si utiliza un servidor de aplicaciones de terceros como JBoss o Websphere, siga las secciones a continuación y verifique con la documentación del proveedor.

Nota: Si ninguna de las configuraciones de este artículo resuelve el problema, vea qué archivos están abiertos usando el comando lsof -p (-p es el ID del proceso problemático). Puede ser que su aplicación esté dejando abiertos los gestores de archivos. Si ve que los controladores los gestiona principalmente AEM y no su aplicación, póngase en contacto con el servicio de asistencia.

C. Aumentar los límites del usuario

Para cambiar el número máximo de archivos abiertos para los usuarios no raíz, cambie file/etc/security/limits.conf. Puede establecer el límite por usuario:

crx_process_username soft nofile 8092

crx_process_username hard nofile 20000

Nota: Esta configuración no tendrá efecto hasta la próxima vez que el usuario inicie sesión.

D. Aumentar el límite del sistema

A veces, el límite de usuarios es lo suficientemente alto, pero el propio sistema ha alcanzado su número máximo de archivos. Ejecute lo siguiente como usuario su/root:

  1. Compruebe la configuración del archivo máximo abierto en el sistema operativo (si está por debajo de 20000, sería lógico aumentar esta configuración).
    cat /proc/sys/fs/file-max
  2. Añada esta línea a /etc/sysctl.conf para aumentar el valor máximo de archivos abiertos del sistema:
    fs.file-max = 300000
  3. Ejecute este comando:
    sysctl -p
  4. Compruebe que se muestra el nuevo valor cuando ejecuta este comando:
    cat /proc/sys/fs/file-max

Nota: Esta configuración no tendrá efecto hasta la próxima vez que el usuario inicie sesión.

Causa

La causa es una de dos posibilidades:

  • La aplicación no está cerrando recursos como archivos o sockets después de usarlos.
  • O la aplicación requiere más archivos abiertos de los que permite el proceso.

Más información

Este error se produce cuando el sistema o usuario está gestionando su número máximo de archivos.

También puede hacer lo siguiente:

  1. Inicie sesión en http://localhost:4502/crxde como usuario administrador.
  2. Examinar /libs/granite/monitoring/config
  3. Haga clic con el botón derecho y elimine cada subnodo de /libs/granite/monitoring/config
  4. Haga clic en Guardar todo. Reinicie CQ.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f