发现


 

当天准备在服务器上部署一套iot平台,使用宝塔linux登陆服务器配置一下网站,结果在宝塔首页发现:负载状况-100%;cpu使用-100%;存储空间-47G/50G。心中一惊,想起前几天在服务器上部署了一套测试平台,后来测试完了就删掉了,是不是进程没有停干净呢?抱着这个想法,我开始寻找问题。

查找问题与解决


 

(1)实现想到使用指令top看一下有什莫高运行的进程,然后发现,运行进程中没有内存占用太大的。

(2)使用“ps aux | grep 关键词”筛选一下上次运行的测试平台是否有运行进程残余,对残余进程使用kill进行杀死,无法杀死的使用指令"ps -ef | grep 进程号"查找其父进程,如对现用进程无影响,可使用“kill -9 进程id”进行杀死。

  消除掉这些残余进程后,cpu负载跟使用都明显降低。

(3)使用“df -h”查看存储空间使用状况,结果发现确实是满存储了,然后使用“du -sh 目录地址/*”对根目录的文件进行大小计算,结果发现有个文件的大小有30G,进入改目录,继续使用“du -sh 目录地址/*”对文件大小进行计算,结果发现代表回收站的文件夹存储有27G,找到了问题所在。

(4)使用宝塔面板跟命令行看回收站内没有多少文件,于是使用宝塔面板清空回收站,之后使用df查看存储大小,没有变化,依然47G/50G,但是用du查看已经没有较大的文件了。

(5)来自网友的智慧,这种情况一般是由于“存在进程对某个文件进行不断的写操作,该文件被删除后,该进程依然锁定该文件所对应的存储空间,文件被删除时并没有释放内存空间,所以有了df与du指令的内存计算差异。

(6)使用指令”lsof -n | grep delete"查找被删除的文件仍然占有的内存空间

宝塔 负载均衡配置 宝塔负载状态100%_重启

 

   发现确实有进程锁定被删除的文件,并且有大量内存没有被释放。

(7)由于锁定内存所对应的文件已不存在,所以我们可以使用" kill -9 进程ID"杀死进程,或者重启该进程,或者重启操作系统,我选择的是kill进程,之后df发现内存大小恢复正常。

教训


停止项目运行时,一定要全面停止该项目所启动的进程及服务,不要莽撞的在进程停止之前删除源文件,这可能造成无法挽回的后果。切记切记!!