Linux 机器磁盘清理
Linux 机器磁盘清理
早上收到一份告警,提醒磁盘空间内存占用超过 95%。
对于前端开发来说,前端大部分的服务是静态资源(React 、Vue 等开发的页面打包构建后产物 css\js\html 以及其他媒体资源和字体等静态资源)并不会占用过多的内存。
近期使用 strapi 搭建了一个基于node的服务,用于 lowcode 编排的内容的CRUD。本文记录如何清理磁盘。
分为三步:查询磁盘占用情况、定位内存暴涨目录、清理内容
查询磁盘
命令 df -h
df【disk free】命令用于显示文件系统的磁盘空间使用情况,包括已用空间和可用空间。
1 | df -h |
结果如下:
1 | Filesystem Size Used Avail Use% Mounted on |
磁盘针对 meta 数据预留的内存是 20G, 内存占用98%。从 overlay 文件系统占用比较大。从这一步定位到告警所在的机器的磁盘占用情况。下一步需要定位到对应的文件夹目录。
定位到磁盘大内存文件目录
命令 du -sh * | sort -h
,命令含义:查询当前目录下一级目录的每个文件和子目录的大小,并按大小排序。
1 | du -sh * | sort -h |
查询结果如下:
1 | 0 sshd |
定位是 xiaoju 目录,进入xiaoju文件夹继续查看内存分布。一步到位的命令是 du -h -l
将目录下的所有文件全列出来并标记出文件大小。–max-depth 控制文件目录深度。
1 | cd xiaoju # 进入第一步分析出来的大内存占比文件夹下 |
查询结果:
1 | 11M ./opbin |
看到了大部分内存可清理的范围了 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 | 11M ./opbin |
du -h -l 查看占用情况
1 | Filesystem Size Used Avail Use% Mounted on |