记录一次ubuntu服务器CPU占用100%的问题排查过程

最近在ubuntu服务器上跑深度学习的训练程序,运行一段时间程序就会被kill,给实验带来了不少麻烦。作为linux小白,着实是被这个问题困扰了一段时间,现将最后成功的方法记录下来。

关于这类问题,最常见的原因是系统内存不足,触发了OOM killer。于是先用htop查看系统的资源使用情况:

记录一次ubuntu服务器CPU占用100%的问题排查过程_第1张图片

发现系统内存仍然是充足的,但是所有CPU核心都是100%占用。所以应该不是内存不足的问题,而是因为CPU爆满了。CPU主要是被一批“python”进程占用了。尽管这批进程的启动命令都显示为“python”,但没有参数,看起来不像正常的程序。用kill -9命令杀死这些进程,发现过一段时间又会重新出现。由于服务器之前中过挖矿病毒,所以这次也怀疑是中了挖矿病毒。

用 “ll /proc/进程ID” 查看进程信息(由于中间曾经杀死过进程,这里截的两张图的进程ID号不同):

记录一次ubuntu服务器CPU占用100%的问题排查过程_第2张图片

发现进程是由/usr/bin/-bash文件启动的,且该文件已被删除。可以猜测这个文件只是一个临时文件,不是真正的病毒文件,这个路径可能也是临时的,真正的病毒文件可能每次会随机选择一个目录生成临时文件,启动进程后再把临时文件删除,以便隐藏自己。

由于这些进程被杀死后又会重新出现,所以怀疑其背后还有守护进程或者定时任务。首先查看系统的定时任务,ubuntu的/etc目录下有cron.weekly、cron.daily、cron.hourly等存放定时任务的文件夹,由于上述异常进程被杀死后不到一小时又重新出现,所以先查看cron.hourly,进入/etc/cron.hourly,查看目前都有哪些定时脚本:

在这里插入图片描述

发现里面只有一个sync,用vim打开看看其中的内容:

记录一次ubuntu服务器CPU占用100%的问题排查过程_第3张图片

看到脚本中有/usr/bin/-bash,正是被异常进程删除掉的文件名,看来这个脚本是跟异常进程有关系的,感觉找对了。再看第一行是cp … /bin/sysdrr /usr/bin/-bash …,似乎是把/bin/sysdrr复制为/usr/bin/-bash,接着看下面几行,似乎分别是“进入/usr/bin”,“启动-bash文件”、“删除-bash文件”的意思。如果按照这个理解,病毒进程的启动流程就与之前的猜测一样,但/bin/sysdrr也不一定是真正的病毒文件,可能只是比/usr/bin/-bash更高一级的存在。

为了确定/bin/sysdrr是不是也是一个临时文件,进入/bin目录,看看该文件是否还存在,结果发现该文件没有被删除。也许这个就是真正的病毒文件?如果是的话把这个文件删掉就可以了,但不确定前面的猜测是否正确,即使前面猜测正确了,也不确定是否还有其他的病毒文件。不过,如果这个是病毒文件的话,也许别人也曾遇到过,于是先在网上搜索一下,直接搜索sysdrr:

记录一次ubuntu服务器CPU占用100%的问题排查过程_第4张图片

好家伙,还真有相关的结果,看来确实是挖矿病毒。看了其中几个结果,发现跟我遇到的情况非常相似,看来前面的猜测基本没错。在其中几个搜索结果里,都是说把/bin/sysdrr删掉,顺便清理掉定时脚本就可以了,姑且认为/bin/sysdrr就是真正的病毒文件,背后没有其他的病毒文件存在了。于是参考搜索结果里的做法,删除/bin/sysdrr(该文件是只读的,需要用chattr修改属性才能删除)。再清理掉定时脚本sync,sync在多个目录下都存在:

在这里插入图片描述

查看一下这几个目录下的sync脚本,确定内容都一样后,便可以放心地将这些sync脚本全部清除了。

最后用kill -9命令把异常进程杀死,几个小时后仍然没有重新启动(平时过几十分钟就会重新启动),也许这次的问题已经解决了。

但目前仍不确定服务器是怎么被病毒入侵的,如果入侵的途径没有封上,以后还有可能再次中病毒,后续还需要加强服务器的安全措施。

你可能感兴趣的:(ubuntu)