使用该脚本能自行判断系统内存使用情况是否超出设定百分比
能在超出预警值时执行重启程式的操作
能记录重启过程,并将具体log邮件发送给指定收信人
可以设定crontab排程,达成每隔一段时间运行一次
这一步博主不会截图做傻瓜教程,但每一步都不会漏,看不懂的小伙伴可以百度找个有图教程。以qq邮箱为例,进入设置->常规->pop3/imap/smtp··->imap/smtp服务,点击开启,会生成一个授权码,把这个授权码保存下来备用
输入以下命令编辑mail.rc文件
vim /etc/mail.rc
在文件末尾追加以下配置内容
t from=heicaijun@qq.com #这里设定发信人的邮箱t smtp=smtp.qq.com #这里设定qq的smtp服务器,其他邮箱可以参考百度t smtp-auth-ur=heicaijun@qq.com #这里设定用户名t smtp-auth-password=sahflkhsaffshaf #这里设定你上一步保存的授权码t smtp-auth=login #这里设为login#下面是ssl加密相关的配置#t smtp-u-starttls 这里是不需要配置的,很多地方没说明,配置了反而会验证失败,所以我注释掉;t ssl-verify=ignoret nss-config-dir=/root/.certs
使用以下命令测试邮件是否成功发送,邮箱填你自己的,如果报错请直接百度报错部分解决。
echo "测试邮件正文部分"|mail -s "测试邮件标题部分" heicaijun@qq.com
下载地址以下是脚本文件部分,请根据自己的实际情况修改。
#!/bin/bash # powered by heicaijun# 2020/04/27####################x分之一的导数################################### 以下为配置部分############### 设置的告警值为50%(即使用超过50%的时候告警)。 mem_warn=0.50# log记录位置,每天记录在一个log上datetime=$(date -d "today" +"%y-%m-%d")log_dir="/home/p4fdc/peakperformance/fwlog/memhistory_${datetime}.log"mail_temp=/home/p4fdc/peakperformance/memmonitor.logmail_addr=heicaijun@qq.com###################################################### 该函数是启动java程式的函数function startfw(){startresult=`/home/p4fdc/peakperformance/start${fwid}.sh`#将relea memory ok !记录到log日志中data4="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 重启程式成功,详细log如下:\n[stop运行结果为:] ${stopresult};\n[start运行结果为:] ${startresult}"echo -e "${data4}" >> ${log_dir}echo "--->第${restarttime}次释放内存完成 ! " >> ${log_dir}}# 该函数是发送邮件的函数function ndmail(){# 将需要发送的内容记录在mailtemp的缓存log中echo -e "${data1}\n${data2}\n${data4}" >> ${mail_temp}# 将需要发送的内容输出到正文,并将之前缓存的log以附件的形式发送给收信人,-a后接的是附件部分echo -e "${data1}\n${data2}\n${data3}\n\n以上,请关注!" | mail -s "${mailtitle}" -a ${mail_temp} ${mail_addr}# 发送完成后rm -f ${mail_temp}}echo "============================" >> ${log_dir}echo "start memmonitor.sh..." >> ${log_dir}#系统分配的区总量 mem_total=`free -m | awk 'nr==2' | awk '{print $2}'` #当前剩余的大小 mem_free=`free -m | awk 'nr==2' | awk '{print $4}'` #当前已使用的ud大小 mem_ud=`free -m | awk 'nr==2' | awk '{print $3}'` #则计算当前剩余ud所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0 mem_per=0`echo "scale=2;$mem_ud/$mem_total" | bc`data1="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 已使用内存百分比:${mem_per#*.}%,已使用:${mem_ud}mb,总内存:${mem_total}mb" echo -e $data1 >> ${log_dir} #当前占用百分比与告警值进行比较(当大于告警值时会返回1,小于时会返回0 ) mem_now=`expr $mem_per \> $mem_warn` echo "是否大于告警值[1大于,0小于]:${mem_now}" >> ${log_dir}#如果当前使用超过50%(上面的返回值等于0),释放内存 if (($mem_now == 1)); then秋天里的第一杯奶茶是什么意思 # 将爱存在歌词邮件的标题设置为alarm级别mailtitle="[alarm]t4 ap1 out of memory"echo -e "超过设定的报警值${mem_warn#*.}%..." >> ${log_dir}#获取目前占用内存最高的程式的dfidfwid=`ps -eo pid,args --sort=-pmem |head -n 2|awk 'nr==2' | awk '{print $4}'`fwid=${fwid#*_}fwmem=`ps -eo pmem --sort=-pmem |head -n 2|awk 'nr==2'`echo -e "${fwid}占用内存达${fwmem}%" >> ${log_dir}data2="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 超过设定的报警值${mem_warn#*.}%,其中${fwid}占用内存达${fwmem}%,执行重启${fwid}操作"#执行重启程式的操作echo "开始执行重启${fwid}操作..." >> ${log_dir}stopresult=`/home/p4fdc/peakperformance/stop${fwid伊索寓言的故事}.sh -f`if [[ $stopresult =~ "successfully" ]]; thenrestarttime="一"startfwdata3="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 重启程式成功,详细log请查看附件"ndmailel# 以下多判断了2次,其实一次基本够了,因为配合kill -9基本不会出现杀不掉程式的问题。stopresult=`/home/p4fdc/peakperformance/stop${fwid}.sh -f`if [[ $stopresult =~ "successfully" ]]; thenrestarttime="二"startfwdata3="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 重启程式成功,详细log请查看附件"ndmailelstopresult=`/home/p4fdc/peakperformance/stop${fwid}.sh -f`if [[ $stopresult =~ "successfully" ]]; thenrestarttime="三"startfwdata3="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 重启程式成功,详细log请查看附件"ndmailelstartresult=`/home/p4fdc/peakperformance/start${fwid}.sh`data4="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 重启程式失败,详细log如下\n[stop运行结果为:] ${stopresult};\n[start运行结果为:] ${startresult}"echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!! " >> ${log_dir}echo -e "${data4}" >> ${log_dir}echo "--->三次尝试释放内存失败,请手动检查 ! " >> ${log_dir}echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!! " >> ${log_dir}mailtitle="[error]t4 ap1 out of memory"data3="[$(date -d "today" +"%y-%m-%d-%h-%m-%s")] 三次尝试释放内存失败,重启程式失败,详细log请查看附件"ndmailfifififiecho "============================" >> ${log_dir}
在设定crontab排程的时候一定要注意,crontab默认不会加载环境变量,所以在运行java程式的时候,会出现找不到环境变量的问题。所以需要在启动脚本前调用./etc/profile;,另外,由于排程是默认在ur目录下运行的,所以当你的脚本出现相对路径的时候可能会出错,所以建议加个cd /脚本目录/脚本.sh;
以下为完整过程
crontab -e在文件末尾追加以下排程
# 以下6段(用空格隔开的)分别代表 分 时 日 月 年 需要运行的代码,*表示匹配所有时间段,30代表30分钟,*/1代表能被1整除的小时。所以以下排程的完整意思是每小时的30分都运行一下memmonitor.sh, 30 */1 * * * ./etc/profile;cd /home/p4fdc/peakperformance/;/home/p4fdc/peakperformance/memmonitor.sh > /dev/null
原文地址:/d/file/titlepic/12785448.html
本文发布于:2023-04-03 22:00:02,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/04f633369353b39ca19493c369a7ceff.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Linux服务器内存监控—每小时检查&超出发送邮件&重启占用最高的Java程式.doc
本文 PDF 下载地址:Linux服务器内存监控—每小时检查&超出发送邮件&重启占用最高的Java程式.pdf
留言与评论(共有 0 条评论) |