CPU飆升?教你1分鐘抓取佔用系統資源的程式
CPU和記憶體資源動不動就飆升?
導致部署在上面的網站訪問特別慢,透過監控只能看到資源的使用率,並不能監控到哪些程式在佔用cpu和記憶體資源。
透過統計訪問量和分析日誌發現並不足以導致資源飆升?
我們的運維小哥哥整理了一個shell指令碼用來收集哪些程式在作怪
1、話不多直接放出指令碼內容,由於磁碟IO也有可能導致網站訪問慢和導致資源瓶頸,所以一併抓取出
#!/bin/bash
#獲取佔用IO的程式資訊
function io_monitor(){
out=`pidstat -d 1 1 | grep Average | sed -n '2,$p' | sed ':a;N;$!ba;s/\n/,/g'`
declare -A io_map
i=1
total_read=0
total_write=0
while ((1==1)); do
if [ "$out" == "" ]; then
break;
fi
tmp=`echo $out | cut -d "," -f $i`
if [ "$tmp" == "" ]; then
break;
else
read_val=`echo $tmp | awk '{print $4}' | cut -d"." -f 1`
write_val=`echo $tmp | awk '{print $5}' | cut -d"." -f 1`
cmd_val=`echo $tmp | awk '{print $8}'`
total_read=$(($total_read+$read_val))
total_write=$(($total_write+$write_val))
map_val=$read_val","$write_val
io_map[$cmd_val]=$map_val
((i++))
fi
if [[ $out =~ .*,.* ]]; then
continue
else
break
fi
done
if [ $total_read -gt 10240 ] || [ $total_write -gt 10240 ];then
echo "--------------$(date +"%m-%d %H:%M:%S")--------------------" >> io.log
for key in ${!io_map[*]};do
val=${io_map[$key]}
val_arr=(${val//,/ })
if [ ${val_arr[0]} -gt 0 ] || [ ${val_arr[1]} -gt 0 ];then
echo "task_name:$key IO_read(kB/s):${val_arr[0]} IO_write(kB/s):${val_arr[1]}" >> io.log
fi
done
fi
}
#獲取佔用CPU和記憶體的資訊
function cpu_Mem_monitor(){
cpu_us=`sar -u 1 1 | sed -n '$p' | awk '{print $3}' | cut -d"." -f 1`
cpu_sy=`sar -u 1 1 | sed -n '$p' | awk '{print $5}' | cut -d"." -f 1`
mem_total=$(free -m | grep Mem | awk '{print $2}')
mem_used=$(free -m | grep Mem | awk '{print $3}')
mem_rate=`echo "scale=2;$mem_used/$mem_total" | bc | awk -F. '{print $2}'`
sum_cpu=$(($cpu_us+$cpu_sy))
if [ $sum_cpu -gt 80 ] || [ $mem_rate -gt 80 ];then
echo "--------------$(date +"%m-%d %H:%M:%S")--------------------" >> cpu.log
top -b -n 1 | head -n 30 >> cpu.log
fi
}
#退出死迴圈的條件(可以選擇其他方式)
function exit_loop(){
if [ -e "io.log" ] && [ -e "cpu.log" ]; then
iolog_size=`du io.log | awk '{print $1}'`
cpulog_size=`du cpu.log | awk '{print $1}'`
total_size=$(($iolog_size+$cpulog_size))
if [ $total_size -gt 1024000 ];then
exit
fi
fi
}
#每隔兩秒執行一次,以避免佔用太多系統資源(如果選擇計劃任務的方式,可以去掉while迴圈)
while [ 2 -gt 1 ]
do
sleep 2
io_monitor
cpu_Mem_monitor
exit_loop
done
2、將指令碼放到後臺持續執行
nohup bash monitor.sh > nohup.log 2>&1 &
作者:董雙磊
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559758/viewspace-2678744/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cpu飆升排查命令
- CPU 飆升怎麼辦?
- 壞程式碼導致的效能問題大賞:CPU佔用飆到了900%!
- 在Docker中,如何控制容器佔用系統資源(CPU,記憶體)的份額?Docker記憶體
- 分享5款佔用系統資源少的軟體
- 系統空閒程式佔用大量CPU是什麼原因_系統空閒程式CPU使用率高怎麼解決
- Dubbo Hession反序列化導致CPU佔用飆高用例分析
- win10 2004系統cpu佔用高怎麼辦_win10 2004系統佔用cpu過高解決教程Win10
- windows10系統下wsappx程式佔用資源過多如何解決WindowsAPP
- win10系統explorer佔用cpu很高的解決方法Win10
- win10系統perl.exe佔用cpu怎麼解決_win10系統perl.exe佔用cpu如何處理Win10
- Win10系統下Microsoft Compatibility Telemetry程式佔用cpu高怎麼禁用Win10ROS
- Win10系統Runtimebroker.exe程式佔用cpu非常高如何解決Win10
- win10系統Antimalware Service Executable程式佔用cpu過高如何解決Win10
- win10系統下wmiproviderhost程式佔用大量cpu過高如何解決Win10IDE
- java程式佔用cpu異常升高Java
- win10系統資源管理器佔用CPU過高執行速度變慢如何解決Win10
- 在Linux中,如何查詢系統中佔用CPU最高的程序?Linux
- 查詢佔用資源高的JAVA程式碼Java
- win10系統下Conhost.exe程式佔用cpu率很高如何解決Win10
- Jtti:為什麼Linux系統的伺服器佔用資源更少?JttiLinux伺服器
- win10系統中csrss.exe程式佔用GPU資源高如何解決Win10GPU
- windows10系統下backgroundTaskHost佔用大量CPU如何解決Windows
- win10系統中WMI程式佔用cpu使用率高怎麼解決Win10
- win10系統下taskhost.exe佔用資源如何禁用Win10
- win10系統中“來自microsoft download、upload host”程式佔用cpu高如何關閉Win10ROS
- win10系統玩流放之路cpu佔用100%如何解決Win10
- win10系統BackgroundTransferHost.exe佔用CPU高怎麼辦Win10
- Win10系統下microsoft conmpatibility telemetry程式佔CPU高如何禁用Win10ROS
- Win10系統中斷程式佔用cpu100%怎麼辦 win10終端程式佔用100%電腦很卡如何處理Win10
- 運維告訴我CPU飆升300%,為什麼我的程式上線就奔潰了運維
- win10系統下sppsvc.exe佔用cpu高如何關閉Win10
- win10系統windows defender佔用CPU100怎麼解決Win10Windows
- Win10系統下火狐瀏覽器佔用CPU過高的解決方法Win10瀏覽器
- 資源記憶體佔用記憶體
- win10系統執行dnf時cpu佔用100怎麼解決Win10
- Win10系統cpu佔有率很高的解決方法Win10
- CPU 電源管理器:Linux 系統中 CPU 主頻的控制和管理Linux