JVM内存监控shell脚本

释放双眼,带上耳机,听听看~!

该shell脚本主要用于监控各个进程的jvm内存使用情况,脚本名称:jvm-monitor.sh,具体脚本如下:
[root@loong /]#more jvm-monitor.sh



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
1#!/bin/bash  
2export JAVA_PATH=/callcent/jdk1.6.0_25  
3export PATH=$PATH:$JAVA_PATH/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin  
4sysdate=date
5
6for pid in jps -v |grep weblogic|grep -v AdminServer |awk '{print $1}'
7
8do  
9addr=ifconfig -a|grep -w inet|grep -v 127.0.0.1|grep -v 172.16.1.1|awk '{print $2}'|cut -d : -f 2  
10java_name=$(ps -ef|grep weblogic|grep $pid|grep -v AdminServer)  
11name=echo ${java_name}|sed 's/^.\*-Dweblogic.Name=//g'|awk '{print $1}'
12
13#jvm内存监控  
14echo ###########################################  
15echo $sysdate  
16echo pid $pid  
17echo name $name  
18echo $addr
19
20if [ "$pid" = "" ]  
21then  
22echo "the program is not exists."  
23exit 0  
24fi
25
26heap=$(jmap -heap ${pid})
27
28eden=echo ${heap}|sed 's/^.*Eden Space://g'|sed 's/From Space.*$//g'|awk '{print $13}'|sed 's/%.*$//g'|cut -b 1-6
29from=echo ${heap}|sed 's/^.*From Space://g'|sed 's/To Space.*$//g'|awk '{print $13}'|sed 's/%.*$//g'|cut -b 1-6
30tospc=echo ${heap}|sed 's/^.*To Space://g'|sed 's/tenured generation.*$//g'|awk '{print $13}'|sed 's/%.*$//g'|cut -b 1-6
31oldge=echo ${heap}|sed 's/^.*PS Old Generation//g'|sed 's/Perm Generation.*$//g'|awk '{print $13}'|sed 's/%.*$//g'|cut -b 1-6
32perm=echo ${heap}|sed 's/^.*PS Perm Generation//g'|awk '{print $13}'|sed 's/%.*$//g'|cut -b 1-66
33
34echo "Eden Space: ${eden}%"  
35echo "From Space: ${from}%"  
36echo "To Space: ${tospc}%"  
37echo "Old Generation: ${oldge}%"  
38echo "Perm Generation: ${perm}%"
39
40eden1=gawk -v x=$eden -v y=1000 'BEGIN{printf "%.0f\n",x*y}'  
41from1=gawk -v x=$from -v y=1000 'BEGIN{printf "%.0f\n",x*y}'  
42tospc1=gawk -v x=$tospc -v y=1000 'BEGIN{printf "%.0f\n",x*y}'  
43oldge1=gawk -v x=$oldge -v y=1000 'BEGIN{printf "%.0f\n",x*y}'  
44perm1=gawk -v x=$perm -v y=1000 'BEGIN{printf "%.0f\n",x*y}'
45
46#取对应进程的jvm内存值  
47for name1 in $name  
48do
49
50if [ ${eden1} -ge "99999" ]  
51then  
52jvm=$jvm+${name1}+":Eden Space:"+${eden}+"%超阀值 "  
53fi
54
55if [ ${from1} -ge "99999" ]  
56then  
57jvm=$jvm+${name1}+":From Space:"+${from}+"%超阀值 "  
58fi
59
60if [ ${tospc1} -ge "99999" ]  
61then  
62jvm=$jvm+${name1}+":To Space:"+${topspc}+"%超阀值 "  
63fi
64
65if [ ${oldge1} -ge "99999" ]  
66then  
67jvm=$jvm+${name1}+":Old Generation:"+${oldge}+"%超阀值 "  
68fi
69
70if [ ${perm1} -ge "99999" ]  
71then  
72jvm=$jvm+${name1}+":Perm Generation:"+${perm}+"%超阀值 "  
73fi
74
75echo $jvm  
76done
77
78#端口监控  
79if [ "$name" = "baobiao" ]  
80then  
81port='91400'  
82fi
83
84if [ "$name" = "csr" ]  
85then  
86port='91200'  
87fi
88
89if [ "$name" = "sso" ]  
90then  
91port=91500  
92fi
93
94if [ "$name" = "gongdan" ]  
95then  
96port=91100  
97fi
98
99if [ "$name" = "manager" ]  
100then  
101port=91300  
102fi
103
104if [ "$name" = "cron" ]  
105then  
106port=91090  
107fi
108
109net=netstat -an |grep $port|grep LISTEN|grep $addr
110
111if [ "$net" = "" ]  
112then  
113p1=$p1+${port}+"端口异常"  
114fi
115
116#echo $pid  
117#echo $port  
118#echo $name
119
120done  
121#p2=$p1+"端口异常"
122
123#url监控  
124http=curl -I -m 10 -o /dev/null -s -w %{http_code}"\n" http://www.callcent.kefu.com/sso/jsp/login.jsp
125
126#echo $http
127
128if [ "$http" != "200" ]  
129then  
130http1="统一登陆页面http://www.xxxxxx.com/sso/jsp/login.jsp访问异常"  
131fi
132
133echo $p1  
134echo $addr  
135echo $http1
136
137#发送告警信息  
138if [ -n "$p1" -o -n "$http1" -o -n "$jvm" ]  
139then  
140curl -d "action=SendMessage&msg=ip:${addr} $jvm ${p1} ${http1};&usernames=user1;user2" http://172.xx.xx.xxx:8090/TestService.ashx  
141fi
142

通过定时任务调用该脚本(该脚本每30秒执行一次):
* * * * * /monitor/script/monitor19.sh >> /monitor/log.txt
[root@loong /]#more /monitor/script/monitor19.sh



1
2
3
4
5
6
7
8
9
10
11
12
1#!/bin/bash  
2export JAVA_PATH=/callcent/jdk1.6.0_25  
3export PATH=$PATH:$JAVA_PATH/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/usr/lib/mit/bin:/usr/lib/mit/sbin
4
5step=30 #间隔的秒数,不能大于60,表示每半分钟执行一次
6
7for (( i = 0; i < 60; i=(i+step) )); do  
8/monitor/script/jvm-monitor.sh  
9sleep $step  
10done  
11exit 0
12

给TA打赏
共{{data.count}}人
人已打赏
安全技术安全运维

Windows服务器如何发现被黑

2018-5-20 12:24:31

安全技术

node.js – JWT有效负载应该有多少信息?

2021-12-21 16:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索