1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
|
#!/bin/bash
#
os_check() {
if
[ -e
/etc/redhat-release
];
then
REDHAT=`
cat
/etc/redhat-release
|
cut
-d
' '
-f1`
else
DEBIAN=`
cat
/etc/issue
|
cut
-d
' '
-f1`
fi
if
[
"$REDHAT"
==
"CentOS"
-o
"$REDHAT"
==
"Red"
];
then
P_M=yum
elif
[
"$DEBIAN"
==
"Ubuntu"
-o
"$DEBIAN"
==
"ubutnu"
];
then
P_M=apt-get
else
Operating system does not support.
exit
1
fi
}
if
[ $LOGNAME != root ];
then
echo
"Please use the root account operation."
exit
1
fi
if
!
which
vmstat &>
/dev/null
;
then
echo
"vmstat command not found, now the install."
sleep
1
os_check
$P_M
install
procps -y
echo
"-----------------------------------------------------------------------"
fi
if
!
which
iostat &>
/dev/null
;
then
echo
"iostat command not found, now the install."
sleep
1
os_check
$P_M
install
sysstat -y
echo
"-----------------------------------------------------------------------"
fi
while
true
;
do
select
input
in
cpu_load disk_load disk_use disk_inode mem_use tcp_status cpu_top10 mem_top10 traffic quit;
do
case
$input
in
cpu_load)
#CPU利用率与负载
echo
"---------------------------------------"
i=1
while
[[ $i -
le
3 ]];
do
echo
-e
"\033[32m 参考值${i}\033[0m"
UTIL=`vmstat |
awk
'{if(NR==3)print 100-$15"%"}'
`
USER=`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: $USER"
echo
"System use: $SYS"
echo
"I/O wait: $IOWAIT"
i=$(($i+1))
sleep
1
done
echo
"---------------------------------------"
break
;;
disk_load)
#硬盘I/O负载
echo
"---------------------------------------"
i=1
while
[[ $i -
le
3 ]];
do
echo
-e
"\033[32m 参考值${i}\033[0m"
UTIL=`iostat -x -k |
awk
'/^[v|s]/{OFS=": ";print $1,$NF"%"}'
`
READ=`iostat -x -k |
awk
'/^[v|s]/{OFS=": ";print $1,$6"KB"}'
`
WRITE=`iostat -x -k |
awk
'/^[v|s]/{OFS=": ";print $1,$7"KB"}'
`
IOWAIT=`vmstat |
awk
'{if(NR==3)print $16"%"}'
`
echo
-e
"Util:"
echo
-e
"${UTIL}"
echo
-e
"I/O Wait: $IOWAIT"
echo
-e
"Read/s:\n$READ"
echo
-e
"Write/s:\n$WRITE"
i=$(($i+1))
sleep
1
done
echo
"---------------------------------------"
break
;;
disk_use)
#硬盘利用率
DISK_LOG=
/tmp/disk_use
.tmp
DISK_TOTAL=`
fdisk
-l |
awk
'/^Disk.*bytes/&&/\/dev/{printf $2" ";printf "%d",$3;print "GB"}'
`
USE_RATE=`
df
-h |
awk
'/^\/dev/{print int($5)}'
`
for
i
in
$USE_RATE;
do
if
[ $i -gt 90 ];
then
PART=`
df
-h |
awk
'{if(int($5)=='
''
$i
''
') print $6}'
`
echo
"$PART = ${i}%"
>> $DISK_LOG
fi
done
echo
"---------------------------------------"
echo
-e
"Disk total:\n${DISK_TOTAL}"
if
[ -f $DISK_LOG ];
then
echo
"---------------------------------------"
cat
$DISK_LOG
echo
"---------------------------------------"
rm
-f $DISK_LOG
else
echo
"---------------------------------------"
echo
"Disk use rate no than 90% of the partition."
echo
"---------------------------------------"
fi
break
;;
disk_inode)
#硬盘inode利用率
INODE_LOG=
/tmp/inode_use
.tmp
INODE_USE=`
df
-i |
awk
'/^\/dev/{print int($5)}'
`
for
i
in
$INODE_USE;
do
if
[ $i -gt 90 ];
then
PART=`
df
-h |
awk
'{if(int($5)=='
''
$i
''
') print $6}'
`
echo
"$PART = ${i}%"
>> $INODE_LOG
fi
done
if
[ -f $INODE_LOG ];
then
echo
"---------------------------------------"
rm
-f $INODE_LOG
else
echo
"---------------------------------------"
echo
"Inode use rate no than 90% of the partition."
echo
"---------------------------------------"
fi
break
;;
mem_use)
#内存利用率
echo
"---------------------------------------"
MEM_TOTAL=`
free
-m |
awk
'{if(NR==2)printf "%.1f",$2/1024}END{print "G"}'
`
USE=`
free
-m |
awk
'{if(NR==3) printf "%.1f",$3/1024}END{print "G"}'
`
FREE=`
free
-m |
awk
'{if(NR==3) printf "%.1f",$4/1024}END{print "G"}'
`
CACHE=`
free
-m |
awk
'{if(NR==2) printf "%.1f",($6+$7)/1024}END{print "G"}'
`
echo
-e
"Total: $MEM_TOTAL"
echo
-e
"Use: $USE"
echo
-e
"Free: $FREE"
echo
-e
"Cache: $CACHE"
echo
"---------------------------------------"
break
;;
tcp_status)
#网络连接状态
echo
"---------------------------------------"
COUNT=`
netstat
-antp |
awk
'{status[$6]++}END{for(i in status) print i,status[i]}'
`
echo
-e
"TCP connection status:\n$COUNT"
echo
"---------------------------------------"
;;
cpu_top10)
#占用CPU高的前10个进程
echo
"---------------------------------------"
CPU_LOG=
/tmp/cpu_top
.tmp
i=1
while
[[ $i -
le
3 ]];
do
#ps aux |awk '{if($3>0.1)print "CPU: "$3"% -->",$11,$12,$13,$14,$15,$16,"(PID:"$2")" |"sort -k2 -nr |head -n 10"}' > $CPU_LOG
ps
aux |
awk
'{if($3>0.1){{printf "PID: "$2" CPU: "$3"% --> "}for(i=11;i<=NF;i++)if(i==NF)printf $i"\n";else printf $i}}'
|
sort
-k4 -nr |
head
-10 > $CPU_LOG
#循环从11列(进程名)开始打印,如果i等于最后一行,就打印i的列并换行,否则就打印i的列
if
[[ -n `
cat
$CPU_LOG` ]];
then
echo
-e
"\033[32m 参考值${i}\033[0m"
cat
$CPU_LOG
> $CPU_LOG
else
echo
"No process using the CPU."
break
fi
i=$(($i+1))
sleep
1
done
echo
"---------------------------------------"
break
;;
mem_top10)
#占用内存高的前10个进程
echo
"---------------------------------------"
MEM_LOG=
/tmp/mem_top
.tmp
i=1
while
[[ $i -
le
3 ]];
do
#ps aux |awk '{if($4>0.1)print "Memory: "$4"% -->",$11,$12,$13,$14,$15,$16,"(PID:"$2")" |"sort -k2 -nr |head -n 10"}' > $MEM_LOG
ps
aux |
awk
'{if($4>0.1){{printf "PID: "$2" Memory: "$3"% --> "}for(i=11;i<=NF;i++)if(i==NF)printf $i"\n";else printf $i}}'
|
sort
-k4 -nr |
head
-10 > $MEM_LOG
if
[[ -n `
cat
$MEM_LOG` ]];
then
echo
-e
"\033[32m 参考值${i}\033[0m"
cat
$MEM_LOG
> $MEM_LOG
else
echo
"No process using the Memory."
break
fi
i=$(($i+1))
sleep
1
done
echo
"---------------------------------------"
break
;;
traffic)
#查看网络流量
while
true
;
do
read
-p
"Please enter the network card name(eth[0-9] or em[0-9]): "
eth
#if [[ $eth =~ ^eth[0-9]$ ]] || [[ $eth =~ ^em[0-9]$ ]] && [[ `ifconfig |grep -c "\<$eth\>"` -eq 1 ]]; then
if
[ `
ifconfig
|
grep
-c
"\<$eth\>"
` -
eq
1 ];
then
break
else
echo
"Input format error or Don't have the card name, please input again."
fi
done
echo
"---------------------------------------"
echo
-e
" In ------ Out"
i=1
while
[[ $i -
le
3 ]];
do
#OLD_IN=`ifconfig $eth |awk '/RX bytes/{print $2}' |cut -d: -f2`
#OLD_OUT=`ifconfig $eth |awk '/RX bytes/{print $6}' |cut -d: -f2`
OLD_IN=`
ifconfig
$eth |
awk
-F
'[: ]+'
'/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'
`
#CentOS6和CentOS7 ifconfig输出进出流量信息位置不同,CentOS6中RX与TX行号等于8,CentOS7中RX行号是5,TX行号是5,所以就做了个判断.
OLD_OUT=`
ifconfig
$eth |
awk
-F
'[: ]+'
'/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'
`
sleep
1
NEW_IN=`
ifconfig
$eth |
awk
-F
'[: ]+'
'/bytes/{if(NR==8)print $4;else if(NR==5)print $6}'
`
NEW_OUT=`
ifconfig
$eth |
awk
-F
'[: ]+'
'/bytes/{if(NR==8)print $9;else if(NR==7)print $6}'
`
IN=`
awk
'BEGIN{printf "%.1f\n",'
$((${NEW_IN}-${OLD_IN}))
'/1024/128}'
`
OUT=`
awk
'BEGIN{printf "%.1f\n",'
$((${NEW_OUT}-${OLD_OUT}))
'/1024/128}'
`
echo
"${IN}MB/s ${OUT}MB/s"
i=$(($i+1))
sleep
1
done
echo
"---------------------------------------"
break
;;
quit)
exit
0
;;
*)
echo
"---------------------------------------"
echo
"Please enter the number."
echo
"---------------------------------------"
break
;;
esac
done
done
|