Error: Demasiados archivos abiertos | AEM

Descripción

Entorno
Experience Manager

Problema/Síntomas
Los archivos de registro contienen el error "Demasiados archivos" y Adobe Experience Manager (AEM) no responde.

Resolución

Causa

La causa es una de las 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.

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.


Encuentre los archivos o sockets que quedan abiertos

** Tenga en cuenta que 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, la Lista de archivos abiertos (lsof) se puede utilizar para depurar qué recursos mantiene abiertos el proceso.

Aquí tiene un ejemplo de script para recoger una salida útil de lsof:


| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | #!/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:
 
1
2
3
4
5
6
$ ./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

Inspeccione la salida del archivo `lsof-sorted-counts-*.txt` generado.  Muestra qué archivos o sockets mantiene actualmente abiertos el proceso.

Si encuentra sockets abiertos o archivos listados que aún no deberían estar abiertos, es probable que se deba a un error de aplicación. Actualice el código de su 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, bibliotecas como Apache Commons HttpClient se utilizan, pero los desarrolladores nunca cierran las conexiones. Consulte este artículo para obtener más información sobre Apache Commons HttpClient.

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

Compruebe el límite del usuario para el máximo de archivos abiertos y ejecute lo siguiente como el mismo usuario con el que se ejecuta el proceso AEM:

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 editar
  2. Agregue la variable CQ_MAX_OPEN_FILES a la parte superior del script: CQ_MAX_OPEN_FILES=8192 exportar CQ_MAX_OPEN_FILES

Si ve el error "-bash: Ulimit: abrir archivos: no se puede modificar el límite: Operación no permitida" 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 está usando 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, entonces vea qué archivos están abiertos usando el comando lsof -p. (-p es el id de proceso 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.


 Aumentar los límites del usuario

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

crx_process_username soft nofile 8092

crx_process_username archivo duro 20000

Nota:

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


 Aumente el límite del sistema

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

  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 del archivo abierto del sistema:
    fs.file-max = 300000
  3. Ejecute este comando:
    sysctl -p
  4. Compruebe que se muestre el nuevo valor cuando ejecute 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.


 Información adicional

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

DESCARGAR
Obtener archivo
Script de shell que puede usar para monitorear el uso de archivos abiertos. Use este script solo si el error “demasiados archivos abiertos” persiste tras aumentar el máximo. También puede usarlo si sospecha que CRX o su aplicación están dejando abiertos los gestores de archivos. Antes de usar la secuencia de comandos, configure las siguientes variables: JAVA_HOME, QUICKSTART_PATH, OUTPUT_DIR, USUARIO, MAX_FILES_THRESHOLD. Para usar el script, configúrelo como un trabajo cron.

En esta página