오류: 열려 있는 파일이 너무 많습니다 | AEM
이 문서는 로그 파일에 오류 ''가 포함된 문제를 해결합니다.파일이 너무 많음 그 결과 Adobe Experience Manager(AEM)는 응답하지 않습니다.
설명 description
환경
Adobe Experience Manager
문제/증상
로그 파일에 오류 '파일이 너무 많음 그리고 Adobe Experience Manager(AEM)는 응답하지 않습니다.
해결 방법 resolution
이 문제에 대한 해결 방법은 다음과 같습니다.
- 열린 파일 한도에 도달하게 하는 원인이 무엇인지 알아봅니다.
- 한도를 늘리거나 애플리케이션 버그를 수정합니다.
A. 열려 있는 파일 또는 소켓 찾기
참고 - 열린 파일 제한은 파일뿐만 아니라 결합된 전체 열린 파일, 파이프 및 소켓에 적용됩니다.
Linux 플랫폼에서 열린 파일 목록 (lsof
) 명령을 사용하여 프로세스로 인해 열린 리소스를 디버깅할 수 있습니다.
다음은 유용한 정보를 수집하는 샘플 스크립트입니다 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
샘플 출력:
$> ./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 lsof-sorted-counts-*.txt
파일. 현재 프로세스로 인해 열린 파일 또는 소켓이 표시됩니다.
아직 열리면 안 되는 소켓 또는 파일이 열려 있으면 애플리케이션 버그일 가능성이 높습니다. 파일과 소켓을 사용한 후 애플리케이션 코드를 업데이트하여 닫습니다.
열린 소켓 속도가 느린 일반적인 원인은 웹 서비스를 만드는 사용자 지정 코드입니다. 대부분의 경우 Apache Commons와 같은 라이브러리 HttpClient
는 사용되지만 연결은 개발자에 의해 닫히지 않습니다. 다음을 참조하십시오 이 문서 apache Commons에 대한 자세한 내용 HttpClient
.
B. 셸 세션의 제한 늘이기
최대 열린 파일에 대한 사용자 제한을 확인한 다음, AEM 프로세스가 실행하는 동일한 사용자로 다음을 실행합니다.
ulimit -Sn ulimit -Hn
AEM/CQ의 기본 시작 스크립트를 사용하는 경우 다음 작업을 수행하여 제한을 늘리십시오.
- 편집을 위해
crx-quickstart/bin/start
를 엽니다 - 스크립트 상단에 변수
CQ_MAX_OPEN_FILES
추가:CQ_MAX_OPEN_FILES=8192 export CQ_MAX_OPEN_FILES
AEM 시작 시 오류 -bash: ulimit: open files: cannot modify limit: Operation not permitted
가 표시되면 위의 구성이 작동하지 않습니다
대신 /etc/security/limits.conf
에서 제한을 늘어야 합니다. 사용자 제한을 재구성하는 방법에 대한 자세한 내용은 아래를 참조하십시오.
JBoss 또는 Websphere와 같은 타사 애플리케이션 서버를 사용하는 경우 아래 섹션에 따라 공급업체의 설명서를 확인합니다.
참고: 이 문서의 어떤 구성으로도 문제를 해결할 수 없는 경우 명령을 사용하여 열려 있는 파일을 확인합니다 lsof -p
(-p는 문제가 있는 프로세스의 프로세스 ID입니다.) 애플리케이션이 파일 핸들을 열린 상태로 둘 수 있습니다. 핸들이 애플리케이션이 아니라 주로 AEM에 의해 유지되는 경우 지원 센터에 문의하십시오.
C. 사용자 제한 늘리기
루트가 아닌 사용자의 최대 열린 파일 수를 변경하려면 file/etc/security/limits.conf
. 사용자별로 다음 제한을 설정할 수 있습니다.
crx_process_username soft nofile 8092
crx_process_username hard nofile 20000
참고: 이 구성은 다음에 사용자가 로그인할 때까지 적용되지 않습니다.
D. 시스템 제한 늘리기
때로는 사용자 제한이 상당히 높지만 시스템 자체가 최대 파일 수에 도달합니다. su/root 사용자로 다음을 실행합니다.
- 운영 체제에서 최대 파일 열기 설정을 확인합니다(20000 미만인 경우 이 설정을 높이는 것이 좋음).
cat /proc/sys/fs/file-max
- /etc/sysctl.conf에 이 줄을 추가하여 시스템 열기 파일 최대값을 늘립니다.
fs.file-max = 300000
- 이 명령 실행:
sysctl -p
- 이 명령을 실행할 때 새 값이 표시되는지 확인합니다.
cat /proc/sys/fs/file-max
참고: 이 구성은 다음에 사용자가 로그인할 때까지 적용되지 않습니다.
원인
원인은 다음 두 가지 가능성 중 하나입니다.
- 애플리케이션은 파일이나 소켓과 같은 리소스를 사용하고 닫지 않습니다.
- 아니면 프로세스에 비해 애플리케이션에는 더 많은 열린 파일이 필요합니다.
추가 정보
이 오류는 시스템 또는 사용자가 최대 수의 파일 핸들을 사용할 때 발생합니다.
다음을 수행할 수도 있습니다.
- http://localhost:4502/crxde에 관리자로 로그인합니다.
- 다음으로 이동
/libs/granite/monitoring/config
- 마우스 오른쪽 단추를 클릭하고 의 각 하위 노드를 삭제합니다.
/libs/granite/monitoring/config
- 모두 저장을 클릭합니다. CQ를 다시 시작합니다.