linux监控cpu和内存使用情况,发送邮件

Unreal5(虚幻五) 实现UI与C++代码逻辑的交互 保姆级教程 本人有Unity基础,刚学UE几天,把这一套处理流程记录一下备用。 阅读详情

linux监控cpu和内存使用情况,发送邮件

2018年08月01日 16:06:45 阅读数:66更多

个人分类: Linux

目录

1.整体架构图

2.代码

3.邮件发送过慢的问题


这几天老大安排做linux服务器的工具,又接了几个巨坑,不过还是get新技能点。

1.整体架构图

    主要功能 :监控linux的cpu和内存使用率,当频率过高时,发送邮件提醒功能。

    这里的SendMail工具类在上一章节写过,需要的朋友可以去看下,付链接

        https://mp.youkuaiyun.com/postedit/81332504

     还有一个发送邮件问题,在linux上发送邮件出现延迟问题,需要去配置一下,第三点会讲下

2.代码

    cpuinfo()  读取linux下的/proc/stat文件,获取cpu信息。

    cpuUsage()  获取两次cpuinfo的内容,比较两次的差别,得到cpu使用率。

   memoryUsage()  读取linux下的/proc/meminfo文件,获取内存信息。

   main() 主入口,当使用率过高,定时发送邮件提醒。

 
  1. package LinuxMonitorUtils;

  2.  
  3. import java.io.BufferedReader;

  4. import java.io.FileInputStream;

  5. import java.io.InputStreamReader;

  6. import java.util.ArrayList;

  7. import java.util.HashMap;

  8. import java.util.List;

  9. import java.util.Map;

  10. import java.util.StringTokenizer;

  11. import java.util.Timer;

  12. import java.util.TimerTask;

  13.  
  14. import sendMailUtils.SendMail;

  15.  
  16. public class OSUtils {

  17.  
  18. /**

  19. * 功能:获取Linux系统cpu使用率

  20. */

  21. public static float cpuUsage() {

  22. try {

  23. Map<?, ?> map1 = OSUtils.cpuinfo();

  24. Thread.sleep(5 * 1000);

  25. Map<?, ?> map2 = OSUtils.cpuinfo();

  26.  
  27. long user1 = Long.parseLong(map1.get("user").toString());

  28. long nice1 = Long.parseLong(map1.get("nice").toString());

  29. long system1 = Long.parseLong(map1.get("system").toString());

  30. long idle1 = Long.parseLong(map1.get("idle").toString());

  31.  
  32. long user2 = Long.parseLong(map2.get("user").toString());

  33. long nice2 = Long.parseLong(map2.get("nice").toString());

  34. long system2 = Long.parseLong(map2.get("system").toString());

  35. long idle2 = Long.parseLong(map2.get("idle").toString());

  36.  
  37. long total1 = user1 + system1 + nice1;

  38. long total2 = user2 + system2 + nice2;

  39. float total = total2 - total1;

  40.  
  41. long totalIdle1 = user1 + nice1 + system1 + idle1;

  42. long totalIdle2 = user2 + nice2 + system2 + idle2;

  43. float totalidle = totalIdle2 - totalIdle1;

  44.  
  45. float cpusage = (total / totalidle) * 100;

  46. System.out.println("cpu使用率:"+ cpusage+"%");

  47. return cpusage;

  48. } catch (InterruptedException e) {

  49. e.printStackTrace();

  50. }

  51. return 0;

  52. }

  53.  
  54. /**

  55. * 功能:CPU使用信息

  56. */

  57. public static Map<?, ?> cpuinfo() {

  58. InputStreamReader inputs = null;

  59. BufferedReader buffer = null;

  60. Map<String, Object> map = new HashMap<String, Object>();

  61. try {

  62. inputs = new InputStreamReader(new FileInputStream("/proc/stat"));

  63. buffer = new BufferedReader(inputs);

  64. String line = "";

  65. while (true) {

  66. line = buffer.readLine();

  67. if (line == null) {

  68. break;

  69. }

  70. if (line.startsWith("cpu")) {

  71. StringTokenizer tokenizer = new StringTokenizer(line);

  72. List<String> temp = new ArrayList<String>();

  73. while (tokenizer.hasMoreElements()) {

  74. String value = tokenizer.nextToken();

  75. temp.add(value);

  76. }

  77. map.put("user", temp.get(1));

  78. map.put("nice", temp.get(2));

  79. map.put("system", temp.get(3));

  80. map.put("idle", temp.get(4));

  81. map.put("iowait", temp.get(5));

  82. map.put("irq", temp.get(6));

  83. map.put("softirq", temp.get(7));

  84. map.put("stealstolen", temp.get(8));

  85. break;

  86. }

  87. }

  88. } catch (Exception e) {

  89. e.printStackTrace();

  90. } finally {

  91. try {

  92. buffer.close();

  93. inputs.close();

  94. } catch (Exception e2) {

  95. e2.printStackTrace();

  96. }

  97. }

  98. return map;

  99. }

  100.  
  101. /**

  102. * 功能:内存使用率

  103. */

  104. public static long memoryUsage() {

  105. Map<String, Object> map = new HashMap<String, Object>();

  106. InputStreamReader inputs = null;

  107. BufferedReader buffer = null;

  108. try {

  109. inputs = new InputStreamReader(new FileInputStream("/proc/meminfo"));

  110. buffer = new BufferedReader(inputs);

  111. String line = "";

  112. while (true) {

  113. line = buffer.readLine();

  114. if (line == null)

  115. break;

  116. int beginIndex = 0;

  117. int endIndex = line.indexOf(":");

  118. if (endIndex != -1) {

  119. String key = line.substring(beginIndex, endIndex);

  120. beginIndex = endIndex + 1;

  121. endIndex = line.length();

  122. String memory = line.substring(beginIndex, endIndex);

  123. String value = memory.replace("kB", "").trim();

  124. map.put(key, value);

  125. }

  126. }

  127.  
  128. long memTotal = Long.parseLong(map.get("MemTotal").toString());

  129. System.out.println("内存总量"+memTotal+"KB");

  130. long memFree = Long.parseLong(map.get("MemFree").toString());

  131. System.out.println("剩余内存"+memFree+"KB");

  132. long memused = memTotal - memFree;

  133. System.out.println("已用内存"+memused+"KB");

  134. long buffers = Long.parseLong(map.get("Buffers").toString());

  135. long cached = Long.parseLong(map.get("Cached").toString());

  136.  
  137. double usage = (double) (memused - buffers - cached) / memTotal * 100;

  138. System.out.println("内存使用率"+usage+"%");

  139.  
  140. return memFree;

  141. } catch (Exception e) {

  142. e.printStackTrace();

  143. } finally {

  144. try {

  145. buffer.close();

  146. inputs.close();

  147. } catch (Exception e2) {

  148. e2.printStackTrace();

  149. }

  150. }

  151. return 0;

  152. }

  153.  
  154.  
  155. /**

  156. * 主入口

  157. * @param args

  158. */

  159. public static void main(String[] args) {

  160. // //1. 创建计时器类

  161. // Timer timer = new Timer();

  162. // //2. 创建任务类

  163. // TimerTask task = new TimerTask() {

  164. // @Override

  165. // public void run() {

  166. //cup使用率

  167. float cpuUsage = cpuUsage();

  168. if(cpuUsage > 10.0 ){

  169. SendMail.sendMail("xxxxx@qq.com", "服务器cpu使用率过高,请注意查看", "服务器提醒");

  170. }

  171. //内存使用情况

  172. long memoryUsage = memoryUsage();

  173. if((memoryUsage/1024) < 100){

  174. SendMail.sendMail("xxxxx@qq.com","服务器内存剩余空间不足,请注意查看", "服务器提醒");

  175. }

  176. System.out.println("-----------");

  177. // }

  178. // };

  179. // timer.schedule(task, 1000, 1000*10);

  180.  
  181. }

  182. }

3.邮件发送过慢的问题

   在测试代码的时候,我们发现了邮件发送过慢的问题,这在本机上并不在,所以我们还需要修改下linux的配置文件

    在linux控制台输入,  查看本地端口的配置,因为sendmail监听的是127.0.0.1,但却无法确认主机名peixin,所以在我们的127.0.0.1 最后面配置主机名,例如我的是peixin,在最后配置peixin,之后重启下邮件发送。

    # cat /etc/hosts

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4 peixin

::1             localhost localhost.localdomain localhost6 localhost6.localdomain6

    # service sendmail restart

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析 阅读详情

相关推荐

Abaqus中Cohesive单元建模:从本构到失效的完整指南

本文提供了Abaqus中Cohesive单元建模的完整指南,涵盖从本构模型到失效分析的全过程。详细解析了Cohesive单元作为模拟界面粘结与失效的关键工具,其核心在于弹性本构、损伤起始准则和损伤演化定律的设置。文章通过双悬臂梁(DCB)实例,手把手指导前处理、材料定义、求解设置及后处理分析,并分享了刚度、强度、断裂能等关键参数的影响与收敛性调优的实用避坑技巧,帮助用户准确模拟复合材料及胶接结构的界面失效行为。

cuda7parallel的博客 702

linux 循环 cpu使用率脚本,Linux Shell脚本监视CPU利用率,达到设置的CPU利用率时发送电子邮件...

有很多开源监控工具可用于监控Linux系统性能,当系统达到给定的阈值限制时,它将发送电子邮件警报。它监视CPU利用率、内存利用率、交换利用率、磁盘空间利用率等所有内容。如果你只有很少的系统并且想要监视它们,那么编写一个小的shell脚本可以实现这一点。在本文中,我们添加了两个shell脚本来监视Linux系统上的CPU利用率。当系统达到给定阈值时,它将触发邮件到相应的电子邮件ID,即到达设置的CP...

weixin_42512842的博客 693

Qt5.12.12安卓开发环境搭建:Windows下避开SDK版本坑的保姆级教程

本文提供Qt5.12.12在Windows下搭建Android开发环境的详细教程,重点解决SDK版本兼容性问题,特别是cmdline-tools与JDK8的匹配陷阱。通过精准选择组件版本、手动配置路径和修复常见错误,帮助开发者高效完成环境配置,适用于Qt跨平台移动开发。

weixin_33737774的博客 542

java监控linux硬件,定时发送邮件

目录 1.整体架构图 2.代码 3.邮件发送过慢的问题 这几天老大安排做linux服务器的工具,又接了几个巨坑,不过还是get新技能点。 1.整体架构图 主要功能 :监控linux的cpu和内存使用率,当频率过高时,发送邮件提醒功能。 这里的SendMail工具类在上一章节写过,需要的朋友可以去看下,付链接 https://blog.youkuaiyun.com/qq_42...

程序猿劝退师的博客 3610

分类模型AUC低于0.5?5个常见坑点排查指南(附代码示例)

本文针对分类模型AUC低于0.5的常见问题,提供了5个关键排查点及代码示例。从样本分布失衡、特征与标签脱节到量纲差异、模型初始化和数据泄露,详细解析了可能导致AUC异常的原因,并给出实用的诊断方法和解决方案,帮助开发者快速提升模型性能。

weixin_29190169的博客 240

InterSystems IRIS 数据库数据平台安装

下载地址:安装包:IRIS_Community-2024.1.0.267.2-win_x64.exe。

yuguang的博客 2376

linux 检查文件内容 发送邮件,Linux下 监控磁盘 内存 cpu脚本 以及发送邮件流程详解...

1,安装 mailx[[emailprotected] opt]# yum install mailx2,编辑配置文件[[emailprotected] opt]# vim /etc/mail.rc #添加如下内容set smtp=smtp.163.comset smtp-auth-password=xxxset smtp-auth=login---说明建议用163邮箱 因为qq邮箱 smtp...

weixin_36307344的博客 637

基于STM32L4XX 、HAL库的TMC2209-LA-T步进电机驱动器驱动程序应用设计

/ R/W=0 表示写。uint32_t gconf_value = (0 << 0) // I_scale_analog: 禁用,使用UART控制电流。uint32_t ihold_irun = (8 << 0) // 保持电流 8/31 最大值。

PP_Cottage的博客 450

Linux 服务器零成本告警方案:CPU / 内存超阈值自动发邮件(附完整脚本 + 避坑指南)

本文介绍了一套零成本的Linux服务器监控告警方案,通过Shell脚本+Crontab+mailx组合实现CPU/内存超阈值自动邮件告警。文章重点解决了网上教程常见的openssl证书配置错误、邮件轰炸等问题,提供了生产级加固脚本。主要内容包括: 方案架构:使用Crontab定时触发监控脚本,通过mailx连接QQ邮箱SMTP发送告警 关键配置:获取QQ邮箱授权码、正确配置SSL证书(特别纠正了常见错误命令) 加固脚本:包含网卡自动探测、冷却期防骚扰、临时文件安全处理等优化 详细步骤:从工具安装到配置测试,

qq_43150057的博客 545

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2476

将Keil中的变量数组导出

首先,写好导出数据的函数。

小柚子的博客 1952

shell脚本-------内存监控脚本-------当内存占用超过80%时将发送邮件通知

要求 用shell写一个内存监控脚本,使用超过80%并发邮件告警 [root@localhost opt]# vi jiankongneicun.sh #!/bin/bash a=`free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}'` if [ $a -le 10 ];then echo "内存使用状态正常" else echo "内存使用状态不正常" echo "当前内存使用占比为:$a%" /opt/sendEmail.sh 15623

weixin_48191138的博客 1758

实战全解|大疆司空2二次开发:从接口开发到第三方业务系统深度融合

大疆司空2二次开发是实现行业无人机定制化应用的关键,通过OpenAPI后端对接+前端组件集成的组合方式,可快速完成功能定制,而与第三方业务系统的深度融合,能彻底打通“业务下发-设备执行-数据回传-流程闭环”的全链路,让无人机管控真正融入行业业务流程。开发过程中,建议优先采用私有版部署保障数据安全,通过中间适配层降低系统耦合度,结合实际业务场景打磨功能,避免过度开发。随着大疆开发者生态的完善,司空2的二次开发能力将持续升级,为更多行业无人机应用提供技术支撑。

2501_93651177的博客 987

Spring Boot实现监控linux-cpu和内存使用情况,并发送邮件

参考自:https://blog.youkuaiyun.com/qq_42035966/article/details/81332554 一.主要功能 监控linux的cpu和内存使用率,当频率过高时,发送邮件提醒功能。 二.代码 (1)导入依赖 <dependency> <groupId>org.springframework.boot</groupId&...

yfy的博客 7843

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Shell脚本监控系统情况并发送邮件

在没有监控软件的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统负载与CPU占用的使用情况。 一、安装linux下面的一个邮件客户端msmtp软件(类似于一个foxmail的工具)  1、下载安装:  http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2?modtime=1217206451&amp;big_mir...

菲宇运维 3090

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

shell脚本监控系统负载、CPU和内存使用情况

hostname >>/home/vmuser/xunjian/xj.logdf -lh >>/home/vmuser/xunjian/xj.logtop -b -n 1 | grep Cpu >>/home/vmuser/xunjian/xj.logfree -m >>/home/vmuser/xunjian/xj.log 用uptime命令查看...

weixin_30727835的博客 1863

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Shell脚本监控Linux资源(CPU、内存、磁盘)超过阈值邮件告警

#!/bin/bash # yum install -y sendEmail yum install -y bc Item=测试环境 Host=`/usr/bin/hostname` Ip=`ip a | grep 'inet'|awk -F '[ ]' '{print $6}' | grep 24` Cpu=`top -n1 | fgrep "Cpu(s)" | tail -1 | awk -...

LZX的博客 4420

Linux脚本编写程序监控系统信息并设置报警自动发送邮件

yum -y install mailx yum -y install sendmail #获取cpu使用率 cpuUsage=`top -n 1 | awk -F '[ %]+' 'NR==3 {print $3}'` #获取磁盘使用率 data_name="/dev/sda1" diskUsage=`df -h | grep $data_name | awk -F '[ %]+' '{p...

Zkx 2875

inux系统CPU内存磁盘监控-邮件提醒脚本2

2readonly声明了多个只读变量,用于存储当前时间、机器 IP、主机名、CPU 数量、在线用户数阈值和 CPU 负载阈值。该脚本主要用于监控服务器的性能和资源使用情况,及时发送通知以防止资源耗尽。它使用了topiostat和df等命令来获取系统状态,并通过mailx发送报告邮件。为了保证脚本的稳定性,它还进行了环境依赖的检查和安装。

路过我的生活呀 592

java 监控linux服务器cpu使用率、内存使用率、磁盘使用率、java进程是否存活等服务

java 监控linux服务器cpu、内存、java进程是否存活,发现异常发送邮件提醒 前一段时间在维护一个N年前的项目,这个项目十几个服务器,每个服务器上有十几个服务。接手后的几个星期天天有事,要不就是服务挂了导致没有数据,要不就是把服务器跑宕机了。因为是老项目,所以不敢有大的动作,只能写一个简单的检测程序,检测一下服务器状态,cpu使用率,磁盘使用率,进程是否存在。程序不复杂,但是解放了自己。现在把这个小工具整理一下分享出来,希望可以帮到有需要的人。 我使用的是qq的发送邮箱,首先要开启QQ邮箱需获取相

qq_28067781的博客 4885

python监控cpu内存_用python监控服务器的cpu,磁盘空间,内存,超过邮件报警

用python监控服务器的cpu,磁盘空间,内存,超过邮件报警,邮件,地址,服务器,脚本,磁盘空间用python监控服务器的cpu,磁盘空间,内存,超过邮件报警易采站长站,站长之家为您整理了用python监控服务器的cpu,磁盘空间,内存,超过邮件报警的相关内容。监控Linux服务器嘛,脚本逻辑基本上是用os.popen模块,然后把获取到的结果通过split切分成一个list,再拿目标list值和...

weixin_39630048的博客 574

Ubuntu服务器上监控内存、磁盘和cpu使用率shell脚本

一、监控系统cpu的情况 使用top命令查看linux系统cpu使用情况: #抓取cpu的总核数 grep -c 'model name' /proc/cpuinfo #使用top命令查看linux系统cpu使用情况:(-b -n 1 表只需要1次的输出结果) top -b -n 1 | grep Cpu us:用户态使用的cpu时间比 sy:系统态使用的cpu时间比 ni:用做nice加权的进程分配的用户态cpu时间比 id:空闲的cpu时间比 wa:cpu等待磁盘写入完成

夜半子时 5982

shell 监控CPU、内存和硬盘利用率

1)CPU 借助vmstat工具来分析CPU统计信息。 #!/bin/bash DATE=$(date+%F""%H:%M) IP=$(ifconfigeth0|awk-F'[:]+''/inetaddr/{print$4}')#只支持CentOS6 MAIL="example@mail.com" if!whichvmstat&>/dev/nu...

fujibao的博客 1438

利用Shell脚本来监控Linux系统的负载、CPU、内存、硬盘、用户登录数

转自http://www.cnblogs.com/clarke/p/5454586.html # vim /scripts/sys-warning.sh #!/bin/bash #site: www.jquerycn.cn #监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。 #提取本服务器的IP地址信息 IP=`ifconfig eth0 | grep "inet

qingkongyeyue的博客 4393

shell脚本监控-linux操作系统

shell脚本监控-linux操作系统 https://www.jb51.net/article/58799.htm 在没有nagios监控软件的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统负载与CPU占用的使用情况。 一、安装linux下面的一个邮件客户端msmtp软件(类似于一个foxmail的工具) 1...

weixin_30674525的博客 205

使用shell脚本监控Linux主机

编写如下脚本(根据实际情况来修改邮件发送目的地址): [root@localhost ~]# cat sysmon.sh #!/bin/bash dug=(df−h∣grep&quot;/(df -h | grep &quot;/(df−h∣grep"/" | awk ‘{print $5}’ | awk -F% '{print KaTeX parse error: Expecte...

看清所以看轻 467
上一篇: Ambari 监控信息的提取
下一篇: 利用shell脚本监控linux中CPU、内存和磁盘利用率。(centos7)
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值