java 获得CPU 内存信息

Java监控系统资源:CPU与内存信息获取指南 随着企业信息系统变得越来越复杂,监控系统健康状况的需求也日益增加。Java系统信息监控旨在帮助开发者和运维人员实时了解系统运行状态,及时发现潜在问题,并进行性能优化。良好的系统监控不仅仅是技术问题,也是管理问题,因为它需要在整个软件生命周期中持续关注系统表现。在接下来的章节中,我们将详细介绍如何监控Java应用的关键指标,包括CPU使用率、内存使用情况、线程状态等。我们将深入理解每个监控指标背后的原理,并提供实战案例和优化策略,从而帮助您构建一个响应迅速、运行高效的Java应用。注意。 阅读详情

1、CPU



在文件"/proc/stat"里面就包含了CPU的信息。每一个CPU的每一tick用在什么地方都在这个文件里面记着。后面的数字含义分别是: user、nice、sys、idle、iowait。有些版本的kernel没有iowait这一项。这些数值表示从开机到现在,CPU的每tick用在了哪里。例如:

cpu0 256279030 0 11832528 1637168262

就是cpu0从开机到现在有 256279030 tick用在了user消耗,11832528用在了sys消耗。所以如果想计算单位时间(例如1s)里面CPU的负载,那只需要计算1秒前后数值的差除以每一秒的tick数量就可以了。gkrellm就是这样实现的:((200 * (v2 - v1) / CPU_TICKS_PER_SECOND) + 1) /2

例如,第一次读取/proc/stat,user的值是256279030;一秒以后再读一次,值是256289030,那么CPU在这一秒的user消耗就是:((200 * (256289030 - 256279030) / CPU_TICKS_PER_SECOND) + 1) /2 = ((10000 * 200 / 1000000) + 1) / 2 = 1%了。



2、内存消耗



文件"/proc/meminfo"里面包含的就是内存的信息,还包括了swap的信息。例如:





$ cat /proc/meminfo

total:    used:    free:  shared: buffers:  cached:
Mem:  1057009664 851668992 205340672        0 67616768 367820800
Swap: 2146787328 164429824 1982357504
MemTotal:      1032236 kB
MemFree:        200528 kB
MemShared:           0 kB
……

不过从gkrellm的源代码看,有些版本没有前面那两行统计的信息,只能够根据下面的Key: Value这种各式的数据收集。



3、磁盘空间



从gkrellm的源代码看,这个是一个很复杂的数据。磁盘分区的数据有可能分布在:/proc/mounts、/proc/diskstats、 /proc/partitions等等。而且如果想要检查某几个特定的路径,还需要通过mount、df等命令的帮助。为了减少麻烦,这个数据我就直接用 statfs函数直接获得了。



int statfs(const char *path, struct statfs *buf);

这个函数只需要输入需要检查的路径名称,就可以返回这个路径所在的分区的空间使用情况:

总空间:buf.f_bsize * buf.f_blocks

空余空间:buf.f_bsize * buf.f_bavail



4、磁盘I/O



磁盘I/O的数据也同样比较复杂,有些版本看/proc/diskstats,有些版本看/proc/partitions,还有些版本至今我也不知道在那里看……不过可以看到数据的版本也像CPU那样,需要隔一段时间取值,两次取值的差就是流量。



5、网络流量



网络流量也是五花八门,不过基本上都可以在/proc/net/dev里面获得。同样也是需要两次取值取其差作为流量值。

 

 

  1. Java代码 
  2. import java.io.BufferedReader;   
  3. import java.io.File;   
  4. import java.io.FileInputStream;   
  5. import java.io.IOException;   
  6. import java.io.InputStreamReader;   
  7. import java.util.StringTokenizer;   
  8.   
  9. /**  
  10. * 取得linux系统下的cpu、内存信息  
  11. *   
  12. * */  
  13. public final class LinuxSystemTool   
  14. {   
  15.    /**  
  16.    * get memory by used info  
  17.    *   
  18.    * @return int[] result  
  19.    * result.length==4;int[0]=MemTotal;int[1]=MemFree;int[2]=SwapTotal;int[3]=SwapFree;  
  20.    * @throws IOException  
  21.    * @throws InterruptedException  
  22.    */  
  23.    public static int[] getMemInfo() throws IOException, InterruptedException   
  24.    {   
  25.       File file = new File("/proc/meminfo");   
  26.       BufferedReader br = new BufferedReader(new InputStreamReader(   
  27.       new FileInputStream(file)));   
  28.       int[] result = new int[4];   
  29.       String str = null;   
  30.       StringTokenizer token = null;   
  31.       while((str = br.readLine()) != null)   
  32.       {   
  33.          token = new StringTokenizer(str);   
  34.          if(!token.hasMoreTokens())   
  35.             continue;   
  36.       
  37.          str = token.nextToken();   
  38.          if(!token.hasMoreTokens())   
  39.             continue;   
  40.       
  41.          if(str.equalsIgnoreCase("MemTotal:"))   
  42.             result[0] = Integer.parseInt(token.nextToken());   
  43.          else if(str.equalsIgnoreCase("MemFree:"))   
  44.             result[1] = Integer.parseInt(token.nextToken());   
  45.          else if(str.equalsIgnoreCase("SwapTotal:"))   
  46.             result[2] = Integer.parseInt(token.nextToken());   
  47.          else if(str.equalsIgnoreCase("SwapFree:"))   
  48.             result[3] = Integer.parseInt(token.nextToken());   
  49.       }   
  50.       
  51.       return result;   
  52.    }   
  53.   
  54.    /**  
  55.    * get memory by used info  
  56.    *   
  57.    * @return float efficiency  
  58.    * @throws IOException  
  59.    * @throws InterruptedException  
  60.    */  
  61.    public static float getCpuInfo() throws IOException, InterruptedException   
  62.    {   
  63.       File file = new File("/proc/stat");   
  64.       BufferedReader br = new BufferedReader(new InputStreamReader(   
  65.       new FileInputStream(file)));   
  66.       StringTokenizer token = new StringTokenizer(br.readLine());   
  67.       token.nextToken();   
  68.       int user1 = Integer.parseInt(token.nextToken());   
  69.       int nice1 = Integer.parseInt(token.nextToken());   
  70.       int sys1 = Integer.parseInt(token.nextToken());   
  71.       int idle1 = Integer.parseInt(token.nextToken());   
  72.       
  73.       Thread.sleep(1000);   
  74.   
  75.       br = new BufferedReader(   
  76.       new InputStreamReader(new FileInputStream(file)));   
  77.       token = new StringTokenizer(br.readLine());   
  78.       token.nextToken();   
  79.       int user2 = Integer.parseInt(token.nextToken());   
  80.       int nice2 = Integer.parseInt(token.nextToken());   
  81.       int sys2 = Integer.parseInt(token.nextToken());   
  82.       int idle2 = Integer.parseInt(token.nextToken());   
  83.   
  84.       return (float)((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float)((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1));   
  85.    }   
  86. }   
  87.   
  88. /**  
  89. * 测试类  
  90. *   
  91. * <p>@author javer QQ:84831612</p>  
  92. * @date 2005  
  93. */  
  94. public class JaverTest   
  95. {   
  96.     public static void main(String[] args) throws Exception   
  97.     {   
  98.         int[] memInfo = LinuxSystemTool.getMemInfo();   
  99.         System.out.println("MemTotal:" + memInfo[0]);   
  100.         System.out.println("MemFree:" + memInfo[1]);   
  101.         System.out.println("SwapTotal:" + memInfo[2]);   
  102.         System.out.println("SwapFree:" + memInfo[3]);   
  103.   
  104.         System.out.println("CPU利用率:" + LinuxSystemTool.getCpuInfo());   
  105.     }   
  106. }  
  107. import java.io.BufferedReader; 
  108. import java.io.File; 
  109. import java.io.FileInputStream; 
  110. import java.io.IOException; 
  111. import java.io.InputStreamReader; 
  112. import java.util.StringTokenizer; 
  113. /** 
  114. * 取得linux系统下的cpu、内存信息 
  115. * 
  116. * */ 
  117. public final class LinuxSystemTool 
  118. { 
  119.    /** 
  120.    * get memory by used info 
  121.    * 
  122.    * @return int[] result 
  123.    * result.length==4;int[0]=MemTotal;int[1]=MemFree;int[2]=SwapTotal;int[3]=SwapFree; 
  124.    * @throws IOException 
  125.    * @throws InterruptedException 
  126.    */ 
  127.    public static int[] getMemInfo() throws IOException, InterruptedException 
  128.    { 
  129.       File file = new File("/proc/meminfo"); 
  130.       BufferedReader br = new BufferedReader(new InputStreamReader( 
  131.       new FileInputStream(file))); 
  132.       int[] result = new int[4]; 
  133.       String str = null; 
  134.       StringTokenizer token = null; 
  135.       while((str = br.readLine()) != null) 
  136.       { 
  137.          token = new StringTokenizer(str); 
  138.          if(!token.hasMoreTokens()) 
  139.             continue; 
  140.    
  141.          str = token.nextToken(); 
  142.          if(!token.hasMoreTokens()) 
  143.             continue; 
  144.    
  145.          if(str.equalsIgnoreCase("MemTotal:")) 
  146.             result[0] = Integer.parseInt(token.nextToken()); 
  147.          else if(str.equalsIgnoreCase("MemFree:")) 
  148.             result[1] = Integer.parseInt(token.nextToken()); 
  149.          else if(str.equalsIgnoreCase("SwapTotal:")) 
  150.             result[2] = Integer.parseInt(token.nextToken()); 
  151.          else if(str.equalsIgnoreCase("SwapFree:")) 
  152.             result[3] = Integer.parseInt(token.nextToken()); 
  153.       } 
  154.    
  155.       return result; 
  156.    } 
  157.    /** 
  158.    * get memory by used info 
  159.    * 
  160.    * @return float efficiency 
  161.    * @throws IOException 
  162.    * @throws InterruptedException 
  163.    */ 
  164.    public static float getCpuInfo() throws IOException, InterruptedException 
  165.    { 
  166.       File file = new File("/proc/stat"); 
  167.       BufferedReader br = new BufferedReader(new InputStreamReader( 
  168.       new FileInputStream(file))); 
  169.       StringTokenizer token = new StringTokenizer(br.readLine()); 
  170.       token.nextToken(); 
  171.       int user1 = Integer.parseInt(token.nextToken()); 
  172.       int nice1 = Integer.parseInt(token.nextToken()); 
  173.       int sys1 = Integer.parseInt(token.nextToken()); 
  174.       int idle1 = Integer.parseInt(token.nextToken()); 
  175.    
  176.       Thread.sleep(1000); 
  177.       br = new BufferedReader( 
  178.       new InputStreamReader(new FileInputStream(file))); 
  179.       token = new StringTokenizer(br.readLine()); 
  180.       token.nextToken(); 
  181.       int user2 = Integer.parseInt(token.nextToken()); 
  182.       int nice2 = Integer.parseInt(token.nextToken()); 
  183.       int sys2 = Integer.parseInt(token.nextToken()); 
  184.       int idle2 = Integer.parseInt(token.nextToken()); 
  185.       return (float)((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float)((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1)); 
  186.    } 
  187. } 
  188. /** 
  189. * 测试类 
  190. * 
  191. * <p>@author javer QQ:84831612</p> 
  192. * @date 2005 
  193. */ 
  194. public class JaverTest 
  195. { 
  196.     public static void main(String[] args) throws Exception 
  197.     { 
  198.         int[] memInfo = LinuxSystemTool.getMemInfo(); 
  199.         System.out.println("MemTotal:" + memInfo[0]); 
  200.         System.out.println("MemFree:" + memInfo[1]); 
  201.         System.out.println("SwapTotal:" + memInfo[2]); 
  202.         System.out.println("SwapFree:" + memInfo[3]); 
  203.         System.out.println("CPU利用率:" + LinuxSystemTool.getCpuInfo()); 
  204.     } 
  205. } 
用java取得linux系统cpu、内存的实时信息 立即下载

相关推荐

用java获取CPU占用率

用java获取CPU占用率 java 获取 CPU 占用率

/etc/sysctl.conf 调优 & 优化Linux内核参数

from: http://apps.hi.baidu.com/share/detail/15652067 http://keyknight.blog.163.com/blog/static/3663784020104152407759/ http://blog.sina.com.cn/s/blog_6e2aeba30100uve3.html sysctl.conf 优化 The

sunvince的专栏 2355

获取CPU占用率(利用率)信息

注意:请不要下载这个,已经更新为V2版本,解决了一些错误。请下载V2版本 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过

Java获取Linux的CPU和内存占用信息(无需引用第三方jar包)

java获取Linux cpu和内存信息

James201904的博客 2849

vasp计算练习1-Si

si的vasp训练流程

qq_41074165的博客 3296

康耐视 VisionPro CogImageFileTool(将获得的图像保存至文件或从文件中获取图像)工具

VisionPro CogImageFileTool(将获得的图像保存至文件或从文件中获取图像)工具

zhihuishuxia__的博客 2064

java 获取linux内存,linux下用java程序获取cpu和内存的使用率(转)

http://hi.baidu.com/qmiao128/blog/item/fa91b41f1b6c1f61f724e424.html项目组张布置说是要在linux实验平台上获取cpu和内存的使用率,刚开始想的是用jni调用本地方法,但是感觉这个方法太麻烦,主要也是对jni不怎么熟悉。后来在网上查到这个方法,经过改装,运行成功。在这个程序中,我将getCpuUsage和getMemUsage两个...

weixin_29282577的博客 598

基于微信小程序的智能门禁管理系统的设计与实现(文章+源码)

基于微信小程序门禁管理小程序,该系统支持用户注册登录、查阅新闻动态、提交开门申请和发布留言等功能,同时管理员可以进行用户管理、新闻信息管理、门禁审批管理和留言管理等操作。该系统将采用IDEA开发工具、SSM框架和MYSQL数据库等相关技术,实现用户登录注册、个人信息管理、门禁申请提交、管理员审核等功能。该系统的实现,可以有效提高门禁管理的效率和便利性,同时也具有较强的可扩展性和可维护性。本研究对于智能门禁管理系统的设计和实现具有一定的参考价值。

u011779145的博客 1399

Java 连接远程Linux 服务器执行 shell 脚本查看 CPU、内存、硬盘信息

pom.xml jar 包支持     &lt;dependency&gt; &lt;groupId&gt;com.jcraft&lt;/groupId&gt; &lt;artifactId&gt;jsch&lt;/artifactId&gt; &lt;version&gt;0.1.53&lt;/version&g

weixin_34235105的博客 590

Python爬虫实战:全自动采集银行理财产品收益率数据

本文通过Playwright动态爬虫技术,成功实现了对银行理财产品收益率数据的实时采集,并通过 Pandas 数据清洗、SQLite 存储、调度自动化等模块,构建了一个可扩展的银行理财数据抓取系统。理财非儿戏,数据做决策。掌握银行收益信息是我们迈向理性投资的第一步。希望这套工具对你有所帮助!

2201_76125261的博客 1155

【WRF-Chem工具】anthro_emiss 详解:生成人为排放数据

anthro_emiss 详解:生成人为排放数据

WW、forever的博客 2055

java获取服务器硬件信息_使用java获取linux服务器的配置信息

使用java获取linux服务器的配置信息星期五, 七月 6, 20180服务器提供商以及其他人员可能需要时常查看服务器配置,例如服务器的系统版本、内存大小、磁盘大小等等。人为地去执行不同的命令查看服务器配置,必须熟悉系统指令的人员才方便查看,费时又费力,效率比较低下。所以,如果有方法能让使用者输入账号、密码、地址,就能查询到服务器信息的工具,那么非专业人员也能迅速获取到所需的数据。一方面提高了效...

weixin_39677870的博客 1148

逆强化学习:从专家示范中学习策略

逆强化学习(Inverse Reinforcement Learning,简称IRL)是强化学习(Reinforcement Learning,简称RL)的一个子领域,它的目标是从专家的行为中学习策略。在传统的强化学习中,智能体通过与环境交互,根据奖励信号来学习一个策略。而在逆强化学习中,我们没有直接的奖励信号,而是通过观察专家的行为来推断出奖励函数,从而学习到一个与专家类似的策略。逆强化学习作为强化学习的一个重要子领域,在许多实际应用场景中都取得了显著的成功。

AI天才研究院 1451

java 获得计算机的cpu使用率,物理内存等信息

public interface IMonitorService { public MonitorInfoBean getMonitorInfoBean() throws Exception; } 实现类 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; impor...

iteye_13108的博客 521

支付宝h5参数如何实现跳转?(包含相关Demo代码)

🏆本文收录于专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家!持续更新中,up!up!up!!

**My Coding Family** 3249

100天精通Python(基础篇)——第20天:pip命令大全

pip升级命令:python -m pip install --upgrade pip pip install name //这里的name是要安装的第三方库名 pip install name -i http://mirrors.aliyun.com/pypi/simple/ 国内镜像源 阿里云:http://mirrors.aliyun.com/pypi/simple/ (推荐使用) 清华大学:https://pypi.tuna.tsinghua.edu.cn/simple 豆瓣:http:/

努力让自己发光,对的人才能迎着光而来 18万+

Java学习篇之---java获取cpu、内存、硬盘信息

java获取cpu、内存、硬盘信息 1 下载安装sigar-1.6.4.zip     使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息。       下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files     解压

antchain.com的专栏 781

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java获得CPU使用率,系统内存,虚拟机内存等情况(不用JNI)

最近做个项目,就是要取得cpu占有率等等的系统信息,一开始以为要用动态链接库了,但后来发现可以像下面这样做,不去调用jni,这样省去了很多看新技术的时间o(∩_∩)o... 在Java中,可以获得总的物理内存、剩余的物理内存、已使用的物理内存等信息,下面例子可以取得这些信息,并且获得在Windows下的内存使用率。     首先编写一个MonitorInfoBean类,用来装载监控的一些信息,包...

中华传奇 86

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Java获取系统信息(cpu,内存,硬盘,进程等)的相关方法

1.利用jdk自带的API获取信息:(只支持jdk1.60以上的版本啊)   import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.ArrayList; import java.util.List; import mytools.com.sun.management.Ope

dac55300424的专栏 1226

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux下,java获取CPU使用率、内存使用率

/**  *   */ package com.test.cpumem; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.logging.Logger; /**  * Linux下,ja

liuhl0910的专栏 981

java获取cpu、内存、硬盘信息

1 下载安装sigar-1.6.4.zip     使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息。        下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files    在自己的Java项目中引入sigar.jar

八月长安w的博客 7086

Java获取cpu、内存、硬盘信息

1下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息。 下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files 解压压缩包,将lib下sigar.jar导入eclipse的CLASSPATH中,再将sigar-x86-winnt.dll存入Java的bin目录即可。 2 如果m...

山路曲折盘旋,但毕竟朝着顶峰延伸 6063

java获取cpu,内存,磁盘等信息

java获取cpu,内存,磁盘等信息 源代码下载地址:http://www.zuidaima.com/share/1550463331306496.htm

springmvc_springdata的专栏 2639

java 获取cpu_Java实现获取cpu、内存、硬盘、网络等信息的方法示例

本文实例讲述了Java实现获取cpu、内存、硬盘、网络等信息的方法。分享给大家供大家参考,具体如下:1. 下载安装sigar-1.6.4.zip使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息。或点击此处本站下载。解压压缩包,将lib下sigar.jar导入eclipse的CLASSPATH中,再将sigar-x86-winnt.dll存入...

weixin_39603492的博客 3549

java读取计算机CPU、内存、硬盘等信息

pom.xml <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>3.12.2</version> </dependency> java代码: package org.fiend.utils.sysUtil; import com.sun.manageme.

justlpf的专栏 1828

java 获取cpu_Java获取系统内存、CPU、磁盘等信息

importjava.io.File;importjava.lang.management.ManagementFactory;importjava.lang.management.MemoryMXBean;importjava.lang.management.MemoryUsage;importcom.sun.management.OperatingSystemMXBean;importjava...

weixin_29172963的博客 963
上一篇: 如何使用sudo来允许普通用户使用超级用户权限
下一篇: JAVA 调用LINUX命令类
ocelight
博客等级 码龄19年 56粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值