无应用运行时VPS的CPU与RAM随机波动?求原因排查方法
CentOS 7 VPS CPU突发占用排查方案
1. 实时捕捉高CPU进程
因为CPU占用是几秒的突发,需要用高频监控工具抓现场:
- 执行
top -d 1(每秒刷新一次),紧盯%CPU列,突发时立刻记录异常进程的PID和名称。如果来不及手动记录,运行pidstat -u 1 > cpu_mon.log,将持续的CPU统计输出到文件,事后查看日志定位异常进程。 - 安装
htop(yum install htop),界面更直观,能查看进程的线程详情和资源占用,方便快速定位。
2. 检查定时任务
很多异常资源占用由定时任务触发:
- 查看当前用户的定时任务:
crontab -l,切换到root用户再执行一次,检查所有用户的任务。 - 查看系统级定时任务目录:
ls -la /etc/cron.*,重点检查/etc/cron.d/、/etc/cron.hourly/里的脚本,排查陌生或可疑文件。 - 检查anacron配置:
cat /etc/anacrontab,确认是否存在异常周期性任务。
3. 排查Apache服务影响
虽然你不使用Apache,但后台运行的服务可能触发资源占用:
- 先停止Apache:
systemctl stop httpd,观察一段时间,看CPU突发是否消失,排除Apache本身的问题。 - 查看Apache日志:
/var/log/httpd/access_log和/var/log/httpd/error_log,检查是否有异常请求(比如扫描、爬虫)触发了Apache进程。
4. 扫描恶意软件
针对CentOS 7,用以下工具排查:
- 安装并运行
rkhunter:yum install rkhunter,先更新特征库rkhunter --update,再执行全扫描rkhunter --checkall,重点关注输出中的警告项。 - 安装并运行
chkrootkit:yum install chkrootkit,执行chkrootkit,留意类似Checkingifconfig'... INFECTED`的感染提示。 - 手动检查临时目录:
ls -la /tmp /var/tmp,查看是否有陌生的可执行文件或脚本;用ps aux --sort=-%cpu按CPU占用排序,排查陌生进程。
5. 分析网络I/O异常
结合KB级网络波动,定位流量来源:
- 安装
iftop(yum install iftop),执行iftop实时监控网络连接,突发时记录对应的IP和端口,用whois 目标IP查询IP归属地。 - 抓包分析:执行
tcpdump -i any -w network_capture.pcap,等突发发生后按Ctrl+C停止,再用tcpdump -r network_capture.pcap查看数据包内容,区分正常系统通信和异常流量。 - 查看当前网络连接:
ss -antp,排查是否有陌生IP的非标准端口连接。
6. 查看系统日志找线索
系统日志会记录关键异常信息:
- 查看系统日志:
cat /var/log/messages,搜索突发时间点附近的CPU、error、warning关键词,定位相关事件。 - 查看安全日志:
cat /var/log/secure,检查是否有可疑登录尝试(比如暴力破解、陌生IP登录)。 - 查看进程执行日志:
ausearch -m EXECVE,过滤系统中进程执行的记录,找突发时间点的异常进程启动记录。
7. 排查RAM变动原因
RAM变动可能是缓存或进程导致:
- 用
free -h查看内存详情,区分used、cache、buffers,缓存变动属于正常系统行为;如果是进程占用突然增加,结合top或ps定位对应进程。 - 用
vmstat 1持续监控内存和swap使用,观察突发时的内存变化趋势。
内容的提问来源于stack exchange,提问作者Cool_Coder
相关产品推荐
相关产品推荐

