抓取占用系统资源的进程CPU飙升

博客给出了使用vim启动monitor.sh的操作,还提供了查看日志的示例,如使用cat命令查看cpu.log。这些操作与信息技术领域的开发工具使用相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vim monitor.sh

#!/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

启动

nohup bash monitor.sh > nohup.log 2>&1 &

示例:

cat cpu.log

 

/*********右按键扫描*********/ uchar Right_key_boot() { /**************************/ if(Right_Key_EN==0)return(0); else if(Right_Espresso_Button!=1&&Right_Key_LED) { while(Right_Espresso_Button!=1&&Right_Espresso_Press_Bit==0) { delay_us(1); if(Right_Key_Shake_Count++>=10) { Right_Espresso_Press_Bit=1; Right_Key_Shake_Count=10; } } if(Right_Espresso_Press_Bit) { if(Right_Lungo_Button!=1||Right_Play_Button!=1||Right_Key_Long_Press_Bit)return(0); else if(Right_Key_Press_Time>30) { Right_Espresso_Press_Bit=0; Right_Key_Long_Press_Bit=1; return(Right_Espresso_Button_Long_Press); } } } else if(Right_Espresso_Press_Bit&&Right_Key_Long_Press_Bit!=1) { Right_Espresso_Press_Bit=0; return(Right_Espresso_Button_Press); } /**************************/ else if(Right_Lungo_Button!=1&&Right_Key_LED) { while(Right_Lungo_Button!=1&&Right_Lungo_Press_Bit==0) { delay_us(1); if(Right_Key_Shake_Count++>=10) { Right_Lungo_Press_Bit=1; Right_Key_Shake_Count=10; } } if(Right_Lungo_Press_Bit) { if(Right_Espresso_Button!=1||Right_Play_Button!=1||Right_Key_Long_Press_Bit)return(0); else if(Right_Key_Press_Time>30) { Right_Lungo_Press_Bit=0; Right_Key_Long_Press_Bit=1; return(Right_Lungo_Button_Long_Press); } } } else if(Right_Lungo_Press_Bit&&Right_Key_Long_Press_Bit!=1) { Right_Lungo_Press_Bit=0; return(Right_Lungo_Button_Press); } /**************************/ else if(Right_Play_Button!=1) { while(Right_Play_Button!=1&&Right_Play_Press_Bit==0) { delay_us(1); if(Right_Key_Shake_Count++>=10) { Right_Play_Press_Bit=1; Right_Key_Shake_Count=10; } } if(Right_Play_Press_Bit) { if(Right_Espresso_Button!=1||Right_Lungo_Button!=1||Right_Key_Long_Press_Bit)return(0); else if(Right_Key_Press_Time>30) { Right_Play_Press_Bit=0; Right_Key_Long_Press_Bit=1; return(Right_Play_Button_Long_Press); } } } else if(Right_Play_Press_Bit&&Right_Key_Long_Press_Bit!=1) { Right_Play_Press_Bit=0; return(Right_Play_Button_Press); } /**************************/ else { Right_Key_Press_Time=0; Right_Key_Press_Bit=0; Right_Key_Long_Press_Bit=0; Right_Key_Shake_Count=0; Right_Espresso_Press_Bit=0; Right_Lungo_Press_Bit=0; Right_Play_Press_Bit=0; } //按键按下定时,按键按下标志,按键长按标志,按键防抖计时器 return(0); }
03-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值