우리는 많은 로그 파일을 작성하는 CentOS 6.0 64비트에서 실행되는 Java 기반 웹 애플리케이션을 가지고 있습니다. , 및 기타 여러 옵션을 logrotate
사용하여 일부 파일을 매일 교체하세요.daily
copytruncate
그러한 특정 로그 파일 중 하나가 정확히 "102400000" 바이트에서 성장을 멈췄습니다. 프로세스는 계속해서 정상적으로 작동합니다. 하지만 당시 로그에는 아무것도 기록되지 않았습니다.
stat
"102400000"바이트 크기에 도달한 후 수정 시간이 변경되었는지 확인하기 위해 파일에 작업을 수행했지만 변경 watch
되지 않았습니다. 파일에는 아무 일도 일어나지 않습니다. 그것은 단지 동일하게 유지됩니다. 동일한 디렉터리의 다른 로그 파일에 계속해서 씁니다.
다른 StackExchange 질문에서 언급된 내용여기신청하지 마십시오. 언급된 ulimit 옵션이 설정되어 있지만 아무것도 설정되지 않았는지 확인하고 다시 확인했습니다.
실행하면 strace -f -p PID
프로세스가 쓰기를 시도하지만 "파일이 너무 큼" 및 "파일 크기 제한이 초과됨" 메시지가 표시됩니다.
[pid 5679] write(1, "\n\n\n\n\n23-01-2013 12:00:46:921 Av"..., 128) = -1 EFBIG (File too large)
[pid 5679] --- SIGXFSZ (File size limit exceeded) @ 0 (0) ---
파일 크기에 이러한 제한을 적용하는 이유를 어떻게 찾을 수 있습니까? 동일한 디렉터리에 있는 다른 로그 파일은 크기가 매우 크며(크기가 1GB 이상) 이러한 문제가 없습니다.
답변1
따라서 (귀하의 의견에 따라) 결국 ulimit
( SIGXFSZ
및 EFBIG
) 로그 크기가 더 커질 수 없는 이유를 설명합니다.
다음을 통해 확인할 수 있습니다.
grep 'Max file size' "/proc/$pid/limits"
( $pid
파일에 쓸 Java 프로세스의 ID는 어디에 있습니까?)
이는 프로세스 자체(check 또는 strace 출력 setrlimit
)에 의해 설정되거나 시작된 래퍼 스크립트 또는 Java 애플리케이션(조회)에 의해 설정될 수 있습니다.ulimit
java
ulimit -f 100000