Linux에서 대규모 버퍼 사용량 추적

Linux에서 대규모 버퍼 사용량 추적

저는 4Go 메모리를 갖춘 Debian Lenny에서 실행되는 Linux 서버를 가지고 있습니다. 많이 실행되지는 않습니다.

  • Postfix/spamassassin(데몬 모드)
  • 바인딩 9
  • KVM(게스트 1명 - 1Go RAM)

매일 정확히 3:05 UTC에 거의 모든 서버 메모리가 완전히 바닥으로 떨어집니다. 그 후, 내 버퍼는 2G 이상에서 사용되었으며 결코 지워지지 않았습니다(커널에 캐시를 삭제하도록 수동으로 지시하지 않는 한).

온라인에서 많이 검색했는데 처음에는 NFS 버퍼를 사용하기 때문인 줄 알았습니다. NFS 공유 드라이브를 통해 백업을 만들기 위해 gzip/tar를 사용했는데 백업이 3시 5분에 이루어졌습니다.

그런데 지금 매우 이상한 상황에 처해 있습니다. 백업 작업을 1시 40분에 옮겼는데(2분 만에 완료) 여전히 3시 5분에 RAM을 모두 삭제했기 때문입니다.

내 로그에는 특별한 것이 없습니다. 03:05:01에 cron이 루트로 세션을 열고 03:05:02에 아무것도 하지 않고 즉시 세션을 닫습니다. 물론 cron이 다시 시작되었고 작업 시간을 확인했습니다. 다시 한 번 특별한 것은 없습니다.

왜 이런 일이 발생하는지 아시나요? 아니면 이 모든 버퍼를 사용하는 것이 무엇인지 추적하는 방법에 대해 알고 계시나요?


편집하다: 서버는 UTC로 실행되며 여기의 모든 시간은 UTC입니다. NFS 서버를 실행하고 있지 않으며 mlocate 또는 slocate가 설치되어 있지 않습니다. crontab, daily 및 사용자 crontab의 경우 이 시간 동안에는 어떤 작업도 수행되지 않습니다.

내 로그에서 cron에 대한 흥미로운 부분은 다음과 같습니다.

auth.log-20110501: 5월 1일 03:05:01 SRV CRON[15914]: pam_unix(cron:session): (uid=0) 사용자 루트에 대해 세션이 열림
auth.log-20110501: 5월 1일 03: 05:01 SRV CRON[15914]: pam_unix(cron:session): 사용자 루트에 대한 세션이 닫혔습니다.
syslog-20110501: 5월 1일 03:05:01 SRV /USR/SBIN/CRON[15915]: (root) CMD ([ -x /usr / lib/sysstat/sa1 ] && { [ -r "$DEFAULT" ] && . "$DEFAULT" ; [ "$ENABLED" = "true" ] && exec /usr/lib/sysstat/sa1 $SA1_OPTIONS 1 1 ;

답변1

서버가 UTC로 실행되고 있나요? 대부분은 UTC+1(MET 또는 CET)인 현지 시간대에서 실행됩니다. 제가 이 질문을 하는 이유는 crontab에서 사용되는 시간대를 알아야 하기 때문입니다. 예를 들어 3.05는 crontab에서 3.05로 호출되지 않을 수 있습니다.

과도한 디스크 액세스를 수행하는 일반적인 작업에는 makewhatis/ man-dbslocate/ 가 포함됩니다 mlocate. 3.05 주변에서 실행되고 있지 않은지 다시 확인하세요. 예를 들어 /etc/crontab및 를 살펴보세요 /etc/cron.daily. 사용자의 cron 탭을 확인하세요 /var/spool/cron.

크론 로그 없이 3.05에서 무엇이 실행되고 있는지 알아내는 두 가지 방법을 생각할 수 있습니다.

첫 번째는 auditctl사용하기가 약간 고통스럽다는 것입니다.

매뉴얼 페이지에 따르면 다음을 시도합니다.

$ sudo auditctl -a entry,always -S open -S creat \
    -S read -S readv -S write -S writev -S sendfile \
    -S fork -S clone -S execve -k 305

감사를 설정한 다음

$ sudo aureport -s -i -ts 03:04 -te 03:06

3.05 이후 시스템에 로그인하여 무슨 일이 일어났는지 확인하세요.

두 번째는 간단합니다 ps. 여러 번 실행되는 스크립트를 작성 ps하고 3.04에서 실행되도록 예약하면 됩니다.

어떤 프로세스가 I/O를 수행하고 있는지 확인하고 어떤 프로세스가 현재 가장 많은 CPU를 사용하고 있는지 확인하는 필드 등 의 여러 측면이 ps여기에서 유용합니다. 물론 3.04.59 목록에는 나타나지 않지만 3.05.01 또는 그 직후에 나타나는 모든 프로세스도 명백히 의심스럽습니다.wchanstatuspcpu

관련 정보