不懂Linux运维就少折腾,要不然磁盘占满都不知道原因所在

Author: oneside - Posted:3个月前 - View:271

写shell脚本一定要注意合理性,要不然结果会导致严重后果,我就犯了一个如果低级错误,导致服务器磁盘使用率100%,项目直接不可用了。

具体原因:写shell脚本手动切割网站日志,其实服务器配置文件进行按天自动切割是最佳方式,我却用了脚本进行按天切割,并且日志名是按天命名的,导致第二天时,第一天的日志虽然已经被脚本删除,但是还被服务器写入日志的进程占用着,由于项目流量过大,日志文件虽然删除,但是还在向日志里写东西,导致日志文件极大,占用了大部分磁盘空间,新生成的日志文件一直都为空,如果不是找了服务商技术排查,至今还不知原因所在。

如果此时你使用du命令来统计磁盘大小时,会发现统计出的和服务商管理平台显示的不一致,磁盘有80G,统计只用到30G,如下:

[root@virtual ~]# du -sh /
30G         /

只能使用df命令才可以看到实际被使用的磁盘空间,/dev/vda1已使用99%了,如下:

[root@virtual ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  1.9G     0  1.9G   0% /dev
tmpfs          tmpfs     1.9G   24K  1.9G   1% /dev/shm
tmpfs          tmpfs     1.9G  448K  1.9G   1% /run
tmpfs          tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/vda1      ext4       80G   79G   1G  99% /
tmpfs          tmpfs     374M     0  374M   0% /run/user/0

要解决此问题,只能通过lsof命令才能解决了,此命令可以将文件被删除,但实际上并未删除的文件显示出来,此类文件会一直占用服务器磁盘空间,最要命的是使用du命令是无法统计此类文件。

只要知道解决办法,通过lsof命令找出进程,再杀掉占用进程的ID就能释放占用的资源了,通过以下面的命令就够够了。

[root@virtual ~]# lsof -P -n|grep -i delete | awk '{print $2}' | xargs -I {} kill -9 {}

注意:执行上述命令时,最好先列出所有已删除但仍被进程占用的文件,确定Kill进程不会对服务器造成任何影响。

如果你的服务器磁盘已经被占满,连正常登录都不能用,那你还有以下几种方式可以达到你需求:

  • 使用服务商提供的救援模式解决
  • 使用服务商提供的快照备份回滚功能,前提是你之前对服务器有过快照记录
  • 没有快照备份的话,只要你的网站数据有多处备份,那就重装系统吧

不过最后不得提醒一句,重装系统容易,要重新配置服务器环境却不容易,建议还是老实一个星期检查一下服务器的运行情况吧!

0 人点赞  ∙  0 人收藏  
加入收藏 点赞 我要评论
目前尚无回复