Shell监控jvm发短信

2023-11-18

Shell脚本+jstat+crontab+curl 监控JVM发送短信

#!/bin/bash

## 定时监控本机器下所有java应用的 JVM信息
# 定时任务配置
# crontab -e
# 写入如下,5分钟执行一次检测
# */5 * * * * /home/admin/monitor-jstat.sh >> /data/logs/monitor/monitor.log 2>&1

#导入环境变量,需要查看当前的用户的环境变量,否则会出现jps ifconfig环境变量不可用错误提示
export PATH=$PATH:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/data/jdk1.8.0_181/bin:/home/admin/.local/bin:/home/admin/bin

# 老年代告警阈值
oldwarn="99000"
# 元空间(永久代)告警阈值
metawarn="99900"

# 手机号码,多个用逗号隔开
mobile="17727821863"
# 短信发送url地址
sendsms="http://api.pureh2b.com/dreamWebSms/batchSend"
jsonhead="Content-type:application/json"

## 当前日期
sysdate=`date`
## 当前服务器IP地址
addr=`ifconfig -a|grep -w inet|grep -v 127.0.0.1|grep -v 172.16.1.1|awk '{print $2}'|cut -d : -f 2`

for pid in `jps -v |grep -v Jps |grep -v logstash-watch-collection |awk '{print $1}'`

do
 ## 应用名称
 name=`jps -v |grep -v Jps |grep -v logstash-watch-collection |grep $pid |awk '{print $2}'`

 #jvm内存监控
 #echo "##################开始Java应用:${name}内存监控############################"
 #echo "监控日期:     $sysdate"
 #echo "进程PID:      $pid"
 #echo "进程名称:     $name"
 #echo "当前服务器IP: $addr"

 # 堆栈信息
 jstat=$(jstat -gcutil ${pid})
 #echo -e "jstat: \n $jstat"
 #S0=$(echo ${jstat}|sed -n '2p' |awk '{print $1}')
 #S0=$(echo ${jstat}|awk '{print $12}')
 #echo $S0

 # 新生代
 eden=$(echo ${jstat}|awk '{print $14}')
 from=$(echo ${jstat}|awk '{print $12}')
 tospc=$(echo ${jstat}|awk '{print $13}')
 # 老年代
 oldge=$(echo ${jstat}|awk '{print $15}')
 # 永久代 JDK8已经废弃改用 元空间代替
 meta=$(echo ${jstat}|awk '{print $16}')

 #echo "Eden Space:           ${eden}%"
 #echo "From Space:           ${from}%"
 #echo "To Space:             ${tospc}%"
 #echo "Old Generation:       ${oldge}%"
 #echo "Meta Space:           ${meta}%"

 ## 将读取到的各区的值*1000,以便做下一次的比较操作
 #eden1=`gawk -v x=$eden -v y=1000 'BEGIN{printf "%.0f\n",x*y}'`
 #from1=`gawk -v x=$from -v y=1000 'BEGIN{printf "%.0f\n",x*y}'`
 #tospc1=`gawk -v x=$tospc -v y=1000 'BEGIN{printf "%.0f\n",x*y}'`
 oldge1=`gawk -v x=$oldge -v y=1000 'BEGIN{printf "%.0f\n",x*y}'`
 meta1=`gawk -v x=$meta -v y=1000 'BEGIN{printf "%.0f\n",x*y}'`

 #echo "Eden*100 Space:           ${eden1}"
 #echo "From*100 Space:           ${from1}"
 #echo "To*100 Space:             ${tospc1}"
 #echo "Old*100 Generation:       ${oldge1}"
 #echo "Meta*1000 Space:          ${meta1}"


 #if [ ${eden1} -ge "99999" ]
 #then
   #jvm=$jvm+${name}+":Eden Space:"+${eden}+"%超阀值 "
 #fi

 #if [ ${from1} -ge "99999" ]
 #then
   #jvm=$jvm+${name}+":From Space:"+${from}+"%超阀值 "
 #fi

 #if [ ${tospc1} -ge "99999" ]
 #then
   #jvm=$jvm+${name}+":To Space:"+${topspc}+"%超阀值 "
 #fi

 # 仅监控 老年代和元空间,超过90以上报警
 jvm=
 if [ ${oldge1} -ge ${oldwarn} ]
 then
   jvm="${jvm}[老年代 ${oldge}%超阀值]"
 fi
 if [ ${meta1} -ge ${metawarn} ]
 then
   jvm="${jvm}[元空间(永久代) ${meta}%超阈值]"
 fi

 if [ ! -n "$jvm" ]
 then
   echo "应用:${name}-JVM信息正常"
 else
   jvm="应用${name}的JVM告警信息:${jvm}"

   echo "监控日期:     $sysdate"
   echo "进程PID:      $pid"
   echo "进程名称:     $name"
   echo "当前服务器IP: $addr"
   echo $jvm

   #echo "JVM告警信息:${jvm}"
   smsContent='{"mobile":"'$mobile'","content":"'$jvm'","userid":"WL0001","pwd":"123456"}'
   #echo "JVM告警发送短信内容: ${smsContent}"
   # -s 不输出请求信息
   smsResult=$(curl -H ${jsonhead} -X POST -s -d "${smsContent}" ${sendsms})
   #echo "短信返回结果:${smsResult}"
 fi
 #echo "##################结束Java应用:${name}内存监控############################"
done

脚本Github地址
参考文章-JVM内存监控shell脚本

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell监控jvm发短信 的相关文章

  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • ReferenceError:MongoDB shell 中未定义 require

    我尝试通过 Windows 命令 Windows 8 1 从 Mongo 客户端连接 MongoDB 当我使用require 在 javascript 中 我遇到如下错误 有人有同样的问题吗 我有错过任何一个吗require有关的npm安装
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Linux 中的无缓冲 I/O

    我正在写入大量的数据 这些数据数周内都不会再次读取 由于我的程序运行 机器上的可用内存量 显示为 空闲 或 顶部 很快下降 我的内存量应用程序使用量不会增加 其他进程使用的内存量也不会增加 这让我相信内存正在被文件系统缓存消耗 因为我不打算
  • 如何使用 xterm.js 创建基于 Web 的终端以 ssh 进入本地网络上的系统

    我偶然发现了这个很棒的图书馆xterm js https xtermjs org 这也是 Visual Studio Code 终端的基础 我有一个非常普遍的问题 我想通过基于网络的终端 不在网络中 可能位于 aws 服务器上 访问本地网络
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 如何根据 HTTP 请求使用 Python 和 Flask 执行 shell 命令并流输出?

    下列的这个帖子 https stackoverflow com questions 15092961 how to continuously display python output in a webpage 我能够tail f网页的日志
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • if [ -z "${FILE_LIST}" ] 中的 -z 是什么

    遇到了这个 什么是 z在 shell 脚本中if z FILE LIST 是相同的test And man test gives z STRING the length of STRING is zero 注意 在某些平台上 是一个符号链接
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 如何使用shell脚本从json字符串中grep特定字段值[重复]

    这个问题在这里已经有答案了 下面是文件中可用的 JSON 字符串 我需要从中提取值status在 shell 脚本中 预期输出 status success 响应 json eventDate null dateProccessed nul

随机推荐