mod_perl 스크립트는 일정 시간이 지나면 파일 시스템이 표시되지 않습니다.

mod_perl 스크립트는 일정 시간이 지나면 파일 시스템이 표시되지 않습니다.

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

관련 정보