系统信息采集
2024/7/16大约 3 分钟
系统信息采集
目的
分析系统资源性能瓶颈
功能
- 查看CPU利用率和负载
- 查看磁盘大小和I/O负载
- 查看内存使用率
- 查看TCP连接状态
- 查看CPU和内存占用最高10进程
- 查看网络流量
一、环境检测
#系统检测
sys_check(){
#判断系统
if [ -e /etc/redhat-release ];then
REDHAT=`cat /etc/redhat-release |awk '{print $1}'`
else
DEBIAN=`cat /etc/issue |awk '{print $1}'`
fi
#判断包管理方式
if [[ $REDHAT =~ 'CentOS|Red' ]];then
PM=yum
elif [[ $DEBIAN =~ 'Ubuntu|ubutnu' ]];then
PM=apt-get
else
echo -e "System does not support"
exit 1
fi
}
#判断用户身份
if [ $USER != root ];then
echo "Please use the root account operation"
exit 1
fi
#检测需要命令
if ! which vmstat &>/dev/null;then
echo "vmstat is install..."
sys_check
$PM install procps -y >/dev/null
if [ $? -ne 0 ];then
exit
fi
echo "-----complete-----"
fi
if ! which iostat &>/dev/null;then
echo "iostat is install..."
sys_check
$PM install sysstat -y >/dev/null
if [ $? -ne 0 ];then
exit
fi
echo "-----complete-----"
fi二、服务菜单
PS3="Input your choice: "
while :
do
select input in cpu_load disk_load mem_use tcp_status cpu_top10 mem_top10 traffic quit
do
case $input in
cpu_load)
cpu_load
break;;
disk_load)
disk_load
break;;
disk_inode)
disk_inode
break;;
mem_use)
mem_use
break;;
tcp_status)
tcp_status
break;;
cpu_top10)
cpu_top10
break;;
mem_top10)
mem_top10
break;;
traffic)
traffic
break;;
quit)
exit
*)
break;;
esac
done
done三、功能
1.CPU利用率与负载
UTIL=`vmstat |awk '{if(NR==3){print 100-$15"%"}}'`
USE=`vmstat |awk '{if(NR==3){print $13"%"}}'`
SYS=`vmstat |awk '{if(NR==3){print $14"%"}}'`
IOWAIT=`vmstat |awk '{if(NR==3){print $16"%"}}'`
echo "Util: $UTIL"
echo "User use: $USE"
echo "System use: $SYS"
echo "I/O wait": $IOWAIT二、磁盘大小与I/O负载
TOTAL=`fdisk -l |awk '/Disk.*bytes/ && /\/dev/{print $2,int($3)"GB"}'`
UTIL=`iostat |awk '/^[s,v]{OFS=": ";print $1,$NF"%"}'`
READ=`iostat |awk '/^[s,v]{OFS=": ";print $1,$6"KB"}'`
WRITE=`iostat |awk '/^[s,v]{OFS=": ";print $1,$7"KB"}'`
IOWAIT=`vmstat |awk '{if(NR==3){print $16"%"}}'`
echo "Disk: $TOTAL"
echo -e "Util:\n\t$UTIL"
echo -e "Read/s:\n\t$READ"
echo -e "Write/s:\n\t$WRITE"
echo "I/O wait: $IOWAIT"三、内存使用率
TOTAL=`free -m |awk '/^Mem/{print $2}'`
USE=`free |awk 'awk '/^Mem/{print $3}'`
RATE=$((USE/TOTAL))
echo "当前内存使用: $RATE%"四、TCP连接状态
COUNT=`ss -ant |awk '!/State/{status[$1]++}END{for(i in status)print i,status[i]}'`
echo -e "TCP connection status:\n\t$COUNT"五、CPU占用前10进程
CPU_LOG=/tmp/cpu_top10.log
ps aux |awk '{if($3!=0){{print "PID: "$2" CPU: "$3"% --> "}for(i=11;i<=NF;i++)if(i==NF)print $i"\n";else print $i}}' |sort -k4 -nr |head -10 >$CPU_LOG
if [[ -s $CPU_LOG ]]; then
cat $CPU_LOG
> $CPU_LOG
else
echo "No process using CPU"
break
fi六、内存占用前10进程
MEM_LOG=/tmp/cpu_top10.log
ps aux |awk '{if($4!=0){{print "PID: "$2" Memory: "$4"% --> "}for(i=11;i<=NF;i++)if(i==NF)print $i"\n";else print $i}}' |sort -k4 -nr |head -10 >$MEM_LOG
if [[ -s $MEM_LOG ]]; then
cat $MEM_LOG
> $MEM_LOG
else
echo "No process using Memory"
break
fi七、网络流量
while :
do
read -p "Please input your network card name: " eth
if [ `ifconfig |grep -c "\<$eth\>"` -eq 1 ];then
break
else
echo "Please recheck your network card name"
fi
done
#CentOS7版本与6版本不同
ORX=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'`
0TX=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'`
sleep 1
NRX=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'`
NTX=`ifconfig $eth |awk -F'[: ]+' '/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'`
IN=`awk 'BEGIN{printf "%.1f\n",'$(($NRX-$ORX))'/1024/128}'`
OUT=`awk 'BEGIN{printf "%.1f\n",'$(($NTX-$OTX))'/1024/128}'`
echo -e "recive: ${IN}MB/s\ntransmit: ${OUT}MB/s"贡献者
云影
