Linux Shell 脚本实战 收集系统信息用于分析性能瓶颈

1 脚本功能


1 查看cpu利用率
2 硬盘I/O负载
3 查看硬盘利用率
4 硬盘inode利用率
5 查看聂村使用率
6 查看网络连接状态
7 查看cpu前10
8 占用内存高的前10个进程

2 Code

 #!/bin/bash
PS3="请您选择: "

########操作系统检测函数########
os_check() {
  if [ -e /etc/redhat-release ]; then
    REDHAT=$(cat /etc/redhat-release | awk -F " " '{print $1}')
  else
    DEBIAN=$(cat /etc/issue | awk -F " " '{print $1}')
  fi

  if [ "$REDHAT" == "CentOS" -o "$REDHAT" == "Red" ]; then
    P_M=yum
  elif [ "$DEBIAN" == "Ubuntu" -o "$DEBIAN" == "ubutnu" ]; then
    P_M=apt-get
  else
    echo "不支持当前操作系统..."
    exit 1
  fi
}

########环境安装函数########
install_tool() {
  #检查vmstat命令
  if ! command -v vmstat >/dev/null 2>&1; then
    echo "安装vmstat命令:"
    sleep 1
    os_check
    $P_M install procps -y
    echo "vmstat命令安装成功"
  fi

  #检查iostat
  if ! command -v iostat >/dev/null 2>&1; then
    echo "安装iostat命令:"
    sleep 1
    os_check
    $P_M install sysstat -y
    echo "iostat命令安装成功"
  fi
}

########查看cpu########
get_cpu_load_info() {
  echo "############查看CPU利用率与负载############"
  for ((i = 1; i <= 3; i++)); do
    echo "参考值: ${i}"
    UTIL=$(vmstat | awk '{if(NR==3)print 100-$15"%"}')
    USER=$(vmstat | awk '{if(NR==3)print $13"%"}')
    SYSTEM=$(vmstat | awk '{if(NR==3)print $14"%"}')
    IOWAIT=$(vmstat | awk '{if(NR==3)print $16"%"}')

    echo "CPU利用率为: ${UTIL}"
    echo "用户使用率为:${USER}"
    echo "系统使用率为: ${SYSTEM}"
    echo "IO等待: ${IOWAIT}"
    sleep 1
  done
}
########查看磁盘I/0负载########
get_disk_load_info() {
  echo "############查看磁盘I/O负载##############"
  for ((i = 1; i <= 3; i++)); do
    echo "sda 参考值: ${i}"
    UTIL=$(iostat -x -k | awk '/sda/{OFS=": ";print $NF"%"}')
    READ=$(iostat -x -k | awk '/sda/{OFS=": ";print $6"KB/S"}')
    WRITE=$(iostat -x -k | awk '/sda/{OFS=": ";print $7"KB/S"}')
    IOWAIT=$(vmstat | awk '{if(NR==3)print $16"%"}')

    echo "磁盘使用率为: ${UTIL}"
    echo "磁盘读取速度:${READ}"
    echo "磁盘写速度为: ${WRITE}"
    echo "IO等待: ${IOWAIT}"
    sleep 1
  done
}

########查看硬盘使用率########
get_disk_use_info() {
  echo "############查看硬盘使用率##############"
  DISK_TOTAL=$(fdisk -l | awk '/^Disk.*bytes/&&/\/dev/{printf $2 " "; printf "%d",$3;if(NR!=19) print"GB";else print "MB"}')
  echo -e "硬盘大小为:\n${DISK_TOTAL}"

  USE_RATE=$(df -h | awk '/^\/dev/{ if(int($90)>=90) { printf $1;print ":" $5}}')

  if [ -z "${USE_RATE}" ]; then
    echo "磁盘使用率没有大于90%的分区"
  else
    echo -e "磁盘使用率大于90%的分区为:\n${USE_RATE}"
  fi
}

########查看inode利用率########
get_disk_inode_info() {
  echo "########查看inode利用率########"
  USE_RATE=$(df -i | awk '/^\/dev/{if(int($5)>=90){ print "Filesystem:" $1 "  Mounted on:"  $6 "  IUse:"  $5"%"}}')
  if [ -n "${USE_RATE}" ]; then
    echo -e "inode大于90%的分区为:\n${USE_RATE}"
  else
    echo "inode使用率没有大于90%的分区"
  fi
}

########查看内从使用率########
get_mem_use_info() {
  echo "########查看内从使用率########"
  MEM_TOTAL=$(free -m | awk '{if(NR==2)printf "%.1f",$2/1024}END {print "G"}')
  echo "内存总大小为: ${MEM_TOTAL}"
  MEM_USE=$(free -m | awk '{if(NR==2)printf "%.1f",$3/1024}END {print "G"}')
  echo "内存使用了:${MEM_USE}"
  MEM_FREE=$(free -m | awk '{if(NR==2)printf "%.1f",$4/1024}END {print "G"}')
  echo "空闲内存:${MEM_FREE}"
  MEM_CACHE=$(free -m | awk '{if(NR==2)printf "%.1f",$6/1024}END {print "G"}')
  echo "内存Cache:${MEM_CACHE}"
}

########查看网络连接状态########
get_tcp_status_info() {
  echo "########查看网络连接状态########"
  COUNT=$(ss -ant | awk '!/State/{status[$1]++}END{for(i in status) print i,status[i]}')
  echo -e "网络连接状态为:\n${COUNT}"
}

########占用CPU高的前10个进程########
get_cpu_top10_info() {
  echo "########占用CPU高的前10个进程########"
  CPU_LOG=/tmp/cpu_top.tmp
  ps aux | awk '{if($3>0.1){{printf "pid: " $2 " cpu: " $3} for(i=11;i<=NF;i++)if(i==NF)print $i;else printf " " $i}}' | sort -k4 -nr | head -10 >>$CPU_LOG

  if [[ -n $(cat $CPU_LOG) ]]; then
    cat $CPU_LOG
  else
    echo "没有进程使用CPU"
  fi

  rm -rf $CPU_LOG
}

########占用内存高的前10个进程########
get_mem_top10_info() {
  echo "########占用内存高的前10个进程########"
  MEM_LOG=/tmp/mem_top.tmp
  ps aux | awk '{if($4>0.1){{printf "Pid: " $2 " MEM: "  $4 }for(i=11;i<=NF;i++)if(i==NF)print " " $i;else printf " " $i}}' | sort -k4 -nr | head -10 >>$MEM_LOG

  if [[ -n $(cat $MEM_LOG) ]]; then
    cat ${MEM_LOG}
  else
    echo "没用进程使用内存"
  fi

  rm -rf $MEM_LOG
}

#1 必须使用root用户才能执行当前脚本
if [ $USER != root ]; then
  echo "请您使用root用户来操作"
  exit 1
fi

#2 安装环境
install_tool

#3 查看系统信息
while true; do
  select item in cpu_load disk_load disk_use disk_inode mem_use tcp_status cpu_top10 mem_top10 quit; do
    case $item in
    ## 3.1 查看cpu利用率
    cpu_load)
      get_cpu_load_info
      break
      ;;
    ## 3.2 硬盘I/O负载
    disk_load)
      get_disk_load_info
      break
      ;;
    ## 3.3 查看硬盘利用率
    disk_use)
      get_disk_use_info
      break
      ;;
    ## 3.4 硬盘inode利用率
    disk_inode)
      get_disk_inode_info
      break
      ;;
    ## 3.5 查看聂村使用率
    mem_use)
      get_mem_use_info
      break
      ;;
    ## 3.6 查看网络连接状态
    tcp_status)
      get_tcp_status_info
      break
      ;;
    ##3.7 查看cpu前10
    cpu_top10)
      get_cpu_top10_info
      break
      ;;
    ##3.8 占用内存高的前10个进程
    mem_top10)
      get_mem_top10_info
      break
      ;;
    ##3.9 退出
    quit)
      exit 1
      break
      ;;
      ##3.10其它
    *)
      echo "--------------------------"
      echo "错误的数字,请输入正确的数字"
      echo "--------------------------"
      break
      ;;
    esac
  done
done


3 演示

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

响彻天堂丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值