문제가 있는 프로세스가 종료되었음에도 불구하고 메모리 부족 커널(3.2.0) 패닉(Debian 7.3)

문제가 있는 프로세스가 종료되었음에도 불구하고 메모리 부족 커널(3.2.0) 패닉(Debian 7.3)

상당히 큰 폴더(450G)를 해당 서버에 있는 2TB 드라이브에 백업 대상으로만 백업하려고 시도하는 동안 rdiff-backup(버전 1.2.8 - 마지막으로 표시됨)안정적인) 커널 패닉이 발생했습니다.

체계:

Linux giorgio 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux

디스크: 소프트웨어 미러 RAID 모드의 1TB 디스크 2개, 백업 전용 2TB 디스크 1개.

의심이 듭니다. 서버의 메모리는 2G RAM + 2G 스왑 = 4G입니다. 최대 16G 크기의 파일이 있습니다. rdiff-backup어느 시점에서 전체 파일을 메모리에 로드하는 것이 가능합니까 ?

어쨌든 커널 패닉이 발생해서는 안 되었기 때문에(rdiff 프로세스가 종료되었으므로 메모리를 다시 사용할 수 있어야 합니까?) 따라서 제 질문은 두 부분으로 구성되어 있습니다. 하나는 의심에 관한 것이고, 두 번째는 의심에 관한 것입니다. 커널 패닉.

그건 그렇고, 최근에 패닉이 시작되었습니다. 이미 전체 및 증분 백업을 포함한 상당수의 백업이 성공했으며 해당 대용량 GB 파일이 이미 존재했습니다. 그렇다면 rdiff-backup의 잘못이 아니라 새로운 데비안 커널의 잘못인 것 같은데요?

패닉 발생 당시의 로그 파일 섹션http://pastebin.com/e9a5fQdh

화면의 마지막 내용:

편집/업데이트: 방금 20GB 스왑 파일(/dev/zero의 dd를 사용하여) 생성을 시도했는데 서버가 다시 다운되었습니다 ping. .

로그를 살펴보면 커널이 일부 프로세스를 종료한 것 같습니다. 모든 프로세스의 원인이 된 것으로 의심되는 프로세스도 포함됩니다(rdiff-backup).하지만 "종료 가능한 프로세스가 부족합니다"라고 표시됩니다. 프로세스를 종료해도 메모리가 해제되지 않은 것 같습니다.

답변1

rdiff-backup을 종료하지 않았습니다. 그래야 했지만 oom_score_adj-1000입니다.

이는 sshd의 버그로 인해 발생합니다. 버그는 수정되었지만 다음 릴리스인 openssh 6.5까지 사용할 수 없습니다.

sshd는 새로 생성한 쉘의 oom_score_adj를 다시 0으로 설정하지 못하여 SSH를 통해 생성한 모든 하위 프로세스(따라서 bash 쉘 및 생성하는 모든 하위 프로세스)가 -1000을 가지게 되어 oom_score_adj이후에 모든 메모리를 차지할 수 있습니다. 움킬러가 그들을 죽이지 않고 말이죠.

이 문제를 해결하는 가장 빠른 방법은 다음과 같습니다(귀하의 경우와 같이 7567이 sshd의 pid라고 가정).

  • 달리다echo 0 >/proc/7567/oom_adj_score
  • SSH를 다시 ​​시작하십시오.

sshd를 다시 로드하지 말고 수정 사항이 적용될 때까지 다시 시작하십시오. (openssh 6.5에 있어야 함)

버그는 여기에서 보고되고 수정되었습니다.https://bugzilla.mindrot.org/show_bug.cgi?id=2156

관련 정보