
Ubuntu 16.04의 VPS에서 Apache 2.4.18의 mod_perl 스크립트를 사용합니다. 스크립트는 디스크(웹 페이지 템플릿)에서 파일을 엽니다. 때때로 이러한 파일이 표시되지 않으며 서버 오류 로그는 다음 오류로 가득 차 있습니다.
[TIME] [:error] [pid PID:tid TID] 파일 오류 - FILENAME: 찾을 수 없음\n
이러한 메시지는 Perl 함수가 false를 반환할 때 템플릿 패키지에 의해 생성됩니다 open()
. Apache를 다시 시작한 후 파일이 다시 표시되지만 일정 시간 동안만 표시됩니다. 잠시 후 문제가 다시 나타납니다.
그러한 행동의 이유는 무엇입니까?
답변1
어쩌면 mod_perl/apache가 파일 핸들을 제대로 닫지 않을 수도 있습니다. 잠시 후 열린 파일의 최대 양에 도달하면(1024 소프트/4096 하드 참조 ulimit -Sn;ulimit -Hn
) Apache를 다시 시작하면 모든 오래된 핸들이 닫힙니다.
다음에 오류가 발생하면 apache/perl에서 pid를 가져와서 이 이론을 조사할 수 있습니다.
# ps aux | grep apache
또는
# pidof apache
또는 자체 프로세스가 있는 경우 Perl 모듈입니다.
샘플 출력:
28294
PID로 열린 목록 파일
# lsof -p 28294
# lsof -a -p 28294
# counting
# lsof -a -p 28294| wc -l
또는
# cd /proc/28294/fd
# ls -l | less
# count open files with
# ls -l | wc -l