OS를 중단시킬 수있는 욕심 많은 응용 프로그램을위한 메모리 제한 솔루션?


32

나는 과학적인 프로그래밍을 위해 컴퓨터를 사용합니다. 8GBRAM과 12GB스왑 공간 이 양호 합니다. 종종 문제가 커지면서 사용 가능한 모든 RAM을 초과합니다. 우분투는 충돌하지 않고 Unity와 열린 터미널을 포함하여 모든 것을 스왑에로드하기 시작합니다. 런 어웨이 프로그램을 제 시간에 잡지 못하면 내가 할 수있는 일 외에는 아무것도 없습니다. 예를 들어 명령 프롬프트로 전환하는 데 4-5 분이 걸립니다. Ctrl-Alt-F2내가 문제의 프로세스를 죽일 수있는 곳.

내 자신의 어리 석음이이 포럼의 범위를 벗어나기 때문에 단일 문제 프로그램에서 사용 가능한 모든 메모리를 모두 사용할 때 우분투가 스 래싱을 통해 충돌하는 것을 어떻게 막을 수 있습니까?

재택 실험 *!

터미널을 열고 시작한 다음 설치 한 python경우 다음을 numpy시도하십시오.

>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]

* 경고 : 악영향을 미칠 수 있으며 프로세스를 모니터링 iotop하거나 제 top시간에 종료해야합니다. 그렇지 않은 경우 재부팅 후 see겠습니다.

답변:


21

셸 내장을 ulimit통해 리소스를 제한 할 수 있습니다. 셸 (및 그 자식)에서 메모리 사용을 제한하려면을 사용하십시오 ulimit -v.

100MB (100000KB)의 메모리 제한 설정 시연 :

$ ulimit -v
unlimited
$ python -c '[ "x" * 100000000 ]'
$ ulimit -v 100000
$ python -c '[ "x" * 100000000 ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
MemoryError

ps uww -C script-name-here파이썬을 사용 하면 29MB 이상의 메모리 (VSZ 열)가 필요합니다. 파이썬 스크립트에 더 많은 메모리가 필요하므로 RSS 제한이 커지므로 해당 열을 조정하십시오.


1
우리는 실제 앱이 어떻게 생겼는지 모릅니다. 입증 된 ulimit는 해당 쉘의 하위 프로세스 인 모든 프로세스에 영향을줍니다. 우리는 그것이 데몬으로 실행되는지 또는 더 복잡하게 만드는 많은 자식이 있는지조차 알지 못합니다. coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/…
ppetraki

1
거기에없는 더 사용자 친화적 인 프런트 엔드 ulimit를하고 대한 cgroup을은 ? Windows에서 OS가 RAM 부족에 가까워지면 경고 팝업으로 인해 시스템 정지를 피할 수있었습니다. 우분투에서 항상 메모리 사용을 주시해야합니까?
Dan Dascalescu

1
@DanDascalescu 스왑 파일이 구성된 경우 지연 시간이 길어 지지만 여전히 작동 할 수 있습니다. 스와핑이 시작되면 RAM 사용에 대한 시스템 모니터를 확인할 수 있습니다. 시스템에 실제로 메모리가 부족한 경우 메모리 부족 (OOM) 킬러가 호출되어 "badness"점수가 가장 높은 프로세스 (일반적으로 대부분의 메모리를 소비하는 프로세스)를 종료합니다.
Lekensteyn

12

Cgroup을 사용하면 프로세스별로 메모리 사용량을 제한 할 수 있습니다.

https://ko.wikipedia.org/wiki/Cgroups

http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt

과학 컴퓨팅은 메모리를 많이 사용하는 것으로 악명 높으며, cgroup에서 앱을 샌드 박싱하면 메모리 압력이 완화되므로 나머지 프로세스가 희생자가되어서는 안됩니다.

또는 앱은 물론 성능을 희생하면서 가상 머신에 위임 된 메모리 만 사용할 수 있기 때문에 VM을 일종의 하드 한계로 사용할 수 있습니다. 그러나 cgroup 설정 및 유지 관리와 비교할 때 VM을 시작하지 않은 상태로 훨씬 쉽게 구성 할 수 있습니다.

의사 결정 :) 행운을 빕니다!


1
ulimit 및 cgroup을위한 사용하기 쉬운 프런트 엔드가 없습니까? Windows에서 OS가 RAM 부족에 가까워지면 경고 팝업으로 인해 시스템 정지를 피할 수있었습니다. 우분투에서 항상 메모리 사용을 주시해야합니까?
Dan Dascalescu

아니. 또한 OS가 정지되어서는 안되며 별도의 문제입니다. 창 팝업은 시작하기에 반창고입니다. 많은 양의 메모리를 사용한다면 왜 조사해야합니까? 예를 들어, Sanboxing 기능이있는 최신 브라우저는 TAB 당 70-150M을 쉽게 소비 할 수 있습니다. 이를 끄거나 조정하면 최종 사용자가 정기적으로 사용하는 상당한 메모리를 확보 할 수 있습니다. 스케줄러는 공간을 절약하기 위해 거의 사용하지 않는 프로그램을 교체해야하지만, 필요한 것보다 많이 깨우면 수정해야하거나 기본 작업이 메모리 집약적 인 경우 (웹) 더 많은 램이 필요합니다.
ppetraki

8
나는 메모리를 소비하는 것을 알고 있습니다-크롬. 그러나 OS는 여전히 실행되는 응용 프로그램으로부터 안정성을 보호해야합니다.
Dan Dascalescu

1
사용자가 어디에서 왔는지 이해합니다. 그러나 요구하는 것은 일반 컴퓨팅 플랫폼을 어플라이언스로 전환하는 것을 의미합니다. 운영 체제 엔지니어가 이러한 보호 수단을 제공하기 위해 구현해야하는 가장 복잡한 (오류가 발생하기 쉬운) 방법이므로 전체 컴퓨터를 실행하는 방법에 대해 극도의 의견을 내야합니다. 이는 일반적으로 최종 사용자 유연성을 희생시킵니다. 태블릿 컴퓨팅에서 이에 대한 예를 볼 수 있습니다. 그러나 데스크톱에서는 유연성이 유지됩니다.
ppetraki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.