0

0

记一次服务器CPU跑满事件

齐天大圣

齐天大圣

发布时间:2020-05-23 12:20:50

|

2802人浏览过

|

来源于php中文网

原创

事情经过

昨天早上,打开电脑发现自己的博客网站打开不了,准备远程登录服务器查看问题,发现服务器远程不上。没办法,登录阿里云后台,重启服务器。重启完成后,网站能正常打开,所以当时就不以为然,以为阿里云那边是不是出了什么毛病。

到了下午的时候,发现网站又打不开了,而且又远程连接不了服务器。进入阿里云控制台,查看监控发现cpu跑满了。只能再重启服务器,等重启完成后再远程连接上去,这次需要好好排查问题。

blog19111209335877111.jpg

解决问题

当时首先想到的是中病毒了,先不管那么多,第一步是找到那些耗cpu的进程杀死。使用top命令,查看耗cpu的进程有哪些。一看就明白了,都是bzip2搞得鬼。

blog19111210355777940.jpg

杀进程的过程发现一个问题,就是这些进程杀死了,过一会又出现了。这种现象,我知道肯定要找到他们的父进程,擒贼先擒王。

# ps -lA | grep bzip2
0 R     0  1965  1964 44  80   0 -  3435 -      ?        00:01:43 bzip2
0 S     0  1981  1980 33  80   0 -  3435 pipe_w ?        00:00:56 bzip2
0 R     0  1997  1996 30  80   0 -  3435 -      ?        00:00:31 bzip2
0 R     0  2013  2012 27  80   0 -  3435 -      ?        00:00:07 bzip2
0 R     0  2024  2023 15  80   0 -  3435 -      ?        00:00:00 bzip2

但是发现他们的ppid不是同一个,这就让我很疑惑了。我打算用进程树看看

pstree -up

blog19111210424950511.jpg

这时候,我就知道了,原来是自己的定时脚本有问题。那么我需要做以下几件事:

  1. 关闭crond服务

    SVN搭建及使用教学视频(布尔教育)
    SVN搭建及使用教学视频(布尔教育)

    《SVN视频教程》,SVN:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。许多人会把版本控制系統想像成某种“时光机器”。

    下载
  2. crontab -e 将weekly.sh去掉

  3. 杀掉那些耗cpu的进程

# 关闭
[root@iz8vb626ci0aehwsivxaydz ~]# kill 1622
[root@iz8vb626ci0aehwsivxaydz ~]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Tue 2019-11-12 10:44:32 CST; 10s ago
 Main PID: 1622 (code=exited, status=0/SUCCESS)
 
# 修改crontab -e
 
# 杀掉耗cpu进程,下面的命令执行了好几遍,才将所有耗cpu进程全部杀掉了
ps -lA | grep bzip2 | awk '{print $4}' | xargs -n 10 kill -9

问题原因与思考

刚开始,我以为是自己的shell脚本有问题,出现死循环导致问题出现。但是查看脚本,发现没有问题,没有死循环的情况出现。一时间,百思不得姐。

#!/bin/bash
# 每周备份脚本
 
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export
 
backdir=/backup/weekly # 备份目录
 
[ -z "$backdir" ] || mkdir -p $backdir
 
dirs=(/etc /home /root /usr /var/spool/cron /var/spool/at)  # 需要备份的目录
 
for dir in ${dirs[@]}
do
    if [ ! -d $dir ];then
        continue
    fi
 
    cd $backdir
    tar -jcpf $(basename $dir)_$(date +%Y%m%d).tar.bz2 $dir
done
 
 
# 删除mtime大于30天的文件
find $backdir -mtime +30 -name *.tar.bz2 -exec rm -f {} \;

过了很长时间,终于找到了原因所在,原来是自己的定时任务写法有问题

* 3 * * 1  /root/bin/weekly.sh 1>/dev/null 2>&1

我原本的想法是每周1凌晨3点执行一次备份脚本,但是这样写的结果是每周一凌晨3点的每分钟都会执行该脚本一次。正确的写法应该如下:

# 每周一凌晨三点零一分执行该脚本
1 3 * * 1  /root/bin/weekly.sh 1>/dev/null 2>&1

问题解决了,原因也找到了。自己该写一个服务器资源监控脚本了。

相关专题

更多
微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

2

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

74

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

133

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

54

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

106

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux 教程
Linux 教程

共28课时 | 35.2万人学习

后盾网Linux视频教程
后盾网Linux视频教程

共48课时 | 11.4万人学习

极客学院Linux从入门到精通视频教程
极客学院Linux从入门到精通视频教程

共39课时 | 10.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号