나는 4MB RAM에서 512GB RAM 범위의 시스템에서 GNU/Linux를 사용해 왔습니다. 교체가 시작되면 대부분의 경우 여전히 로그인하여 문제가 되는 프로세스를 종료할 수 있습니다. 단지 100-1000배 더 인내심을 가지면 됩니다.
새로운 32GB 시스템에서 변경된 사항: 스왑을 시작할 때 차단됩니다. 때로는 디스크 활동이 꽉 찼지만 때로는 디스크 활동이 없는 경우도 있습니다.
가능한 문제를 확인하기 위해 이 프로그램을 작성했습니다. 아이디어는 다음과 같습니다.
1 grab 3% of the memory free right now
2 if that caused swap to increase: stop
3 keep the chunk used for 30 seconds by forking off
4 goto 1
-
#!/usr/bin/perl
sub freekb {
my $free = `free|grep buffers/cache`;
my @a=split / +/,$free;
return $a[3];
}
sub swapkb {
my $swap = `free|grep Swap:`;
my @a=split / +/,$swap;
return $a[2];
}
my $swap = swapkb();
my $lastswap = $swap;
my $free;
while($lastswap >= $swap) {
print "$swap $free";
$lastswap = $swap;
$swap = swapkb();
$free = freekb();
my $used_mem = "x"x(1024 * $free * 0.03);
if(not fork()) {
sleep 30;
exit();
}
}
print "Swap increased $swap $lastswap\n";
이 프로그램을 영원히 실행하면 시스템이 스왑 한도에 도달하게 되지만 최소 스왑 양만 얻고 매우 느리게 수행됩니다(예: 한 번에 최대 몇 MB).
내가 실행하면 :
forever free | stdbuf -o0 timestamp > freelog
매초마다 Exchange가 천천히 상승하는 모습을 볼 수 있을 것입니다. (영원히 및 타임스탬프https://github.com/ole-tange/tangetools).
그러나 그것은 내가 보는 동작이 아닙니다. 점프 전반에 걸쳐 스왑이 증가하고 점프 중에 시스템이 완전히 차단되는 것을 봅니다. 여기서 시스템은 30초 동안 차단되고 스왑 공간 사용량은 1GB 증가합니다.
secs
169.527 Swap: 18440184 154184 18286000
170.531 Swap: 18440184 154184 18286000
200.630 Swap: 18440184 1134240 17305944
210.259 Swap: 18440184 1076228 17363956
차단: 21초. 스왑은 2000MB를 추가합니다.
307.773 Swap: 18440184 581324 17858860
308.799 Swap: 18440184 597676 17842508
330.103 Swap: 18440184 2503020 15937164
331.106 Swap: 18440184 2502936 15937248
차단: 20초. 스왑에 2200MB 추가:
751.283 Swap: 18440184 885288 17554896
752.286 Swap: 18440184 911676 17528508
772.331 Swap: 18440184 3193532 15246652
773.333 Swap: 18440184 1404540 17035644
차단됨: 37초. 스왑에 2400MB 추가:
904.068 Swap: 18440184 613108 17827076
905.072 Swap: 18440184 610368 17829816
942.424 Swap: 18440184 3014668 15425516
942.610 Swap: 18440184 2073580 16366604
그것도 충분히 나쁘지만 더 나쁜 것은 시스템이 때때로 몇 시간을 기다린 후에도 완전히 응답하지 않는다는 것입니다. 이것이 교환 문제와 관련이 있다고 생각하지만 확신할 수는 없습니다.
내 첫 번째 생각은 /proc/sys/vm/swappiness를 60에서 0 또는 100으로 조정하여 효과가 있는지 확인하는 것이었습니다. 0은 아무런 영향을 미치지 않지만 100은 문제가 덜 자주 발생하도록 합니다.
이렇게 오랫동안 시스템이 차단되는 것을 방지하려면 어떻게 해야 합니까?
10MB 미만이면 충분할 때 1~3GB를 교체하기로 결정한 이유는 무엇입니까?
시스템 메시지:
$ uname -a
Linux aspire 3.8.0-32-generic #47-Ubuntu SMP Tue Oct 1 22:35:23 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
편집하다:
24GB를 제거하고 8GB만 시도하여 문제가 32GB RAM으로 인한 것인지 테스트했는데 동일한 동작을 확인했습니다.
또한 VirtualBox에 GNU/Linux Mint 15를 설치하여 스왑 동작(정지 아님)을 재현할 수 있었습니다.
8GB 노트북에서는 문제를 재현할 수 없습니다. 위 스크립트는 몇 시간 동안 완벽하게 실행됩니다. 몇 메가바이트를 교체하지만 전체 기가바이트는 교체하지 않습니다. 그래서 두 시스템의 /proc/sys/vm/*에 있는 모든 변수를 비교했습니다. 두 시스템은 완전히 동일합니다. 이로 인해 문제는 다른 곳에 있다고 믿게 되었습니다. 노트북은 다른 커널을 실행합니다.
Linux hk 3.2.0-55-generic #85-Ubuntu SMP Wed Oct 2 12:29:27 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
VM 시스템의 내용이 3.2.0에서 3.8.0으로 변경되었을 수 있나요?
답변1
스왑 블록 장치에서 어떤 I/O 스케줄러를 사용하고 있는지 확인하고 더 나은 결과를 얻으려면 변경해 보세요.
http://andrux-and-me.blogspot.nl/2013/05/io-schedulers-and-performance.html
답변2
다음 버전으로 업그레이드한 후 문제가 사라졌습니다.
Linux aspire 3.16.0-31-lowlatency #43~14.04.1-Ubuntu SMP PREEMPT Tue Mar 10 20:41:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
그런 점을 고려하지 않고이것커널 업그레이드로 문제가 해결되었습니다.