Linux 机器磁盘清理

Linux 机器磁盘清理

早上收到一份告警,提醒磁盘空间内存占用超过 95%。

对于前端开发来说,前端大部分的服务是静态资源(React 、Vue 等开发的页面打包构建后产物 css\js\html 以及其他媒体资源和字体等静态资源)并不会占用过多的内存。

近期使用 strapi 搭建了一个基于node的服务,用于 lowcode 编排的内容的CRUD。本文记录如何清理磁盘。

image.png

分为三步:查询磁盘占用情况、定位内存暴涨目录、清理内容

查询磁盘

命令 df -h df【disk free】命令用于显示文件系统的磁盘空间使用情况,包括已用空间和可用空间。

1
df -h 

结果如下:

1
2
3
4
5
6
7
8
9
10
11
Filesystem      Size  Used Avail Use% Mounted on
overlay 20G 19.6G 0 98% /
tmpfs 64M 0 64M 0% /dev
tmpfs 252G 0 252G 0% /sys/fs/cgroup
/dev/md0p3 218G 14G 193G 7% /etc/hosts
shm 64M 0 64M 0% /dev/shm
/dev/md1 3.7T 2.1T 1.7T 56% /etc/hostname
tmpfs 252G 12K 252G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 252G 0 252G 0% /proc/acpi
tmpfs 252G 0 252G 0% /proc/scsi
tmpfs 252G 0 252G 0% /sys/firmware

磁盘针对 meta 数据预留的内存是 20G, 内存占用98%。从 overlay 文件系统占用比较大。从这一步定位到告警所在的机器的磁盘占用情况。下一步需要定位到对应的文件夹目录。

定位到磁盘大内存文件目录

命令 du -sh * | sort -h ,命令含义:查询当前目录下一级目录的每个文件和子目录的大小,并按大小排序。

1
du -sh * | sort -h

查询结果如下:

1
2
3
4
5
6
0       sshd
0 sysrd
12K logger
12K rd
528M odin
19.6G xiaoju

定位是 xiaoju 目录,进入xiaoju文件夹继续查看内存分布。一步到位的命令是 du -h -l 将目录下的所有文件全列出来并标记出文件大小。–max-depth 控制文件目录深度。

1
2
cd xiaoju # 进入第一步分析出来的大内存占比文件夹下
du -h -l --max-depth=1

查询结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
11M     ./opbin
44K ./meta
861M ./data1
776M ./strapi-lowcode-server
44M ./ep
4.0K ./statsd-client
24M ./.npm
213M ./node-v20.14.0-linux-x64
2.1G ./.cache
43M ./.config
0 ./.yarn
15.4G ./.pm2
788K ./elvish
230M ./python3
19.6G .

看到了大部分内存可清理的范围了 pm2 进程守护,进程日志等占用了15.6G内存,其他就是cache占用2G。定位到原因大概就是 pm2 未配置内存占用大小,看了一下进程日志都不太重要可以进行清理。

清理大内存目录

如果是特殊程序运行导致的内存暴涨,则需要考虑将程序迁出,或是将程序运行产物及时同步掉将内存释放(这一步应该做成自动化)。

对于当前我遇到的场景,只需要将 pm2 进程日志占用的内存 flush 即可。步骤有两点:第一先将机器的 .pm2/ 下的内存释放掉;第二:修改部署程序脚本,将内存占用限制为5G。

手动清理日志:

1
pm2 flush # 手动清理日志

增加 pm2-logrotate 自动管理日志大小,修改 max_memory_restart 配置项限制内存大小。

结果

清理完成后重新查询磁盘占比:

1
du -h  -l --max-depth=1

释放掉 10G的内存占用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
11M     ./opbin
44K ./meta
861M ./data1
776M ./strapi-lowcode-server
44M ./ep
4.0K ./statsd-client
24M ./.npm
213M ./node-v20.14.0-linux-x64
2.1G ./.cache
43M ./.config
0 ./.yarn
5.4G ./.pm2
788K ./elvish
230M ./python3
9.6G .

du -h -l 查看占用情况

1
2
3
4
5
6
7
8
9
10
11
Filesystem      Size  Used Avail Use% Mounted on
overlay 20G 9.0G 12G 45% /
tmpfs 64M 0 64M 0% /dev
tmpfs 252G 0 252G 0% /sys/fs/cgroup
/dev/md0p3 218G 14G 193G 7% /etc/hosts
shm 64M 0 64M 0% /dev/shm
/dev/md1 3.7T 2.1T 1.7T 56% /etc/hostname
tmpfs 252G 12K 252G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 252G 0 252G 0% /proc/acpi
tmpfs 252G 0 252G 0% /proc/scsi
tmpfs 252G 0 252G 0% /sys/firmware