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)
범인을 지적해야 합니다.