kswapd0는 CPU를 많이 사용합니다


43

kswapd0은 CPU에서 99.9 %를 차지하고 있습니다. 게임에서 문제가 발생하고 6 분 후에 처음으로 사라 졌을 때 현재 약 20 분 동안 문제가 발생했습니다. 이 문제는 어떻게 해결되며 무엇이 원인입니까?


이것은 우분투 14.04에서도 나와 함께 발생합니다.
eri0o

이것은 18.04 동안 나에게도 일어나고 있습니다. 자세한 내용은 여기 : askubuntu.com/questions/1118932/…
Yuvraj Jaiswal

답변:


45

kswapd0 프로세스는 가상 메모리를 관리하는 프로세스입니다. 귀하의 기계 한다 RAM, SWAP, 그리고 HDD / SSD에 EXT4 있습니다. ext4는 모든 것이 저장되는 위치이며 RAM보다 액세스 속도가 항상 느립니다. RAM은 프로그램이 정보에 빠르게 액세스 할 수있는 반쯤 실행되는 공간과 같습니다. 대부분의 컴퓨터에는 최소 4GB의 RAM이 있으며 정상적인 조건에서는 충분합니다. 그러나 게임을 할 때 RAM 공간이 부족하여 SWAP이 시작될 수 있습니다.

SWAP는 EXT4 옆의 HDD / SSD에있는 가짜 RAM입니다. EXT4보다 빠르게 액세스 할 수 있지만 실제 RAM보다 훨씬 느립니다. 메모리가 부족한 경우 kswapd0은 사용하지 않거나 사용하지 않는 프로그램을 다른 프로그램만큼 SWAP으로 이동하여 해당 프로세스에 심각한 지연을 발생시킵니다. 게임에 5GB RAM이 필요한 경우 LEAST의 1GB가 SWAP에 있습니다. 즉, 해당 정보에 액세스하려고하면 정보를 얻기 위해 더 오래 기다려야합니다.

이 전체 프로세스는 극단적 인 CPU 사용으로 인해 SWAP 및 RAM으로 정보를 이동하고 동시에 정보 요청을 처리합니다. 이 문제를 해결하는 방법?

  1. RAM이 완전히 부족한 경우 kswapd0에게 SWAP으로 만 이동하도록 지시하십시오. 이것은 SWAP 문제를 해결하는 가장 효과적인 단일 방법입니다. 운영

    echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf

    SWAP를 사용해야 0하는 비율이 어디에서 남았 100는가 (0 % RAM이 남아 있으면 SWAP가 데이터를 가져 오기 시작 함) gedit 또는 nano 등을 사용하여 매번이 명령을 끝에 추가하는 대신 원하는대로 /etc/sysctl.conf를 편집 할 수도 있습니다.이 파일은 루트 소유입니다. 재부팅하면 설정됩니다!

  2. 높은 메모리 프로그램을 실행하는 동안 다른 프로세스에 의한 RAM 소비를 줄이거 나 다른 프로그램을 닫으십시오. 그렇기 때문에 대부분의 게임에서 재생하기 전에 다른 모든 창을 닫으라고 지시하거나 설치가 동일하게 수행됩니다. 파일 동기화 서비스와 같은 것은 많은 메모리를 사용하는 경향이 있습니다.
  3. 더 많은 RAM을 구매하십시오. RAM 설치는 소리만큼 어렵지 않습니다. 작은 수납 공간 (노트북에있는 경우)에있는 하나 또는 두 개의 나사와 간단한 클릭. 올바른 종류를 구입하고 있는지 확인하십시오!
  4. RAM에서와 마찬가지로 CPU 프로세스가 줄어 듭니다. 이렇게하면 RAM에서 SWAP 버스트가 훨씬 매끄럽게 진행됩니다.

그것이 당신이 할 수있는 최선입니다. 다른 사람들은 스왑을 완전히 비활성화 할 수 있다고 말하지만 위험하므로 권장하지 않습니다. 메모리 누수가 있거나 너무 많은 응용 프로그램이 실행중인 경우 전체 시스템이 정지 될 수 있습니다. SWAP이 RAM에 대한 안전 장치라는 것을 알고 계십시오. RAM만큼 빠르거나 효율적이지는 않지만 Window 's Pagefile보다 낫습니다! (같은 목적을 달성)

편집 : SWAP에 대한 자세한 내용은 여기를 참조 하십시오 .


더 이상 문제를 해결 한 것이 무엇인지 정확하게 기억할 수는 없지만 많은 것을 설명하는 잘 쓰여진 답변에 감사드립니다.
카스파

1
참고로 "sudo tee -a"에 파이프가 있으며 루트로 로그인하지 않은 경우 추가 리디렉션을 사용하지 않습니다. 예 echo vm.swappiness=0 | sudo tee -a /etc/sysctl.conf. 이 응답으로 작성된 sudo 명령은 대부분의 사용자에게 작동하지 않습니다.
JDS

귀하의 답변에 따르면, 스왑이 덜 사용되도록 일부 프로세스를 종료합니다. 이제 프로세스 kwapd0가 사라졌습니다. 감사.
mtoloo

27

kswapd0은 한 CPU의 99.9 %에서 실행되지만 실제로는 전혀 교환되지 않습니다

나에게 그것은 때때로 VMware vm에서 실행되는 커널 3.19.0-50-generic (및 이전)이있는 Ubuntu 14.04에서 발생합니다. 나는 단서가 없으며 무엇이 나타나게 되었습니까?

top 보여줍니다 :

# top
top - 09:49:35 up 5 days, 18:35,  1 user,  load average: 1.00, 1.00, 0.99
Tasks: 219 total,   2 running, 217 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 25.0 sy,  0.0 ni, 74.7 id,  0.2 wa,  0.0 hi,  0.1 si,  0.0 st
KiB Mem:   3028784 total,  1874468 used,  1154316 free,  1010276 buffers
KiB Swap: 15624188 total,     3032 used, 15621156 free.   234928 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    52 root      20   0       0      0      0 R  99.7  0.0 122:15.21 kswapd0
     3 root      20   0       0      0      0 S   0.3  0.0   0:29.86 ksoftirqd/0
     7 root      20   0       0      0      0 S   0.3  0.0   9:49.47 rcu_sched

임시 솔루션

재부팅으로 문제가 일시적으로 해결되었습니다.

내 시스템의 동일한 설정이있는 serverfault (kswapd는 종종 100 % CPU를 사용 합니다)에 대한 답변을 따릅니다 .

# cat /proc/sys/vm/swappiness
60
# cat /proc/sys/vm/vfs_cache_pressure
100
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

해결책은 실제로 # echo 1 > /proc/sys/vm/drop_caches다음과 같습니다.

# cat /proc/sys/vm/drop_caches
0
# echo 1 > /proc/sys/vm/drop_caches
# cat /proc/sys/vm/drop_caches
1

이제 괜찮습니다.

# top
top - 10:08:58 up 5 days, 18:55,  1 user,  load average: 0.72, 0.95, 0.98
Tasks: 220 total,   1 running, 219 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.2 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   3028784 total,   681704 used,  2347080 free,     2916 buffers
KiB Swap: 15624188 total,     3032 used, 15621156 free.    81924 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     9 root      20   0       0      0      0 S   0.3  0.0  14:10.40 rcuos/0
     1 root      20   0   45652   8124   2888 S   0.0  0.3   1:54.98 init

영구 솔루션 (발견 예정)?

그러나 실제 이유는 아직 알려지지 않았기 때문에 그물에 대한 적절한 설명을하지 않았으므로 이것은 영원한 해결책이 아닙니다. 실제로 선택된 답변 은 영구적 인 해결책이 될 수 있습니다. 재부팅 (sysctl을 적용하기 위해)이 항상 가능한 것은 아니기 때문에 나중에 참조 할 수 있도록 이것을 추가하고 싶었습니다.

또 다른 해결책은 THP를 madvice또는 로 설정하는 것입니다 never( 그의 대답에 대한 poige의 의견 , "/ sys / kernel / mm / transparent_hugepage / enabled"THP (Transparent Huge Pages 비활성화) 에 대한 MongoDB 매뉴얼 참조 방법 참조 )

크론 직업

"영구적 인"솔루션으로 cron 작업으로 다음 배치를 설정했습니다.

#!/bin/bash


## run as cron, thus no $PATH, thus need to define all absolute paths
top=/usr/bin/top
grep=/bin/grep


top=$($top -bn1 -o \%CPU -u0 | $grep -m2 -E "%CPU|kswapd0")

IFS='
'
set -f

i=0

for line in $top
do
        #echo $i $line

        if ! (( i++ ))
        then
                pos=${line%%%CPU*}
                pos=${#pos}
                #echo $pos
        else
                cpu=${line:(($pos-1)):3}
                cpu=${cpu// /}
                #echo $cpu
        fi

done

[[ -n $cpu ]] && \
(( $cpu >= 90 )) \
&& echo 1 > /proc/sys/vm/drop_caches \
&& echo "$$ $0: cache dropped (kswapd0 %CPU=$cpu)" >&2 \
&& exit 1

exit 0

호출

# m h  dom mon dow   command
  * *  *   *   *     /bin/bash /path/to/batch/drop_caches.sh >> /var/log/syslog 2>&1


아주 좋은 답변입니다. 감사합니다. RPi 커널이 업데이트되었으며 이것이 kswap을 촉구하는 것입니다.
Paul B

감사합니다, @PaulB. 내 시스템에서 영구적 인 솔루션으로 사용하는 크론 작업에 대한 답변을 추가했습니다.
Martin Rüegg

@Veger 에서 올바르게 지적했듯이 16.04에서도 작동합니다. 나는 현재 자신을 사용하고 있습니다. 태그를 추가했습니다. 감사!
Martin Rüegg

다시 감사합니다, @Veger ! -스크립트의 Sha-Bang에서 누락 된 느낌표가 수정되었습니다.
Martin Rüegg

1
"echo 1> / proc / sys / vm / drop_caches"는 낮과 밤의 차이로 인해 높은 CPU 사용량을 수정했습니다! kswapd0은 100 % CPU에서 0 %로 변경되었습니다. 이유와 영구적 인 해결책에 대한 설명이 좋습니다. (사이드 참고 :. 나는 16 기가 바이트 (MEM) 16 기가 바이트 스왑과 4.8.0-36-일반적인 리눅스 커널을 실행 해요)
josephdpurcell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.