
매주 토요일마다 알 수 없는 이유로 내 서버 중 하나에서 스왑 사용률이 급증합니다. 사용 가능한 여유 메모리가 많기 때문에 반드시 문제가 되는 것은 아니지만 여전히 무슨 일이 일어나고 있는지 이해하고 싶습니다.
특히 스왑이 약 20분 동안 2% 사용에서 100% 사용으로 바뀌는 상황에 당황합니다. 하지만 이런 일이 발생하면 스왑 레이트가 증가하지 않는 것 같습니다. 서버에는 8GB 스왑 파티션이 있으므로 사용 가능한 공간을 채우기 위해 초당 수천 페이지의 페이지 아웃 속도가 예상됩니다.
게다가 서버 스왑을 유발하는 시점에 메모리 활용도가 급증하는 것 같지는 않습니다.
관찰된 행동에 대해 설명할 수 있는 사람이 있나요? 서버는 2.6.9 커널을 갖춘 RHEL 4.8(오래된 것으로 알고 있음)입니다. 아래 sar의 일부 출력을 포함했습니다.
스왑 활용도는 약 20분 만에 2%에서 100%로 증가합니다.
$ sar -r -f sa12
....
06:00:01 PM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad
06:10:01 PM 4583856 11847032 72.10 79676 319804 8178056 207864 2.48 19816
06:20:01 PM 4720904 11709984 71.27 38840 225108 8178400 207520 2.47 19124
06:30:02 PM 4839160 11591728 70.55 1404 144948 1968152 6417768 76.53 6227068
06:40:02 PM 4827016 11603872 70.62 1640 145484 10232 8375688 99.88 8182968
06:50:02 PM 4836376 11594512 70.57 844 123304 60 8385860 100.00 8193044
07:00:01 PM 4825764 11605124 70.63 920 128108 4516 8381404 99.95 8188680
....
같은 기간 스왑 통계는 다음과 같습니다.
$ sar -W -f sa12
....
06:00:01 PM pswpin/s pswpout/s
06:10:01 PM 0.00 0.00
06:20:01 PM 0.00 0.00
06:30:02 PM 0.68 0.00
06:40:02 PM 1.85 0.00
06:50:02 PM 5.07 0.00
07:00:01 PM 8.62 0.00
....
답변1
흥미로운 사실: 스왑 사용량이 0에서 8GB로 증가했습니다. 그 동안 디스크에는 단 한 바이트도 기록되지 않았습니다(sar의 pswpout/s
쇼 0). 따라서 내 가정은 스왑이 할당/예약되었지만 소비/사용되지는 않았다는 것입니다.
내 추측으로는 귀하의 서버가vm.overcommit_memory=2
(읽기vm.overcommit_memory 문서,VM 오버커밋 회계). 이 경우 할당된 각 바이트는 사용된 것으로 계산됩니다. [확인하지 않았습니다.]
스레드를 읽어볼 수도 있습니다.Linux: 사용된 총 스왑 = 프로세스에서 사용된 스왑 + ??.
답변2
이는 귀하의 질문에 직접적으로 대답하지는 않지만 다음 스크립트는 조사에 유용할 수 있습니다. 각 개별 프로세스가 사용하는 스왑 공간의 양을 알 수 있습니다.
스왑이 언제 시작되는지 대략적으로 알고 있다면 해당 시간에 이 스크립트를 실행하도록 cron을 설정할 수 있습니다.