1 脚本功能
1 查看cpu利用率
2 硬盘I/O负载
3 查看硬盘利用率
4 硬盘inode利用率
5 查看聂村使用率
6 查看网络连接状态
7 查看cpu前10
8 占用内存高的前10个进程
2 Code
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() {
if ! command -v vmstat >/dev/null 2>&1; then
echo "安装vmstat命令:"
sleep 1
os_check
$P_M install procps -y
echo "vmstat命令安装成功"
fi
if ! command -v iostat >/dev/null 2>&1; then
echo "安装iostat命令:"
sleep 1
os_check
$P_M install sysstat -y
echo "iostat命令安装成功"
fi
}
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
}
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
}
if [ $USER != root ]; then
echo "请您使用root用户来操作"
exit 1
fi
install_tool
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
cpu_load)
get_cpu_load_info
break
;;
disk_load)
get_disk_load_info
break
;;
disk_use)
get_disk_use_info
break
;;
disk_inode)
get_disk_inode_info
break
;;
mem_use)
get_mem_use_info
break
;;
tcp_status)
get_tcp_status_info
break
;;
cpu_top10)
get_cpu_top10_info
break
;;
mem_top10)
get_mem_top10_info
break
;;
quit)
exit 1
break
;;
*)
echo "--------------------------"
echo "错误的数字,请输入正确的数字"
echo "--------------------------"
break
;;
esac
done
done
3 演示