시스템 메모리가 부족하더라도 우분투 동결 방지 가능한 모든 메모리를 먹은 다음 필요하지 않은

때로는 처리를 위해 메모리에 유지하려는 거대한 데이터 덤프로 작업합니다. 때로는 프로그램에서 생성하는 메모리 양을 잘못 계산하거나 디버거가 사용 가능한 메모리를 초과하는 계수로 메모리 사용량을 곱합니다.

메모리가 부족한 프로세스를 시작할 때마다 이것은 정상적인 운영 체제에서 기대하는 것입니다. 사용 가능한 모든 메모리를 먹은 다음 필요하지 않은 메모리를 포기하도록 다른 비 필수 프로세스를 멋지게 요청하십시오. 스왑 쓰기.

우분투가 나를 위해하는 일은 다음과 같습니다. 모든 fre 메모리를 먹은 다음 운영 체제에 모든 필수 서비스 (그놈 세션, 터미널, 키보드)를 교환하도록 요청한 다음 전원 플러그를 뽑을 때까지 기다립니다.

두 가지 질문 :

  1. 운영 체제는 어떻게 사용자 입력을 듣지 않아도되는 것이 중요 할 수 있다고 가정 할 수 있습니까?
  2. 어리석은 프로세스가 시스템이 제공하는 것보다 더 많은 리소스를 소비하려고하더라도 우분투에게 필수 서비스를 교환하지 않고 항상 사용자 입력에 반응하도록 지시 할 수있는 방법은 무엇입니까?


답변

여전히 문제에 대한 해결책이 없지만 다른 사람들에게 관심이있을 수있는 두 가지 해결 방법을 제공 할 수 있습니다.

1) 조기

즉 소비하는 특정 임계 값에 도달 할 때 가장 메모리 (또한 참조하는 프로세스 메모리 사용량을 감시하고 죽이는 서비스의 리눅스 커널의 OOM 킬러에 관한 질문)

작은 청크로 메모리를 무기한으로 요청하는 데모 프로세스로 테스트했습니다. 첫 인상은 다음과 같습니다. 불량 프로세스를 시작하면 모든 RAM이 빠르게 소모됩니다. 그런 다음 스와핑이 시작되고 시스템이 응답하지 않게됩니다. 몇 초 후에 시스템이 다시 온라인 상태가됩니다. earlyoom 로그는 메모리와 스왑 사용량이 모두 90 %에 도달 한 후 메모리 사용 프로세스를 종료했음을 나타냅니다.

스와핑이 시작되고 프로세스가 종료 된 후에도 여전히 성가신 지연이 발생하지만 다른 프로세스의 일부는 요청 될 때까지 스왑 상태를 유지하지만 시작입니다.

2) 스왑을 비활성화하십시오.

나는 이것이 논란여지 가있는 주제 라는 것을 알고 있지만 프로세스가 모든 메모리를 소모하려고 시도하는 때때로 발생할 수있는 데스크탑 시스템 및 특히 개발 시스템의 목적을 위해 의미가 있습니다. 스왑이 없으면 OOM 킬러가 작동합니다. 의도 한대로. 메모리가 부족하면 가장 적합한 프로세스를 찾아서 제거합니다. 지연이없고 지연이 없습니다.

현재 세션에 대한 스왑을 비활성화 sudo swapoff -a하거나 변경 내용을 영구적으로 만들 수 있습니다 .


문제에 대한 올바른 해결책은 메인 메모리가 고갈되면 시스템이 응답을 유지하고 내일이 없을 때처럼 메모리를 교체하기 시작하지만 곧 일어나지 않는 것입니다.


답변

다음 두 가지 중 하나를 시도하십시오.

1) swappiness 설정을 기본 설정 60에서 10으로 변경하십시오. , vm.swappiness = 10 을 /etc/sysctl.conf에 추가하고 (터미널에 sudo gedit /etc/sysctl.conf), 시스템을 재부팅하십시오. 이에 대한 자세한 내용은 스왑 피네스를 검색하십시오.

2) swappiness가 도움이되지 않는 경우 … 원하지는 않지만 …. 스왑 파일의 크기를 1.5x16G로 늘리고 도움이되는지 확인하십시오.

계속 알려주세요. 건배, 알


답변

비슷한 문제를 해결했습니다. 내 경험이 당신에게 적합한 지 모르겠습니다 …

최근에는 USB에서 부팅하는 루프백 LVM 장치에 Linux를 설치하는 방법에 대한 가이드를 발표했습니다 (따라서 내부 디스크에 grub을 설치하지 않고 원본으로 남겨 두십시오). 다음은 가이드입니다 : https://github.com/DareDevil73/linux-on-loopback-usb .

그런 다음 높은 메모리로드로 인해 동결 문제가 발생하여 스왑 공간 사용량이 비정상적으로 나타났습니다 (모든 RAM이 소모되었으며 스왑 사용량이 거의 0에 가깝습니다). 분명히 LVM 스왑 파티션이 마운트되어 제대로 작동하지만 커널이 왜 예상대로 커널을 사용하지 않았는지 알 수 없습니다.

대체 솔루션을 시도했습니다. 스왑 루프백 파일 (LVM 아님)을 만들었고 정지가 사라졌습니다. 이제 스왑 파일이 그대로 사용되며 OS가 멈추지 않습니다!

자세한 정보 는 https://github.com/DareDevil73/linux-on-loopback-usb#known-issues참조 하십시오.


답변