是谁占用了linux服务器资源?!
一、事件描述
项目用到的Linux服务是笔记本安装的CentOS7后搭建的,只安装了Oracle数据库和Redis。没做什么操作。莫名的内存总是被占用,CPU使用率直接被拉满?
CPU直接被拉满到200%的使用率。
二、排查和处理方法
1、 网上搜索这个问题的处理结果(绝大部分无效)
1.1方法一:使用iptable或者firewalld
处理方法说明:
①.这里最好切换一下root用户,因为有些命令是需要root用户权限的。
sudo -i
②.使用top命令查看%CPU使用率拉满的程序启动的PID。如图下面程序PID是4429。
③使用
ss -antp | grep <CUP占用率高的 COMMAND>来查看程序来往IP地址和端口。
ss -antp | grep sshd
#! 这里是已经kill掉了那个奇奇怪怪的程序。如果没kill 掉的话你会发一个访问者的IP明显是有点异样的IP。
可以通过IP地址查询来了解详细位置。
④使用
iptable 来禁止来访IP(可以禁止访问,但是访问者换IP就又能访问了)。
iptables -A INPUT -s <IP地址> -j DROP
⑤因为我只需要22,1521,6379端口,Chat提供的方法是:
#! 这个方法没有实际操作和检验,目测是可行,但是这得需要操作者能直接访问机器,而不是远程连接。
附件上解封 某IP操作:
先找到要被封的IP的
DROP号
sudo iptables -L --line-numbers ##查看封禁列表
sudo iptables -D INPUT <DROP的号> ##解封对应DROP号
1.2 方法二:删除某些可执行文件
①根据PID找到是哪里的鬼东西执行起来占用的如此大的资源。结束进程kill -9 <PID>
然后rf -rm <文件路径>删查询到的文件。同时使用crontab -e查看是否有不知名的定时任务。
#! 这里也是需要有root操作权限的。我这里是没有不知名的定时任务的。还有就是这个鬼东西的绝对路径可能一眼能看出无用,有时又不能确定。如下图:
ll /proc/<pid> ##找到执行程序的绝对路径
gdb -p <pid> ##找到执行程序的绝对路径
kill -9 4429 ##结束进程
rf -rm /var/tmp/sshd ##删除可执行文件
crontab -e ##查看定时任务
②这时可能就不敢轻易删除。就可以尝试
chmod -x 禁止文件执行。(我使用的方法)
cd /root/.md
chmod -x sshd ##取消文件的执行权限。