用java取得linux系统cpu、内存的实时信息

获取CPU占用率(利用率)信息 注意:请不要下载这个,已经更新为V2版本,解决了一些错误。请下载V2版本 无需依赖第三方包,纯源码,支持Windows和Linux 走过路过不要错过 立即下载

 

 

LinuxJavaperformance.netlog4j 

Java代码 

 收藏代码

  1. import java.io.BufferedReader;  
  2. import java.io.File;  
  3. import java.io.FileInputStream;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.net.InetAddress;  
  7. import java.util.StringTokenizer;  
  8.   
  9. import org.apache.log4j.Logger;  
  10.   
  11. /** 
  12.  * 取得linux系统下的cpu、内存信息 
  13.  *  
  14.  * <p> 
  15.  *  
  16.  * @author leo 
  17.  *         </p> 
  18.  * @date 2008 
  19.  */  
  20. public final class LinuxSystemTool implements Runnable{  
  21.     private Logger log = Logger.getLogger(LinuxSystemTool.class);  
  22.     private Config config=Config.getInstance();  
  23.     /** 
  24.      * get memory by used info 
  25.      *  
  26.      * @return int[] result 
  27.      *         result.length==4;int[0]=MemTotal;int[1]=MemFree;int[2]=SwapTotal;int[3]=SwapFree; 
  28.      * @throws IOException 
  29.      * @throws InterruptedException 
  30.      */  
  31.     public void run() {  
  32.         // TODO Auto-generated method stub  
  33.   
  34.         while (true) {  
  35.               
  36.             try {  
  37.                 exec();  
  38.                 Thread.sleep(config.getThreadTime());  
  39.             } catch (Exception e) {  
  40.                 // TODO Auto-generated catch block  
  41.                 log.error("Performance Monitoring error:"+e.getMessage());  
  42.                 e.printStackTrace();  
  43.             }  
  44.         }  
  45.     }  
  46.     public void exec() throws Exception {  
  47. //      ServerStatus ss = new ServerStatus();  
  48.   
  49.         InetAddress inet = InetAddress.getLocalHost();  
  50.         System.out.println("Performance Monitoring ip:"+inet.toString());  
  51.           
  52.         String ip=inet.toString().substring(inet.toString().indexOf("/")+1);  
  53.         log.info("Performance Monitoring ip:"+ip);  
  54.           
  55.         int[] memInfo = LinuxSystemTool.getMemInfo();  
  56.         System.out.println("MemTotal:" + memInfo[0]);  
  57.         System.out.println("MemFree:" + memInfo[1]);  
  58.           
  59.         SnmpUtil util=new SnmpUtil();  
  60.         util.setCPU(getCpuInfo());  
  61. //      util.setDISK(1);  
  62.         util.setMEM(memInfo[0]/memInfo[1]);  
  63.         util.setIP(ip);  
  64.   
  65.     }  
  66.     public static int[] getMemInfo() throws IOException, InterruptedException {  
  67.         File file = new File("/proc/meminfo");  
  68.         BufferedReader br = new BufferedReader(new InputStreamReader(  
  69.                 new FileInputStream(file)));  
  70.         int[] result = new int[4];  
  71.         String str = null;  
  72.         StringTokenizer token = null;  
  73.         while ((str = br.readLine()) != null) {  
  74.             token = new StringTokenizer(str);  
  75.             if (!token.hasMoreTokens())  
  76.                 continue;  
  77.   
  78.             str = token.nextToken();  
  79.             if (!token.hasMoreTokens())  
  80.                 continue;  
  81.   
  82.             if (str.equalsIgnoreCase("MemTotal:"))  
  83.                 result[0] = Integer.parseInt(token.nextToken());  
  84.             else if (str.equalsIgnoreCase("MemFree:"))  
  85.                 result[1] = Integer.parseInt(token.nextToken());  
  86.             else if (str.equalsIgnoreCase("SwapTotal:"))  
  87.                 result[2] = Integer.parseInt(token.nextToken());  
  88.             else if (str.equalsIgnoreCase("SwapFree:"))  
  89.                 result[3] = Integer.parseInt(token.nextToken());  
  90.         }  
  91.   
  92.         return result;  
  93.     }  
  94.   
  95.     /** 
  96.      * get memory by used info 
  97.      *  
  98.      * @return float efficiency 
  99.      * @throws IOException 
  100.      * @throws InterruptedException 
  101.      */  
  102.     public static float getCpuInfo() throws IOException, InterruptedException {  
  103.         File file = new File("/proc/stat");  
  104.         BufferedReader br = new BufferedReader(new InputStreamReader(  
  105.                 new FileInputStream(file)));  
  106.         StringTokenizer token = new StringTokenizer(br.readLine());  
  107.         token.nextToken();  
  108.         int user1 = Integer.parseInt(token.nextToken());  
  109.         int nice1 = Integer.parseInt(token.nextToken());  
  110.         int sys1 = Integer.parseInt(token.nextToken());  
  111.         int idle1 = Integer.parseInt(token.nextToken());  
  112.   
  113.         Thread.sleep(1000);  
  114.   
  115.         br = new BufferedReader(  
  116.                 new InputStreamReader(new FileInputStream(file)));  
  117.         token = new StringTokenizer(br.readLine());  
  118.         token.nextToken();  
  119.         int user2 = Integer.parseInt(token.nextToken());  
  120.         int nice2 = Integer.parseInt(token.nextToken());  
  121.         int sys2 = Integer.parseInt(token.nextToken());  
  122.         int idle2 = Integer.parseInt(token.nextToken());  
  123.   
  124.         return (float) ((user2 + sys2 + nice2) - (user1 + sys1 + nice1))  
  125.                 / (float) ((user2 + nice2 + sys2 + idle2) - (user1 + nice1  
  126.                         + sys1 + idle1));  
  127.     }  
  128.   
  129.     /** 
  130.      * 测试类 
  131.      *  
  132.      * <p> 
  133.      *  
  134.      * @author 
  135.      * </p> 
  136.      * @date 
  137.      */  
  138.   
  139.     public static void main(String[] args) throws Exception {  
  140.         int[] memInfo = LinuxSystemTool.getMemInfo();  
  141.         System.out.println("MemTotal:" + memInfo[0]);  
  142.         System.out.println("MemFree:" + memInfo[1]);  
  143.         System.out.println("SwapTotal:" + memInfo[2]);  
  144.         System.out.println("SwapFree:" + memInfo[3]);  
  145.   
  146.         System.out.println("CPU利用率:" + LinuxSystemTool.getCpuInfo());  
  147.     }  
  148. }  

 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里面获得。同样也是需要两次取值取其差作为流量值。

 

Aurora8b10b光口通信实战:复位时序与IP核配置详解 本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。 阅读详情

相关推荐

别再为reg2icg的setup违例头疼了!手把手教你用ICC2/Innovus这3招搞定(附实战数据对比)

本文详细介绍了在ICC2/Innovus中解决reg2icg的setup违例的三种高效方法,包括早期时钟树预估、精准控制时钟延迟与门控检查以及ICG专用优化选项组合。通过实战数据对比,展示了不同策略的效果差异,帮助工程师快速优化时序路径,提升芯片性能。

weixin_42569329的博客 409

java 获得CPU 内存信息

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

Michael的专栏 1467

COMSOL两相流(相场法)

COMSOL是一款功能非常强大的多物理场仿真软件,拥有可视化和后处理工具,可方便有效的展示您的仿真效果,具有灵活、高效、友好的特点,软件能够为用户提供各类工程问题的解决方案,从而帮助广大研究和工程人员能够在科研上取得新突破。 COMSOL可以实现声学、传热、流体力学、结构力学等方面的模拟仿真,具体模块如下图所示。 COMSOL软件设置流程 定义需要求解的问题类型:针对一个需要仿真的问题,需要先对问题进行分析;分析该问题用到哪些物理场,什么样的几何模型,以及如何设置研究等。该步骤可以使用COMSOL中的

weixin_47139559的博客 1万+

/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

从零到一:构建嵌入式Nginx的模块化架构与跨平台部署实战

本文详细介绍了在ARM32架构的RV1126嵌入式设备上,通过交叉编译技术构建模块化Nginx服务器的完整实战流程。涵盖环境配置、依赖库编译、Nginx核心与http_ssl_module等模块集成、性能优化及部署调试,为嵌入式开发提供高效可靠的Web服务器解决方案。

rock5的博客 203

基于PyQt5的ROS移动机器人的人机交互UI界面

每次做实验的时候,手动rosrun,roslaunch太过麻烦,通过ui界面的话,只需要点点按钮就可以啦 ros_car_py包括运动,建图,导航,ui界面的程序全部打包上传,相互依赖关系见ros_car_py包。 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets imp...

工大机器人工作室 7366

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

java获取Linux cpu和内存信息

James201904的博客 2849

告别信息过载:我是如何用Feedly RSS阅读器打造个人专属信息流的(附Chrome插件使用技巧)

本文分享了如何利用Feedly RSS阅读器有效管理信息过载,打造个人专属信息流的方法。通过科学组织订阅源、智能过滤和跨平台同步技巧,帮助用户从被动接收转为主动筛选,提升信息获取效率。特别推荐使用Feedly的Chrome插件和AI过滤功能,实现高效的信息管理。

weixin_42526015的博客 358

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

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

weixin_29282577的博客 600

深入解析音频信号处理的核心算法——傅里叶变换、语音增强、回声消除与主动降噪

本文系统介绍了现代音频信号处理的核心技术。首先阐述傅里叶变换作为理论基础的重要性,它能将声音分解为频域成分。随后重点分析三大关键技术:语音增强利用谱减法、维纳滤波和深度学习从噪声中提取人声;回声消除采用自适应滤波器消除通话中的回声;主动降噪通过声波干涉原理抵消环境噪声。文章最后指出,这些技术在实际应用中协同工作,形成完整的音频处理链路,共同提升语音质量和听觉体验。随着算法进步和算力提升,音频处理技术正向着更智能、更高效的方向发展。

程序猿老樊的博客 1330

robosuite 入门教程(一)安装与基本用法

摘要:Robosuite是基于MuJoCo的模块化机器人仿真框架,提供标准化基准测试环境和多样化机器人控制功能。作为ARISE计划的一部分,该框架支持强化学习、模仿学习等算法研究,包含程序化环境生成、多模态传感器、多种控制器及遥操作设备。支持macOS/Linux系统,提供详细安装指南和功能演示脚本,包括随机动作测试、控制器验证、域随机化等。最新版本v1.5新增人形机器人支持、全身控制器和照片级渲染功能,旨在降低机器人学习研究门槛,促进算法开发与评估。

2506_90492529的博客 1270

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

里海NX二次开发3000例-专栏目录

UDO(User Defined Object)是“用户自定义对象”。应用非常广,可以用UDO创建自定义特征,也可以对NX原有的特征添加一些特殊信息,这些信息会保存在部件中,以后可以查询。还可以实时追踪NX对象,例如做3D包容盒线框自动追踪实体,做2D矩形框自动追踪图纸尺寸值,这些在下面的例子都有介绍。读者可以自己编译下面的例子,体会理解UDO的用法。------里海 20230512序号内容​链接01使用UDO在所有实体上设置更新回调​链接02使用UDO生成跟踪实体的线框​链接03删除UDO​链接。

王牌飞行员_里海的博客 7721

java linux获取实时cpu_用java取得linux系统cpu、内存的实时信息

import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;/*** 取得linux系统下的cpu、内存信息*...

weixin_35080040的博客 254

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

用java取得linux系统cpu、内存的实时信息(参考别人代码)

/**  *     cat /proc/cpuinfo - cpu (i.e. vendor, mhz, flags like mmx)    *     cat /proc/interrupts - 中断  *     cat /proc/ioports - 设备io端口  *     cat /proc/meminfo - 内存信息(i.e. mem used, free, swap siz

dainiao01的专栏 1256

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: https://www.kancloud.cn/digest/javaframe/125588
下一篇: [一起学Hive]之六-Hive的动态分区
王树民
博客等级 码龄10年 912粉丝 560原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值