您好,登錄后才能下訂單哦!
解決問(wèn)題
當(dāng)時(shí)首先想到的是中病毒了,先不管那么多,第一步是找到那些耗cpu的進(jìn)程殺死。使用top命令,查看耗cpu的進(jìn)程有哪些。一看就明白了,都是bzip2搞得鬼。
殺進(jìn)程的過(guò)程發(fā)現(xiàn)一個(gè)問(wèn)題,就是這些進(jìn)程殺死了,過(guò)一會(huì)又出現(xiàn)了。這種現(xiàn)象,我知道肯定要找到他們的父進(jìn)程,擒賊先擒王。
# 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
但是發(fā)現(xiàn)他們的ppid不是同一個(gè),這就讓我很疑惑了。我打算用進(jìn)程樹(shù)看看
pstree -up
這時(shí)候,我就知道了,原來(lái)是自己的定時(shí)腳本有問(wèn)題。那么我需要做以下幾件事:
關(guān)閉crond服務(wù)
crontab -e 將weekly.sh去掉
殺掉那些耗cpu的進(jìn)程
# 關(guān)閉 [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進(jìn)程,下面的命令執(zhí)行了好幾遍,才將所有耗cpu進(jìn)程全部殺掉了 ps -lA | grep bzip2 | awk '{print $4}' | xargs -n 10 kill -9
問(wèn)題原因與思考
剛開(kāi)始,我以為是自己的shell腳本有問(wèn)題,出現(xiàn)死循環(huán)導(dǎo)致問(wèn)題出現(xiàn)。但是查看腳本,發(fā)現(xiàn)沒(méi)有問(wèn)題,沒(méi)有死循環(huán)的情況出現(xiàn)。一時(shí)間,百思不得姐。
#!/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 {} \;
過(guò)了很長(zhǎng)時(shí)間,終于找到了原因所在,原來(lái)是自己的定時(shí)任務(wù)寫法有問(wèn)題
* 3 * * 1 /root/bin/weekly.sh 1>/dev/null 2>&1
我原本的想法是每周1凌晨3點(diǎn)執(zhí)行一次備份腳本,但是這樣寫的結(jié)果是每周一凌晨3點(diǎn)的每分鐘都會(huì)執(zhí)行該腳本一次。正確的寫法應(yīng)該如下:
# 每周一凌晨三點(diǎn)零一分執(zhí)行該腳本 1 3 * * 1 /root/bin/weekly.sh 1>/dev/null 2>&1
以上就是記一次服務(wù)器CPU跑滿事件的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。