"가장 큰 프로세스 종료" 버튼

"가장 큰 프로세스 종료" 버튼

이 노트북에는 SSD가 있어서 교체는 생략하기로 했습니다. 이는 대부분의 경우 잘 작동하지만 때로는 RAM이 약간 부족해지고 컴퓨터가 매우 느려지고 정지되는 경향이 있습니다. 충분히 빠르게 정지되는 경우 커널로 직접 이동할 수 있는 "최대 프로세스 종료" 버튼을 구현하는 방법이 있습니까? 또는 컴퓨터이기 때문에 정지를 시작하고 최대 프로세스를 촬영할 때 자체 휴리스틱도 작동합니다.

답변1

귀하의 의견에 따르면 시스템이 바뀌는 것 같습니다.

Linux에는 시스템이 메모리를 과도하게 사용하여 이제 소진될 때 호출되는 OOM 킬러가 있습니다.
Linux는 기본적으로 메모리 오버커밋을 수행합니다. 이는 기본적으로 시스템이 실제로 가지고 있는 것보다 더 많은 메모리를 프로그램에 제공한다는 의미입니다. 이는 프로그램이 요청한 모든 메모리를 실제로 사용하지 않는다는 가정하에 수행됩니다. 그러나 시스템의 메모리가 부족하면 실행 중인 다양한 프로세스에 메모리가 있음을 알려주므로 더 이상 이를 거부할 수 없습니다. 대신에 OOM 킬러를 호출합니다. OOM 킬러는 기본적으로 커널이 메모리 부족 상태를 완화할 수 있다고 생각하는 프로세스를 찾습니다. 일반적으로 이는 가장 많은 메모리를 사용하는 프로세스이지만 실제로 알고리즘은 그보다 훨씬 더 복잡합니다.

overcommit_memory(자동 모드) 로 설정되어 있으므로 0커널이 메모리 오버커밋을 수행하고 있습니다. 설명하신 동작으로 볼 때 시스템이 많은 스와핑을 수행하는 것처럼 들립니다.

여기에서 2가지 옵션이 있습니다.

스왑을 줄이다

시스템에 메모리가 부족하여 커널이 항목을 스왑으로 밀어 넣기 시작합니다. 시스템에 스왑 공간이 부족하면 OOM 킬러가 호출됩니다. 그러나 여유 ​​스왑 공간이 남아 있으므로 이런 일은 발생하지 않습니다.

초기 생각은 프로세스를 수동으로 종료하는 것입니다.

시스템이 너무 많이 교체되고 있어 일부 프로세스를 종료해야 한다고 생각되면 프로세스를 수동으로 종료할 수 있습니다. 이는 커널 SysRq 트리거를 통해 수행할 수 있습니다.

커널에는 "마법의 SysRq"라는 기능이 있습니다. 이는 커널에게 긴급 작업을 수행하라고 지시하는 함수입니다. 이는 "모든 볼륨을 읽기 전용으로 다시 마운트", "모든 파일 시스템 동기화" 또는 "지금 다시 시작"과 같은 것일 수 있습니다. 이러한 옵션 중 하나는 OOM 킬러를 호출하는 것입니다.

커널에 매직 SysRq(커널 옵션 CONFIG_MAGIC_SYSRQ)가 활성화되어 있는 경우 두 가지 방법으로 이를 수행할 수 있습니다.

  1. Alt+ SysRq+ f
    키보드에서 이 3개의 키를 누르기만 하면 됩니다.
  2. echo f > /proc/sysrq-trigger
    이는 키보드 방법과 정확히 동일한 작업을 수행하지만 프로그래밍 방식으로 수행됩니다.

또한 스왑을 완전히 비활성화할 수도 있습니다. 이는 바로 이러한 이유로 대부분의 시스템에서 수행하는 작업입니다. 스왑의 장점은 커널이 사용되지 않는 데이터를 먼저 스왑하여 캐싱에 더 많은 메모리를 사용할 수 있다는 것입니다. 그러나 이로 인해 강제 스왑 문제가 발생합니다.

개인적으로 가장 좋은 해결책은 스왑을 강제할 때 OOM Killer를 호출하는 일종의 커널 옵션이라고 생각합니다. 기본적으로 선점형 스왑이 작동하도록 하되 RAM이 부족하여 커널이 스왑할 항목을 강제로 이동해야 하는 경우 OOM 킬러를 호출합니다.
아쉽게도 이건 내 개인적인 바램일 뿐이다. 그렇게 하지 않습니다.

관련 정보