Linux 응답 성, 메모리 및 페이징을 길들이는 방법


27

overflow =) ... +100 현상금에 대한 첫 번째 질문. 지금까지 내가 정말로 염려했던 것을 생각할 수 없었습니다.

필자는 Linux 데스크톱 응답 상태 (예 : http://brainstorm.ubuntu.com/item/85/) 가 부족합니다. 사용 가능한 RAM이 적거나 디스크 처리량이 많은 상황에서는 시스템 속도가 느려집니다. 기어 ; 이것은 적절한 성능을 요구하는 응용 프로그램에는 절대적으로 끔찍합니다. 또한 UI가 완전히 응답하지 않습니다. 예를 들어 OS X와 ​​이것을 비교하십시오. 응용 프로그램이 리소스를 사용하고 있다면 항상 옵션을 클릭하여 강제 종료 할 수 있습니다. 반면 Linux에서는 바탕 화면을 alt-tab 또는 전환하거나 ctrl-alt-f1을 사용할 수도 없습니다. 터미널-잘 할 수 있습니다. 작업 당 1-2 분 정도 걸립니다.

나는 gkrellm을 사용하여 상황이 전개됨을 알 수 있습니다. 일반적으로 메모리 사용률이 상당히 높아지거나 디스크 처리량이 급격히 증가합니다.

2.6GHz 쿼드 코어와 4GB의 800MHz DDR2 RAM이있는 하드웨어는 나쁘지 않습니다 (6GB는 있었지만 하드웨어 비 호환성으로 인해 이전 세트와 혼합 및 일치 할 수 없었습니다). 이 문제는 필연적으로 더 많은 RAM을 확보하면 사라질 수 있지만 이것이 문제의 핵심이라고 생각하지 않습니다. 다른 디스크에 두 개의 스왑 파티션이 있습니다.

문제가 세 가지라고 생각합니다.

  • 방대한 양의 메모리를 소모하는 런 어웨이 프로그램-이러한 프로그램에 대한 법률은 반드시
    • (예 : Chrome의 탭, 각각 20-50MB, 일부는 수백 MB 사용 가능)
    • (예 : update-db 및 인덱서와 같은 다른 프로그램은 시스템이 실행될 때마다 크롤링 속도가 느려지기 때문에 cron에서 비활성화하고 제거해야했습니다.)
  • 디스크 처리량이 많은 상황에서 전체 시스템의 크롤링 속도가 느려질 수 있습니다 (중요한 프로그램을 페이징하여).
  • 커널은 메모리, 페이징, 프로세서 사용률과 같은 리소스 측면에서 UI 또는 중요한 프로그램의 우선 순위를 지정하지 않습니다.

공감대는 다음으로 이동합니다.

따라서 모든 그러한 프로그램이 사라질 솔루션을 찾고 있습니다. 특히, 프로세스와 비례하여 속도가 느려지는 반면 시스템과 기타 프로그램은 영향을받지 않고 수동으로 무언가를 죽일 수있을 정도로 오래 반응 할 수 있는 솔루션을 찾고 있습니다. 또한 창 관리자 프로세스 (및 UI 응답성에 영향을 줄 수있는 다른 것)는 모든 상황에서 응답해야합니다.

특히 나는 /etc/security/limits.conf( man limits.conf)에 흥미가 있지만 이것은 사용자별로 제어 할 수 있으며 파일의 주석이 달린 예제는 설명이나 시작 위치에서 다소 불투명 한 것처럼 보입니다. 나는 limits.conf작품이 있기를 바라고 있지만 그것이 효과가 없거나 내 문제에 대한 적절한 해결책이 아니거나 달성하려는 세분화 된 경우 놀라지 않을 것입니다. limits.conflimits.conf가 다시 작동한다고 가정하면 프로세스 별 이름 이 이상적입니다. 이 시점에서 모든 솔루션을 사용할 수는 있지만 사람들이 제공하는 limits.conf를 시도해보고 작동하는지 테스트 해 드리겠습니다.

좋은 UI 응답 성을 유지하기 위해 OS X이 관리하는 방법에 대한 통찰력을 얻는 것이 유용 할 수도 있습니다.

이미 /tmp캐시 폴더와 폴더를 설정하도록 조정 tmpfs했으며 일반적으로 디스크 사용률은 거의 0입니다.

모호한 관련 주제 :

  • 메모리 초과 커밋

내가 생각하지 않는 답변은 효과가 있습니다.

  • swapoff (이것은 여전히 ​​메모리 호그 프로그램이 살인으로 벗어날 수있게하고 메모리가 실제로 나쁜 경우 시스템이 영구적으로 정지되도록합니다. 스왑하기 전에 OOM 킬러를 먼저 호출하고 특정 프로그램을 대상으로하는 트윅을 제안 할 수있는 사람에게 공감합니다)
  • echo ?? > /sys/.../swappiness (눈에 띄는 효과 없음)
  • nice (작동 한 적이 없다)
  • ionice (차이를 발견 한 적이 없다)
  • selinux (프로그램 비 호환성이 악몽 인 것 같습니다)
  • 실시간 리눅스, 즉 커널을 중단시킬 수 있음
  • *

흠, 현상금을 배치 할 수없는 것 같습니다; 링크가 48 시간 동안 나타나지 않는 것 같아요? ... 글쎄 내가 그때 얻은 모든 평판과 현상금을 게시 할 것입니다
user76871

1
+1, 이것은 매일 Linux 데스크톱에서 가장 큰 문제입니다. 아마도 몇 주에 한 번씩 가끔 얼어 붙지 만, 특히 성가 시게하기에는 충분하지 않습니다. 그러나 많은 IO 활용률을 가진 응용 프로그램에서는 문제가있는 것 같습니다 . CPU 사용률이 높은 응용 프로그램은 일반적인 시스템 성능에 거의 영향을 미치지 않습니다. ionice에 대해 몰랐지만 제대로 작동한다면이 문제에 대한 올바른 해결책 일 것 같습니다.
crazy2be 2016 년

1
3 년이 지난 후에도 여전히 Linux에서 문제입니다. @ crazy2be 또는 user76871, 그 동안 해결책을 찾았다 고 생각하지 않습니까?
Glutanimate

@Glutanimate : 그렇습니다. 32GB의 실제 RAM과 그보다 더 적거나 (아마도 16GB ...하지만 그것은 추진하고 있습니다), 또한 많은 양의 비디오 RAM입니다. 이것은 높은 CPU 또는 인터럽트 또는 기타로 인한 비 응답을 수정하지는 않지만 메모리가 부족한 상황에서는 응답하지 않습니다.
user76871

답변:


6

시스템이 과도하게 교환되는 것처럼 들립니다. 를 사용하면 vmstat 1일부 세부 정보가 표시 될 수 있습니다. 터미널 창에서 실행하고 속도 저하가 발생하면 스위치를 켜십시오.

/ tmp와 "cache"를 tmpfs에 넣는 대신 noatime옵션 과 함께 마운트 된 일반 디스크 파일 시스템을 사용합니다 . 어쨌든 사용 된 데이터는 항상 캐시에 유지되며, 오래된 데이터는 디스크에 기록되어 응용 프로그램의 일부 RAM을 비울 수 있습니다. / tmp 및 / 또는 캐시가 커지면 크게 도움이 될 수 있습니다.


1
언급 +1 noatime.
LawrenceC

언급 주셔서 감사합니다 noatime불행히도 마운트 옵션을 사용하는 데 사용, 그리고 그것이 (이 디스크를 보장하기 위해 톤 과로하지 않는 데 도움이 있지만) 응답 성을 보장하기 위해 많은 도움을 생각하지 않는다; 현재 설정에서 noatime을 다시 활성화했는지 확인하십시오. noatime이 아닌 비 tmpfs를 갖는 것은 조금 이상한 것 같습니다. 왜냐하면 나는 여전히 대량의 쓰기가 발생해야한다고 상상하기 때문입니다.
user76871

+1, 시도 vmstat 1-스와핑이 실제로 주요 문제의 큰 부분이라는 클린 칭 진단에 매우 유용
user76871

2
아야. 그런 스와핑이 필요한 리눅스 시스템을 본 적이 없다. df -mtmpfs 파일 시스템에서 얼마나 많은 메모리가 사용되는지 확인 했습니까 ? 뭔가 되어 상대적으로 빠른 당신의 RAM을 먹고.
Turbo J

제안에 대해 감사하고 -m옵션 에 대해 가르쳐주십시오 . 불행히도 df -h -m내 메모리가 100MB에 불과하다는 것을 나타내는 것 tmpfs같으므로 tmpfs 및 캐시에 메모리를 사용하는 것과 관련이 있는지 의심 스럽습니다. 이것은 또한 드문 일이 아닙니다. RAM이 한계에 도달하면 여러 배포에서 발생했습니다.
user76871

5

나는 커널 개발자는 아니지만이 soooo를 여러 번 실행했기 때문에이 문제에 대해 철학적으로 수년을 보냈습니다. 나는 실제로 모든 상황에 대한 은유를 생각해 냈습니다. 나는 나의 이야기에서 "스왑"과 같은 것은 존재하지 않는다고 가정 할 것이다. 스왑은 요즘 어쨌든 32GB RAM에서는 의미가 없습니다.

파이프를 통해 각 건물에 물이 연결되어 있고 마을에서 수용 인원을 관리해야하는 이웃을 상상해보십시오. 초당 100 단위의 물만 생산한다고 가정합니다 (저장 탱크가 없기 때문에 사용되지 않은 모든 용량이 낭비됩니다). 각 집 (집 = 작은 앱, 터미널, 시계 위젯 등)에는 초당 1 단위의 물이 필요합니다. 인구가 90 명이므로 모두가 충분한 물을 섭취하기 때문에 이것은 모두 훌륭하고 좋습니다.

이제 시장 (= 귀하)은 큰 식당 (= 브라우저)을 열겠다고 결정합니다. 이 식당에는 여러 요리사가 있습니다 (= 브라우저 탭). 각 요리사는 초당 1 단위의 물이 필요합니다. 당신은 10 요리사로 시작하므로, 전체 지역의 총 물 소비량은 100 단위의 물로 여전히 좋습니다.

이제 재미있는 것들이 시작됩니다 : 당신은 분명히 당신이 가지고 있지 않은 총 물 요구량을 101로 만드는 다른 요리사를 식당에 고용합니다. 무언가를해야합니다.

물 관리 (= 커널)에는 3 가지 옵션이 있습니다.

1. 첫 번째 옵션은 최근에 물을 사용하지 않은 주택에 대한 서비스 연결을 끊는 것입니다. 괜찮지 만 연결이 끊긴 집에서 물을 다시 사용하려면 긴 등록 과정을 다시 거쳐야합니다. 관리는 여러 가정을 분리하여 더 많은 수자원을 확보 할 수 있습니다. 실제로, 그들은 최근에 물을 사용하지 않은 모든 주택을 분리하여 항상 무료로 사용할 수있는 양을 유지합니다.

당신의 도시는 계속 기능을 발휘하지만 단점은 진전이 멈춘다는 것입니다. 대부분의 시간은 용수 관리를 통해 서비스를 복원하는 데 소비됩니다.

이것이 커널이 파일 지원 페이지에서 수행하는 작업입니다. 크롬과 같은 큰 실행 파일을 실행하면 파일이 메모리에 복사됩니다. 메모리가 부족하거나 최근에 액세스하지 않은 부품이있는 경우 커널은 해당 부품을 디스크에서 다시로드 할 수 있기 때문에 해당 부품을 제거 할 수 있습니다. 이 작업을 너무 많이 수행하면 모든 것이 디스크 IO를 기다리고 있기 때문에 데스크탑이 정지됩니다. 커널은 많은 IO를 시작할 때 가장 최근에 사용 된 페이지를 많이 삭제합니다. DVD 이미지와 같은 큰 파일을 여러 개 복사 한 후 백그라운드 앱으로 전환하는 데 시간이 오래 걸리는 이유입니다.

내가 hickups를 싫어하고 당신은 그것을 제어 할 수 없기 때문에 이것은 나를 위해 가장 성가신 행동입니다. 스위치를 끄는 것이 좋을 것입니다. 나는 라인을 따라 뭔가를 생각하고 있습니다

sed -i 's/may_unmap = 1/may_unmap = (vm_swappiness >= 0)/' mm/vmscan.c

그런 다음 vm_swappiness를 -1로 설정하여이를 비활성화 할 수 있습니다. 이것은 내 작은 테스트에서 꽤 잘 작동했지만 아아 나는 커널 개발자가 아니므로 누구에게도 보내지 않았습니다 (그리고 분명히 위의 작은 수정은 완료되지 않았습니다).

2.경영진은 새로운 요리사의 물 요청을 거부 할 수 있습니다. 처음에는 좋은 생각처럼 들립니다. 그러나 두 가지 단점이 있습니다. 첫째, 물을 사용하지 않더라도 많은 물을 신청하는 회사가 있습니다. 이를 수행 할 수있는 한 가지 이유는 추가 물이 필요할 때마다 물 관리와 대화하는 모든 오버 헤드를 피하기 위해서입니다. 하루 중 시간에 따라 물 사용량이 증가하거나 감소합니다. 예를 들어 식당의 경우 정오에 자정에 비해 훨씬 더 많은 물이 필요합니다. 그래서 그들은 가능한 모든 물을 요구하지만 자정 동안 물 할당을 낭비합니다. 문제는 모든 회사가 최대 사용량을 정확하게 예측할 수 없기 때문에 더 많은 요청에 대해 걱정할 필요가 없기 때문에 훨씬 더 많이 요청한다는 것입니다.

이것은 자바의 가상 머신이하는 일이다 : 시작시에 많은 메모리를 할당하고 그로부터 작동한다. 기본적으로 커널은 Java 앱이 실제로 사용하기 시작할 때만 메모리를 할당합니다. 그러나 오버 커밋을 비활성화하면 커널이 예약을 심각하게 받아들입니다. 실제로 자원이있는 경우에만 할당이 성공할 수 있습니다.

그러나이 방법에는 다른 심각한 문제가 있습니다. 한 회사가 10 단계가 아닌 매일 물 한 단위를 요청하기 시작한다고 가정 해 봅시다. 결국 0 개의 프리 유닛이있는 상태가됩니다. 이제이 회사는 더 많은 것을 할당 할 수 없습니다. 어쨌든 대기업에 관심이있는 사람은 괜찮습니다. 그러나 문제는 작은 집에서도 더 많은 물을 요청할 수 없다는 것입니다! 관광객의 갑작스런 유입을 처리하기 위해 작은 공중 화장실을 만들 수는 없습니다. 근처 숲에서 화재를위한 비상 용수를 제공 할 수 없습니다.

컴퓨터 용어로 : 초과 커밋없이 메모리가 부족한 상황에서는 새로운 xterm을 열 수 없으며 컴퓨터로 ssh 할 수 없으며 새로운 탭을 열어 검색 할 수 없습니다 수정. 다시 말해 오버 커밋을 비활성화하면 메모리가 부족할 때 데스크톱을 사용할 수 없게됩니다.

3. 이제 회사가 너무 많은 물을 사용하기 시작할 때 문제를 처리하는 흥미로운 방법이 있습니다. 수자원 관리가 폭발합니다! 말 그대로 : 식당 사이트로 이동하여 다이너마이트를 던져 폭발 할 때까지 기다립니다. 이것은 새로운 사람들이 들어올 수 있고 공공 화장실 등을 만들 수 있도록 도시의 물 요구량을 즉시 줄입니다. 시장으로서 당신은 이번에는 물이 덜 필요하다는 희망에 따라 식당을 재건 할 수 있습니다. 예를 들어, 사람들이 이미 너무 많으면 사람들이 식당에 가지 말라고 지시합니다 (예 : 브라우저 탭이 적게 열립니다).

이것은 실제로 모든 옵션이 부족할 때 커널이하는 일이며 메모리가 필요합니다. OOM 킬러라고합니다. 많은 휴리스틱을 기반으로 한 큰 응용 프로그램을 선택하고 종료하여 많은 메모리를 확보하지만 반응 형 데스크톱을 유지 관리합니다. 실제로 안드로이드 커널은 훨씬 더 적극적 으로이 작업을 수행합니다. 메모리가 부족할 때 가장 최근에 사용한 앱을 종료합니다 (마지막 수단으로 만 사용하는 주식 커널과 비교). 이것을 안드로이드에서는 바이킹 킬러라고합니다.

나는 이것이 문제에 대한 가장 간단한 해결책 중 하나라고 생각합니다. 이보다 더 많은 옵션을 가지고 있지 않기 때문에 나중에 빨리 극복하지 않겠습니까? 문제는 커널이 때때로 OOM 킬러 호출을 피하기 위해 많은 작업을 수행한다는 것입니다. 그렇기 때문에 데스크탑이 매우 느리고 커널이 아무 것도하지 않는 것을 볼 수 있습니다. 그러나 다행히도 OOM 킬러를 직접 호출 할 수있는 옵션이 있습니다! 먼저 매직 sysrq 키가 활성화되어 있는지 확인한 echo 1 | sudo tee /proc/sys/kernel/sysrq다음 (예 :) 커널 메모리가 부족할 때마다 Alt + SysRQ, Alt + f를 누르십시오.

좋아, 모두 훌륭하지만 시도해보고 싶습니까? 메모리 부족 상황은 재현하기가 매우 쉽습니다. 나는 그것을 위해 매우 간단한 응용 프로그램이 있습니다. 두 번 실행해야합니다. 첫 번째 실행은 사용 가능한 RAM의 양을 결정하고 두 번째 실행은 메모리 부족 상황을 만듭니다. 이 방법은 스왑이 비활성화 된 것으로 가정합니다 (예 :) sudo swapoff -a. 코드 및 사용법은 다음과 같습니다.

// gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(int argc, char** argv)
{
    int limit = 123456789;
    if (argc >= 2) {
        limit = atoi(argv[1]);
    }
    setbuf(stdout, NULL);
    for (int i = 1; i <= limit; i++) {
        memset(malloc(1 << 20), 1, 1 << 20);
        printf("\rAllocated %5d MiB.", i);
    }
    sleep(10000);
    return 0;
}

사용 방법은 다음과 같습니다.

$ gcc -std=c99 -Wall -Wextra -Werror -g -o eatmem eatmem.c
$ ./eatmem
Allocated 31118 MiB.Killed
$ ./eatmem 31110
Allocated 31110 MiB.Killed

첫 번째 호출에서 31,118 MiB의 사용 가능한 RAM이 있음을 발견했습니다. 따라서 응용 프로그램에 31,110 MiB RAM을 할당하여 커널이 죽이지 않고 거의 모든 메모리를 소비하도록했습니다. 내 시스템이 멈췄습니다. 마우스 포인터조차도 움직이지 않았습니다. Alt + SysRQ, Alt + f를 눌렀을 때 eatmem 프로세스가 종료되고 시스템이 복원되었습니다.

메모리가 부족한 상황에서 수행하는 옵션을 다루었지만 가장 위험한 방법은 다른 위험한 상황과 마찬가지로 처음에는 피하는 것입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 내가 본 한 가지 일반적인 방법은 브라우저와 같은 오작동하는 응용 프로그램을 나머지 시스템과 다른 컨테이너에 넣는 것입니다. 이 경우 브라우저는 데스크탑에 영향을 줄 수 없습니다. 그러나 예방 자체는 질문의 범위를 벗어나므로 그것에 대해 쓰지 않을 것입니다.

TL; DR : 현재 페이징을 완전히 피할 수있는 방법은 없지만 오버 커밋을 비활성화하여 전체 시스템 정지를 완화 할 수 있습니다. 그러나 메모리 부족 상황에서는 시스템을 계속 사용할 수 없지만 다른 방식으로 사용할 수는 없습니다. 위와 상관없이 메모리가 부족한 상황에서는 Alt + SysRQ, Alt + f를 눌러 커널이 선택한 많은 프로세스를 종료하십시오. 몇 초 후에 시스템이 응답 성을 복원해야합니다. 이것은 매직 sysrq 키가 활성화되어 있다고 가정합니다 (기본적으로는 아님).


나는 당신 에게이 자원에 대한 현상금으로 모든 평판을 줬기 때문에 의견을 남기지도 못했습니다. :) 마지막으로, 나는이 위대한 대답에 감사하다는 말을 얻었습니다! 랩톱을 8GB로 사용할 때 마다이 문제를 해결하고있었습니다 (미쳤지 만 그 당시 시스템은 정기적으로 메모리가 부족했습니다). 최근에 github.com/rfjakob/earlyoom 프로젝트를 발견했습니다.이 프로세스는 너무 늦기 전에 일부 프로세스를 종료하여 시스템이 중단되는 것을 방지하는 데 도움이 될 수 있습니다.
블라드 프롤로 프

4

모든 임시 및 캐시 파일을 a에 넣으면 사용 tmpfs가능한 RAM의 양이 줄어들 기 때문에 시스템이 필요하지 않은 것보다 시스템이 더 빨리 스왑되도록 할 수 있습니다.

어떤 종류의 커널 기능이나 과부하되는 드라이버에 의존하는 일부 응용 프로그램이있는 것처럼 들립니다. 브라우저 및 인덱서를 사용하는 것 이외의 응용 프로그램 유형과 인덱서를 비활성화 한 것에 대해서는 너무 자세하게 설명하지 않습니다.

LXDE 또는 IceWM과 같이 적은 리소스를 사용하는 데스크탑 환경 또는 창 관리자로 전환 해보십시오. 직장에서 나는 최소한의 데스크탑 환경을 위해 LXDE가 설치된 Linux 시스템과 ROX-Filer를 사용합니다. 이 Linux 시스템의 목적은 Windows XP와 Windows 7을 동시에 실행할 수 있도록 VMWare Player를 실행하는 것입니다. 그것은 당신이 말하는 것과 비슷한 하드웨어 사양이며 하드웨어를 통과시키는이 무거운로드에서 너무 많은 응답 성 문제가 없습니다. Linux 자체에 대한 응답 성 문제 가 없습니다 (일반적으로 VM을 2 초간 기다리게하고 2 개의 VM과 1 개의 OS 사이에 1 개의 디스크를 공유하는 VM 임) 항상 VM을 일시 중지하거나 종료 할 수있었습니다. 하고 싶다

나에게 그것은 당신이 실행중인 특정 응용 프로그램의 일부 문제를 지적합니다.

디스크 드라이브에 DMA가 활성화되어 있습니까? (사용 hdparm)이 많은 DMA의 이익의 무효화는 CPU를 통과하는 모든 디스크 트래픽을 필요로 풀 디스크 암호화를 사용하는 경우. 그 결과 디스크 트래픽이 많으면 CPU가 급증하여 전체 시스템 속도가 느려집니다. (편집 : 명확히하기 위해, DMA를 비활성화하거나 사용 dm-crypt하면 디스크 트래픽이 많을 때 높은 CPU가 발생합니다)


2
문제의 핵심은 WM이 부풀어 오르고 시스템이 느려지 게 만드는 것이 아니라 (정상적인 사용 환경에서는 완벽하게 반응 할 가능성이 있음) 커널이 메모리 부족시 응용 프로그램의 우선 순위를 올바르게 지정하지 못하고 들어가야한다는 것입니다. 심한 교환. 필자가 사용한 모든 데스크탑 Linux 에서이 문제가 발생했으며 더 가벼운 프로그램을 사용하거나 램을 추가하면 도움이 될 수 있지만 문제의 근본 원인은 해결되지 않습니다.
crazy2be

이전 게시물에서 다음과 같이 말했습니다. "일부 커널 기능이나 과부하 된 드라이버에 의존하는 응용 프로그램이있는 것 같습니다." 병목 현상은 특정 커널 모듈에 있습니다. 커널 전문가는 아니지만 커널 쪽, 특히 모듈 쪽의 메모리 할당이 사용자 영역과 다르게 작동한다고 확신합니다. 커널 쪽의 CPU 사용률도 다르게 처리 될 수 있습니다 (커널 프로세스를 "좋은"지 여부는 알 수 없음) 관련된 특정 응용 프로그램을 모른 채 더 이상 언급 할 수 없습니다.
LawrenceC

또한 FUSE NTFS를 사용하는 경우 속도가 느려질 수 있습니다.
LawrenceC

1
tmpfs와 같은 RAM 기반 파일 시스템 (명확하게)으로 인해 RAM이 더 빨리 소모되고 경량 WM이 근본적인 문제의 증상을 약간 줄일 수 있음을 알고 있습니다. 디스크에 대한 쓰기 반응이 좋지 않아 tmpfs를 사용해야한다는 압박감을 느꼈습니다. 그럼에도 불구하고 귀하의 제안, 특히 DMA에 관한 부분에 대해 감사드립니다. 관련 주제 목록에 추가했습니다. 레코드의 경우 DMA가 활성화되어 있고 암호화 파일 시스템을 사용하지 않는다고 생각합니다.
user76871

1

이것은 Linux 스케줄러의 일반적인 문제입니다. IO가 많은 활동이 발생할 때마다 시스템이 크롤링 속도를 늦 춥니 다. 커널 해킹에 빠지지 않는 한 상황을 개선하기 위해 실제로 할 수있는 일은 많지 않습니다. :)

아마도 이것들이 도움이 될 수 있습니다.

http://www.phoronix.com/scan.php?page=article&item=linux_2637_video&num=1

http://www.osnews.com/story/24223/Alternative_to_the_200_Lines_Kernel_Patch_that_Does_Wonders_


1
내가 기억 하듯이, 커널 패치는 프로그램을 컴파일하거나 터미널에서 CPU (및 IO?)가 많은 다른 작업을 수행 하면서 GUI 응용 프로그램과 상호 작용하려고 할 때만 관련이 있습니다 . 한 GUI 응용 프로그램이 많은 작업을 수행하고 불행히도 다른 GUI 응용 프로그램을 사용하려고하는 일반적인 상황에서는 도움이되지 않습니다.
crazy2be 2016 년

0

이 질문은 2 년이 넘었고 @ypsu의 대답은 훌륭하지만, RAM 부족으로 인해 Linux 기반 시스템의 상황이 여전히 나 빠지고 있습니다.

문제에 대한 나의 견해는 다음과 같습니다. 스왑이 전혀 없어도 시스템의 메모리가 부족하면 하드 드라이브 표시등이 100 % 디스크로드로 켜집니다. 이 사실을 감안할 때, 근본 원인은 커널이 디스크에서 복원 할 수있는 것, 가장 확실하게 공유 라이브러리를 언로드하여 메모리를 확보하려고 시도하는 것 같습니다. GUI 응용 프로그램에는 일반적으로 많은 공유 라이브러리가 있으므로 시스템에서 일부를 언로드하는 것으로 충분하다고 생각할 수 있지만 언로드 된 라이브러리를 다시 필요로하는 다음 사용자 공간 작업까지만 작동합니다. 이것은 공유 라이브러리를 언로드하고 다시로드하는 무한 루프를 일으키는 가장 가능성이 높은 시나리오 인 것 같습니다.

너무 늦기 전에 가장 많은 메모리 부족 프로세스를 종료하는 사용자 공간 데몬으로 작동하는 프로젝트가 있습니다 : https://github.com/rfjakob/earlyoom

또한 메모리가 부족한 응용 프로그램 (예 : Chrome)에 대해 메모리 제한이있는 Docker 컨테이너를 사용했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.