问题点: 服务进程被自动kill 且隔段时间被kill一个
问题定位及解决步骤:
1、free -m 查看内存使用状态 ,发现free基本没了。--> 怀疑是服务有内存泄漏,开始排查
2、使用top命令观察,开启的服务占用内存量并不大,且最终文档在一个值,且服务为java应用,内存并没达到父jvm设置上限。按top监控占用内存排序,加起来也不会超过物理内存总量。查看硬盘使用量,占用20%。基本排除虚拟内存占用过大的原因。--->排除服务内存泄漏因素,怀疑mysql和nginx,开始排查
3、因为top命令看 mysql占用内存也再可控范围,是否存在connection占用过多内存,发现并不会,设置最大连接数为1000,最多也不会超过几M。 nginx占用一直非常小。但每次最先被kill的基本都是nginx进程。所以排查,但发现无非就是openfiles数量啥的调整。发现也一切正常。且之前niginx可以正常使用的。
4、最为费解的就是 通过free -m 查看的时候 基本全是used,cache部分很少,free基本没有。但top上又找不到有哪些进程占用了内存。无解
5、注意到有两个进程虽占用内存不多,但基本耗光了100%的cpu。开始想着占cpu就占了,没占内存,现在是内存不不够导致进程被kill的,就没注意这点。
6、实在搞不定,重启服务器,重启了所有服务,服务暂时可用,回家。在路上的时候发现又崩了。忐忑的睡觉。
7、早上起来继续看,这次留意注意了下那两个占用高cpu的进程,kdevtmpfsi 和 networkservice。本着看看是啥进程的心态,百度了下。。。。
真相一目了然,两个挖矿病毒。
突然后知后觉的意识到错误原因:
1、cpu占用率高,正常服务使用cpu频率较高的服务最容易最内存超标。(因为在需要使用cpu时没cpu资源,内存大量占用,服务瞬间崩溃),然后看top发现刚刚已经占用内存的进程已经被kill了,所以没发现内存有高占用的情况。
2、后面的应用继续使用cpu时也会发生类似情况,倒是服务一个一个逐渐被kill。
-----毕竟从未碰到过这种,还是太年轻,高手可能在第一次执行top的时候就能发现这个点。
问题解决
问题点基本定位好了,解决问题就相对简单很多:
通过百度,google,常见的病毒清除步骤基本都能解决。这两个挖矿病毒很常见,大致记录下要点。可能所有病毒都会有这些基础操作。
① 首先,查看当前系统中的定时任务:crontab -l
我服务器上有四个定时下载任务 通过wget 和 curl 下载病毒文件,把异常的删掉。要不然删了病毒文件还是会下载下来
crontab -r,全部删除命令(或根据需求删除定时任务)
② 查找病毒文件 可以全部模糊搜索 清除, 但病毒文件基本都用了chattr +i命令 使用chattr -i filename 后再使用rm -f filename 。可删除
③ kill 病毒进程,但注意kill了可能马上就重启了。因为有守护进程,需要把病毒进程的守护进程也kill掉
④ 检查是否root用户被攻击,可能系统配置信息被更改。
⑤ 最好能理解病毒脚本,通过看代码看它做了些什么。针对脚本取修复系统
本次两个挖矿病毒 博文连接 :https://blog.csdn.net/u014589116/article/details/103705690
总结:
1、还是太年轻,内存和cpu强关联啊。咋能不注意!!!!!!!!!!
2、通过wget下载资源鉴别来源,别随便百度一个就开始 wget,然后愉快装上
3、此次挖矿病毒博主提示redis要设置难点的密码(我之前没设置,赶快加上)
4、网络攻击时刻存在,只是别人有没有攻击你的意愿。我这次只是中病毒,黑客可以攻击怎么玩都行,得加强网络安全防护相关技能