경고로 가득 찬 Postfix 로그: tlsmgr 소켓에서 요청을 읽는 동안 입력 끝: 애플리케이션 오류

경고로 가득 찬 Postfix 로그: tlsmgr 소켓에서 요청을 읽는 동안 입력 끝: 애플리케이션 오류

최근에 높은 부하(예: 높은 CPU 사용량)로 인해 응답하지 않는 postfix 메일 서버를 발견했습니다.

이는 로드로 인해 콘솔 및 SSH 로그인이 완료되지 않음을 의미합니다.

모니터링에서는 CPU 사용량이 100%로 표시되고 I/O는 보통 수준으로 유지됩니다.

하드 리셋 후 시스템 로그의 마지막 로그 줄은 다음과 같습니다.

Feb 06 09:37:16 example.org postfix/master[10461]: warning: unix_trigger_event: read timeout for service private/tlsmgr
Feb 06 10:04:58 example.org kernel: systemd-journal invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj=-250
[..]
Feb 06 10:04:59 example.org kernel: oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/dnf-makecache.service,task=dnf,pid=1584309,uid=0
Feb 06 10:04:59 example.org kernel: Out of memory: Killed process 1584309 (dnf) total-vm:944600kB, anon-rss:817340kB, file-rss:0kB, shmem-rss:0kB, UID:0 pgtables:1772kB oom_score_adj:0
[..]
Feb 06 10:04:56 example.org dovecot[10353]: master: Warning: Time moved forwards by 5.880984 seconds - adjusting timeouts.
[..]
Feb 06 09:41:36 example.org systemd-networkd[10273]: enp0s3: Failed
[^--- sic, yes, shows up out-of-order in journalctl output]
Feb 06 10:04:56 example.org postfix/master[10461]: warning: unix_trigger_event: read timeout for service public/pickup
[..]
Feb 06 10:04:56 example.org dovecot[10353]: master: Error: service(imap-login): Initial status notification not received in 30 seconds, killing the process
Feb 06 10:04:56 example.org dovecot[10362]: imap-login: Fatal: master: service(imap-login): child 1584458 killed with signal 9
Feb 06 10:04:56 example.org postfix/tlsmgr[10953]: warning: end-of-input while reading request from tlsmgr socket: Broken pipe
[.. many repeats of above message ..]
Feb 06 10:05:03 example.org postfix/tlsmgr[10953]: warning: end-of-input while reading request from tlsmgr socket: Broken pipe
Feb 06 10:05:03 example.org postfix/tlsmgr[10953]: warning: end-of-input while reading request from tlsmgr socket: Application error
[.. many repeats of above message ..]
Feb 06 11:22:01 example.org postfix/tlsmgr[10953]: warning: end-of-input while reading request from tlsmgr socket: Application error
Feb 06 11:22:01 example.org postfix/tlsmgr[10953]: warning: end-of-input while reading request from tlsmgr socket: Application error
Feb 06 11:22:27 example.org systemd-journald[10176]: [

답변1

근본 원인은 시스템 메모리가 부족하기 때문입니다. 따라서 시스템을 더욱 강력하게 만들기 위해서는 이 이벤트가 발생할 확률을 줄여야 합니다. 특히:

  • Golang DB 연결 풀의 동시 데이터베이스 연결 수 제한, 메일 서버의 첨부 파일 크기 제한, 애플리케이션 메모리/캐시 제한 설정 등 핵심 서비스의 메모리 사용량을 제한합니다.
  • 불필요한 서비스 비활성화
  • 이 시스템에 더 많은 RAM을 추가할 수 있습니다.

또한 다음과 같이 OOM 조건에 가깝고 (상대적으로) 메모리가 부족한 상황에서 관련 구성 요소의 오류 모드를 개선하기 위해 작업할 수 있습니다.

  • RAM이 2GiB 미만인 시스템에서 사용할 수 있도록 dnf(또는 dnf의 후속 제품인 microdnf)를 개선합니다. 이러한 관리 유틸리티에 사용 가능한 메모리가 1GiB 미만인 시스템은 훨씬 덜 유용해야 합니다. 일상적인 작업을 위한 MiB 메모리
  • OOM 상황에서 네트워크 인터페이스를 닫지 않도록 systemd-networkd를 개선합니다.
  • tlsmgr 및 해당 클라이언트가 중복된 오류 메시지 및 처리로 시스템을 플러딩하고 묶는 대신 오래된 epoll 이벤트를 삭제하는 등 거의 OOM 상황에서 신속하게 복구할 수 있도록 Postfix를 개선합니다.

관련 정보