Ambiente
Experience Manager
Problema/Sintomas
Os arquivos de log contêm o erro, "Muitos arquivos" e o Adobe Experience Manager (AEM) não responde.
Causa
A causa é uma das duas possibilidades:
A solução para esse problema é:
Descobrir quais arquivos ou soquetes foram deixados abertos
** Observe que os limites de arquivos abertos se aplicam ao total de arquivos abertos, barras e soquetes combinados, não apenas arquivos.
Na plataforma Linux, a Lista de arquivos abertos (lsof
) pode ser usado para depurar quais recursos são mantidos abertos pelo processo.
Este é um exemplo de script para coletar informações úteis da saída do 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
|
| — | — |
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 |
---|
Se você encontrar soquetes ou arquivos abertos listados que ainda não devem estar abertos, é provável que isso seja devido a um bug do aplicativo. Atualize o código do aplicativo para fechar arquivos e soquetes após usá-los.
Uma causa comum de soquetes abertos persistentes é o código personalizado que faz o serviço da web. Em muitos casos, bibliotecas como o Apache Commons HttpClient
são usadas, mas as conexões nunca são fechadas pelos desenvolvedores. Consulte este artigo para obter detalhes sobre o Apache Commons HttpClient
.
Aumentar o limite da sessão do shell
Verifique o limite do usuário para o máximo de arquivos abertos e execute o seguinte como o mesmo usuário com o qual o processo do AEM é executado:
ulimit -Sn ulimit -Hn
Ao usar o script de inicialização padrão do AEM/CQ, faça o seguinte para aumentar o limite:
Se você vir o erro "-bash: ulimit: abrir arquivos: não é possível modificar o limite: Operação não permitida" ao iniciar AEM, a configuração acima não funciona.
Em vez disso, é necessário aumentar o limite em /etc/security/limits.conf. Consulte as informações abaixo para obter detalhes sobre como reconfigurar o limite de usuários.
Se você estiver usando um servidor de aplicativos de terceiros, como JBoss ou Websphere, siga as seções abaixo e verifique com a documentação do fornecedor.
Observação:
Se nenhuma das configurações neste artigo resolver o problema, veja quais arquivos estão abertos usando o comando lsof -p. (-p é o id do processo problemático.) Pode ser que seu aplicativo esteja deixando os manipuladores de arquivo abertos. Se você perceber que os manipuladores estão sendo mantidos principalmente pelo AEM e não pelo seu aplicativo, entre em contato com o suporte.
Aumentar os limites do usuário
Para alterar o número máximo de arquivos abertos para usuários não raiz, altere a variável file/etc/security/limits.conf.
É possível definir o limite por usuário:
crx_process_username soft nofile 8092
crx_process_username hard nofile 20000
Observação:
Essa configuração não terá efeito até a próxima vez que o usuário fizer logon.
Aumentar o limite do sistema
Às vezes, o limite do usuário é alto o suficiente, mas o próprio sistema atingiu o número máximo de arquivos. Execute o seguinte como usuário su/root:
Observação:
Essa configuração não terá efeito até a próxima vez que o usuário fizer logon.
Informações adicionais
Esse erro ocorre quando o sistema ou usuário está usando o número máximo de manipuladores de arquivos.
DOWNLOAD
Obter arquivo
Script de shell que pode ser usado para monitorar o uso do arquivo aberto. Use esse script somente se o erro “muitos arquivos abertos” persistir mesmo após o aumento do número máximo. Ou você pode usá-lo se suspeitar que o CRX ou seu aplicativo está deixando manipuladores de arquivos abertos. Antes de usar o script, configure as seguintes variáveis: JAVA_HOME, QUICKSTART_PATH, OUTPUT_DIR, USUÁRIO, MAX_FILES_THRESHOLD. Para usar o script, configure-o como um trabalho cron.