做压测时,磁盘突然满了,造成测试中断。
环境:
根目录只有50G,其他磁盘都分home(很大)docker容器都映射日志到统一的日志目录docker未修改默认镜像容器目录 1.通过df -h查看,确实提示使用100% 2.把容器的应用日志移到home分区
通过建立home分区的软链接ln -s /home/log /data/log
3.把数据库的日志也建立软链接到home分区ln -s /home/db/log /opt/db/log
具体可见:https://blog.csdn.net/atzqtzq/article/details/122754717
不需要的镜像删除删除容器内的日志,发现个别容器占用磁盘很大,经找原因是nacos有两部分日志,一部分日志还在容器里未映射出来,造成容器很大,修改日志等级解决,根本还是需要都映射出单独的日志分区 5.再次通过df -h查看,发现空闲了部分磁盘空间
但好像隐隐不对,释放的空间应该更多啊6.通过在根目录执行du -sh *,显示实际文件占用大小 远小于df -h显示的实际磁盘占用大小。
查询当前文件夹的大小排序 du -h * | sort -nr7.通过df -i,显示inode未满
不过通过查看inode,发现gis应用的瓦片图层很多4k小文件,可以在这方面优化
#当前根目录下执行 for i in /*; do echo $i ; find $i | wc -l; done #再执行上述命令,就这样层层深入最终确定是那个目录文件最多 for i in /user/*; do echo $i ; find $i | wc -l; done #查看block大小 dumpe2fs /dev/sda1|grep -i "block size"(block默认大小1k(boot分区)或4K(非系统分区默认为4K)) #查看Inode大小 dumpe2fs /dev/sda1|grep -i "Inode size" linux的centos5.8是128字节,6.4是256字节8.到这,基本确实是删除的文件,未及时回收,造成空间没有被释放
安装lsof
#下载lsof https://dl.packetstormsecurity.net/UNIX/IDS/lsof/lsof_4.76.tar.gz #解压 tar -zxvf lsof_4.76.tar.gz #再解压 cd lsof_4.76 tar -xvf lsof_4.76_src.tar # 编译,有确认,都按"y"确认 cd lsof_4.76_src ./Configure linux #生成 make #创建软链接 ln -s /root/songzehao/lsof_4.76/lsof_4.76_src/lsof /usr/bin
使用lsof |grep deleted,查询到大量未释放的空间应用
lsof 参数说明,参考:
https://cloud.tencent.com/developer/article/1591481?from=15425使用ps -aux|grep {pid},查询到都是僵尸进程
进程状态说明,参考:
https://blog.csdn.net/qq_21989927/article/details/109299176使用kill -9 {pid},结束进程使用df -h发现磁盘空间大了很多
9.未确定docker挂载的方式会不会存在空闲挂载未使用却依然占用空间的问题



