오류: 열려 있는 파일이 너무 많습니다 | AEM

이 문서는 로그 파일에 오류 ''가 포함된 문제를 해결합니다.파일이 너무 많음 ​그 결과 Adobe Experience Manager(AEM)는 응답하지 않습니다.

설명 description

환경

Adobe Experience Manager

문제/증상

로그 파일에 오류 '파일이 너무 많음  그리고 Adobe Experience Manager(AEM)는 응답하지 않습니다.

해결 방법 resolution

이 문제에 대한 해결 방법은 다음과 같습니다.

  1. 열린 파일 한도에 도달하게 하는 원인이 무엇인지 알아봅니다.
  2. 한도를 늘리거나 애플리케이션 버그를 수정합니다.

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의 기본 시작 스크립트를 사용하는 경우 다음 작업을 수행하여 제한을 늘리십시오.

  1. 편집을 위해 crx-quickstart/bin/start를 엽니다
  2. 스크립트 상단에 변수 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 사용자로 다음을 실행합니다.

  1. 운영 체제에서 최대 파일 열기 설정을 확인합니다(20000 미만인 경우 이 설정을 높이는 것이 좋음).
    cat /proc/sys/fs/file-max
  2. /etc/sysctl.conf에 이 줄을 추가하여 시스템 열기 파일 최대값을 늘립니다.
    fs.file-max = 300000
  3. 이 명령 실행:
    sysctl -p
  4. 이 명령을 실행할 때 새 값이 표시되는지 확인합니다.
    cat /proc/sys/fs/file-max

참고: 이 구성은 다음에 사용자가 로그인할 때까지 적용되지 않습니다.

원인

원인은 다음 두 가지 가능성 중 하나입니다.

  • 애플리케이션은 파일이나 소켓과 같은 리소스를 사용하고 닫지 않습니다.
  • 아니면 프로세스에 비해 애플리케이션에는 더 많은 열린 파일이 필요합니다.

추가 정보

이 오류는 시스템 또는 사용자가 최대 수의 파일 핸들을 사용할 때 발생합니다.

다음을 수행할 수도 있습니다.

  1. http://localhost:4502/crxde에 관리자로 로그인합니다.
  2. 다음으로 이동 /libs/granite/monitoring/config
  3. 마우스 오른쪽 단추를 클릭하고 의 각 하위 노드를 삭제합니다. /libs/granite/monitoring/config
  4. 모두 저장을 클릭합니다. CQ를 다시 시작합니다.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f