스왑을 끈 상태에서도 RAM을 너무 많이 사용하면 시스템이 중단됩니다.

스왑을 끈 상태에서도 RAM을 너무 많이 사용하면 시스템이 중단됩니다.

RAM을 너무 많이 사용하는 Python 코드를 실행하면 컴퓨터가 너무 심하게 교체되기 시작하여 하드 재부팅을 해야 했습니다. 이 문제를 해결하기 위해 OOM 킬러가 개입할 것이라고 가정하고 스왑을 껐습니다. 그러나 여전히 똑같은 증상이 나타납니다! 즉, RAM을 모두 사용하면 하드 드라이브가 작동하는 소리가 들립니다. 컴퓨터가 작동을 멈추고 하드 재부팅을 해야 합니다.

무슨 일이 일어나고 있으며 어떻게 해결할 수 있나요?

내 시스템은 8GB RAM을 갖춘 Ubuntu 14.04.2 LTS, 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux를 실행하고 있습니다.

내 /etc/fstab 쇼

# / was on /dev/sda1 during installation
UUID=80919e96-e83b-4c88-b30e-8673e1faa3b4 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
#UUID=68064725-c1bb-4293-b8d1-45b2a42fb7b4 none            swap    sw              0       0

자세한 내용

tail -n+1 /proc/sys/vm/overcommit_*
==> /proc/sys/vm/overcommit_memory <==
0

==> /proc/sys/vm/overcommit_ratio <==
50

cat /proc/sys/vm/oom_kill_allocating_task
0

예제 코드

이 문제를 보여주는 최소한의 Python 예제를 만드는 방법을 모른다고 말해서 유감입니다. 그러나 이것은 확실히 수행되는 비미니멀리스트 코드입니다. http://paste.ubuntu.com/11621823/. 코드에서 "path" 값을 변경하고 실행하기만 하면 됩니다. 내 시스템에서는 모든 RAM을 사용한 다음 시스템을 완전히 정지시킵니다.

답변1

당신의 문제는 당신의 것이고 python code그것은 와 아무 관련이 없습니다 swap.

Swap메모리의 로드가 증가하면 운영 체제에서 공간을 사용합니다. 그런 다음 현재 사용되지 않는 프로세스는 파티션인 스왑 공간으로 이동됩니다. 이러한 방식으로 현재 실행 중인 프로세스에 대해 더 많은 메모리를 확보할 수 있습니다. 스왑으로 이동된 프로세스가 사용되면 스왑 영역에서 다시 메모리로 이동됩니다.

이러한 방식의 스와핑은 사용 가능한 여유 메모리 양보다 무언가를 실행하는 데 더 많은 메모리가 필요한 상황을 해결하는 데 도움이 됩니다.

스왑을 끄면 문제가 해결되지 않고 문제가 증가할 뿐입니다. 내가 생각할 수 있는 문제에 대한 유일한 해결책은 Python 코드를 최적화하여 메모리를 덜 사용하거나 컴퓨터의 메모리를 늘리는 것입니다.

또한 사람들이 코드를 최적화하는 데 도움을 줄 수 있도록 여기에 코드를 넣을 수 있다면 더 좋을 것입니다.

관련 정보