租了一年的2核2G的阿里云服务器,随着安装的软件增多(其实也没装几个)发现开始偶尔出现卡顿。
于是查看了一下,发现swap空间是0。才想起来,搞了之后只管用了,都没做什么配置。
于是乎,先查看下系统情况:
top - 14:37:12 up 22 min, 2 users, load average: 0.00, 0.01, 0.03
Tasks: 195 total, 1 running, 194 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1673.0 total, 67.8 free, 1233.7 used, 371.5 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 265.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1169 mysql 20 0 1783944 368240 9416 S 0.6 21.5 0:05.31 mysqld
1221 root 20 0 129864 11120 7360 S 0.6 0.6 0:10.16 AliYunDunMonito
913 gwyy23c1 20 0 11.5g 266200 26108 S 0.3 15.5 0:12.71 node-red
1172 root 20 0 95904 9512 8276 S 0.3 0.6 0:05.60 AliYunDun
1291 gdm 20 0 3817332 143512 61740 S 0.3 8.4 0:03.10 gnome-shell
3457 gwyy23c1 20 0 11064 3920 3308 R 0.3 0.2 0:00.07 top
1 root 20 0 166756 11500 7660 S 0.0 0.7 0:01.27 systemd
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
5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 slub_flushwq
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-events_highpri
10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_rude_
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_trace
13 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
14 root 20 0 0 0 0 I 0.0 0.0 0:00.21 rcu_sched
15 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
16 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
17 root 20 0 0 0 0 I 0.0 0.0 0:00.13 kworker/0:1-events
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
19 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
20 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/1
21 root rt 0 0 0 0 S 0.0 0.0 0:00.05 migration/1
22 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/1
24 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-events_highpri
25 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 inet_frag_wq
27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
29 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
查看发现,cpu使用不多,但内存占用很高。我一直是远程ssh的,没想到还有GNOME桌面也在运行。
先关桌面进程。
sudo systemctl stop gdm
再配置交换文件。
创建文件
sudo fallocate -l 16G /swapfile
权限设置
sudo chmod 600 /swapfile
设置交换文件
sudo mkswap /swapfile
启用交换文件
sudo swapon /swapfile
验证交换文件是否启用
$ free -h
total used free shared buff/cache available
Mem: 1.6Gi 1.1Gi 104Mi 11Mi 467Mi 384Mi
Swap: 15Gi 166Mi 15Gi
或者
$ sudo swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 16G 0B -2
编辑配置文件
编辑/etc/fstab
文件
sudo nano /etc/fstab
添加内容
/swapfile none swap sw 0 0
重启系统后,再次检查,没问题,说明配置好了。
再调整下交换空间优先级。
打开配置文件
sudo nano /etc/sysctl.conf
增加内容
vm.swappiness=30
vm.vfs_cache_pressure=50
vm.swappiness
作用:
vm.swappiness 参数控制内核将数据从物理内存移动到交换空间(swap)的倾向。它的值范围是0到100。
该参数决定了内核在内存压力下如何平衡使用物理内存和交换空间。
值的意义:
0:内核会尽量避免使用交换空间,只有在绝对必要时才会使用。这通常用于需要低延迟的应用,如实时系统或数据库服务器。
100:内核会积极地将数据移到交换空间,以保持更多的物理内存空闲。这通常用于希望最大化物理内存可用性的系统。
vm.vfs_cache_pressure
作用:
vm.vfs_cache_pressure 参数控制内核释放缓存页(特别是文件系统缓存)的压力。它的值范围是0到100。
该参数决定了内核在内存不足时如何处理文件系统缓存。
值的意义:
0:内核几乎不会释放缓存页,即使内存压力很大。这可能会导致内存不足的情况。
100:内核会非常积极地释放缓存页,即使内存压力不是很高。这可能会导致频繁的磁盘I/O,降低性能。