1. 背景:PHP服务器设置了200个进程,dynamic 方式。接口请求并发不是很大,1秒中100左右,讲道理完全够用,但是问题是:启动了服务后过1分钟PHP日志就会出现进程数不够的提示。而且请求接口刚开始很快,然后是越来越慢,最慢的时候请求一次接口的响应时间能达到40多秒,因为接口里只有数据库操作是最慢的,数据库也是正常插入操作。所以不可能导致接口响应时间这么慢。但是找了一段时间也没什么进展。就只能把某些不是急需的接口暂停掉。发现进程数能勉强够用。但是这样做不是解决方法。所以接下来又继续找。
  2. 今天和另一位同事在排查的时候,排查了一些php-fpm进程设置方面的可能的问题后,就开始看资源的占用。内存和CPU占用很高,通过top命令 发现了kdevtmpfsi 进程占用资源特别高。(本人菜鸟,不知道这是啥)然后他跟我说这是挖矿病毒:)(嘿嘿,还是第一次遇到 ),然后就开始搞如何干掉这个病毒
  3. 第一次:https://blog.csdn.net/Owen_goodman/article/details/103731981
  4. 杀掉进程后,过了一会,进程又自己启动了。第二次:杀掉进程后加入了一些命令
    命令
    touch /tmp/kdevtmpfsi && touch /var/tmp/kinsing
    
    echo "everything is good here" > /tmp/kdevtmpfsi
    
    echo "everything is good here" > /var/tmp/kinsing
    
    touch /tmp/zzz
    
    echo "everything is good here" > /tmp/zzz
    
    chmod go-rwx /var/tmp
    
    chmod 1777 /tmp

    但是过了一会又又又又又又启动了。最后没办法,写了一个定时脚本,每分钟杀死一次。

    #!/bin/sh
    
    kdevtmpfsi_pid=`ps aux | grep kdevtmpfsi | grep -v "grep" | awk '{print $2}'`
    kinsing_pid=`ps aux | grep kinsing | grep -v "grep" | awk '{print $2}'`
    sudo kill -9 $kdevtmpfsi_pid 
    sudo kill -9 $kinsing_pid
    sudo rm -f /tmp/kdevtmpfsi* /tmp/kinsing
    
    
    # 除了root用户以外,其他用户创建的定时任务将被阻止
    # touch /etc/cron.allow
    # echo “root” > /etc/cron.allow
    View Code

     

  5. 后来换了一台新的服务器
  6. 再后来,看到了一篇博客:https://learnku.com/articles/52350       提到了产生病毒的其中一个原因是公网开放了9000 端口,而我这个服务器确实开放了9000端口,(因为分离了nginx 和 PHP),然后再原来那台有病毒的服务器上实验了一下,观察一段时间发现病毒进程没有再启动了哦。做法:把安全组开放的9000端口设置为只能nginx服务器的IP访问,其他IP禁止访问。再把kdevtmpfsi 和 kinsing进程杀掉,删除/tmp/kdevtmpfsi    /tmp/kinsing。  不幸的是又特么的出现了,fuck。
  7. 继续看  : https://stackoverflow.com/questions/60151640/kdevtmpfsi-using-the-entire-cpu       Ubuntu系统上在/var/spool/cron 目录下有crontabs目录,里面是定时任务的文件,发现了www-data用户的定时任务,终于找到了,如图,我把它给注释掉了。杀掉进程继续观察