kswapd 프로세스가 모든 CPU를 소비하기 시작하면 컴퓨터가 잠깁니다.

kswapd 프로세스가 모든 CPU를 소비하기 시작하면 컴퓨터가 잠깁니다.

Pop!_OS 20.04에 문제가 있습니다. 기본적으로 충분히 오랫동안 실행한 후에는 버퍼/캐시가 가득 차고(읽은 내용은 완전히 정상임) 사용 가능한 메모리가 감소합니다. 결국 내 컴퓨터가 메모리 스왑을 시도하기 시작했고 kswapd 프로세스가 시작되었습니다. 이런 일이 발생하면 컴퓨터가 완전히 정지되어 사용할 수 없게 되어 하드 재부팅이 필요합니다. 다음은 이 일이 발생하기 직전에 상단에서 출력된 몇 가지 예시입니다.

top - 20:01:56 up  2:20,  1 user,  load average: 0.89, 0.89, 0.96
Tasks: 273 total,   2 running, 271 sleeping,   0 stopped,   0 zombie
%Cpu(s): 15.2 us,  3.5 sy,  0.0 ni, 80.9 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7916.1 total,    156.4 free,   3212.3 used,   4547.4 buff/cache
MiB Swap:   4095.5 total,   2097.5 free,   1998.0 used.    118.5 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                
   5717 bob       20   0 6981324 529316  40100 S  52.5   6.5  93:20.71 WoWClassic.exe         
   1895 bob       -2   0 6984436  84200  17752 S   5.3   1.0   2:31.27 gnome-shell            
   1614 bob       20   0 4878928  24088   3960 S   8.6   0.3   5:45.16 Xorg                   
   2214 bob       20   0  639644  19208   8840 S   4.3   0.2   0:27.15 gnome-terminal-        
   2349 bob       20   0 2091024   7800   2096 S   0.3   0.1   0:48.83 io.elementary.a        
   1219 geoclue   20   0  584040   6000   4044 S   0.0   0.1   0:00.41 geoclue                
   1733 bob       20   0  323980   4896   1724 S   1.0   0.1   0:14.02 ibus-daemon            
      1 root      20   0  167800   4536   1292 S   0.3   0.1   0:18.14 systemd                
    876 root      20   0  394572   4448   1940 S   0.3   0.1   0:09.84 udisksd                
   1836 bob       20   0  505000   4280   2116 S   0.3   0.1   0:00.59 xdg-desktop-por        
    445 root      19  -1   70136   4272   3608 S   0.0   0.1   0:00.71 systemd-journal  

top - 20:16:50 up  2:35,  1 user,  load average: 0.88, 0.41, 0.70
Tasks: 274 total,   1 running, 273 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.6 us,  0.2 sy,  0.0 ni, 99.2 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7916.1 total,    459.5 free,   2943.0 used,   4513.6 buff/cache
MiB Swap:   4095.5 total,   2300.2 free,   1795.3 used.    526.9 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                
   1614 bob       20   0 5060228  37668  11568 S   4.0   0.5   6:02.94 Xorg                   
   2214 bob       20   0  639644  28544  17288 S   3.7   0.4   0:30.20 gnome-terminal-        
   1895 bob       -2   0 7291972 211512  64668 S   3.0   2.6   2:50.37 gnome-shell            
      1 root      20   0  167800   6812   3568 S   0.3   0.1   0:18.68 systemd                
    838 root      20   0  419244   5876   4464 S   0.3   0.1   0:01.53 NetworkManager         
   1733 bob       20   0  323980   7052   2484 S   0.3   0.1   0:14.62 ibus-daemon            
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd               
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                 
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp             
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd   
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq           
     10 root      20   0       0      0      0 S   0.0   0.0   0:00.21 ksoftirqd/0            
     11 root      20   0       0      0      0 I   0.0   0.0   0:10.40 rcu_sched              
     12 root      rt   0       0      0      0 S   0.0   0.0   0:00.02 migration/0            
     13 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/0   

보시다시피, 버퍼/캐시는 상당히 크고 사용 가능한 메모리의 절반 이상을 사용합니다. 이 값은 일반적으로 컴퓨터가 켜지면서 시간이 지남에 따라 천천히 증가합니다. 결국 컴퓨터가 작동을 멈추고 다시 시작해야 할 정도로 커졌습니다.

지금까지 실제로 시도한 유일한 방법은 vm.swappiness=0/etc/sysctl.conf에 추가하여 swappiness를 0으로 변경하는 것이었지만 도움이 되지 않았습니다.

캐시/버퍼가 높아지고 사용 가능한 메모리가 낮아질 때 주기적으로 다시 시작하는 것 외에 kswapd가 미친 듯이 실행되어 정지되는 것을 방지하기 위해 할 수 있는 다른 방법이 있습니까?

답변1

이는 일부 프로세스에서 메모리가 누출되거나 너무 많은 메모리를 사용하여 가비지로 채우고 있음을 의미할 수 있습니다. 메모리가 가득 차면 스왑 공간을 차지합니다. 디스크는 느리기 때문에 (과도하게 사용되는) 메모리에 대한 (무작위) 액세스가 너무 많으면 시스템이 크롤링될 수 있습니다.

출력 size의 프로세스를 살펴보면 ps(1)범인을 지적해야 합니다.

관련 정보