`

转载-实时分析linux系统CPU、内存使用情况

 
阅读更多

前些天正好需要完成一个实时分析linux系统CPU、内存使用情况的功能,类似于windows任务管理器的那种。当时搜了很多帖子出来,有些比较深刻,但是用Java调用起来比较麻烦,又要用jni、又要写C,在万般无奈之下翻阅了一些linux的相关资料,竟然得知linux系统中/proc/目录下有存放系统信息的文件,大喜过望啊! 


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、内存信息 

*

@author javer QQ:84831612


* @date 2005 
*/ 
public final class LinuxSystemTool 

/** 
* get memory by used info 

* @return int[] result 
* result.length==4;int[0]=MemTotal;int[1]=MemFree;int[2]=SwapTotal;int[3]=SwapFree; 
* @throws IOException 
* @throws InterruptedException 
*/ 
public static int[] getMemInfo() throws IOException, InterruptedException 

File file = new File("/proc/meminfo"); 
BufferedReader br = new BufferedReader(new InputStreamReader( 
new FileInputStream(file))); 
int[] result = new int[4]; 
String str = null; 
StringTokenizer token = null; 
while((str = br.readLine()) != null) 

token = new StringTokenizer(str); 
if(!token.hasMoreTokens()) 
continue; 

str = token.nextToken(); 
if(!token.hasMoreTokens()) 
continue; 

if(str.equalsIgnoreCase("MemTotal:")) 
result[0] = Integer.parseInt(token.nextToken()); 
else if(str.equalsIgnoreCase("MemFree:")) 
result[1] = Integer.parseInt(token.nextToken()); 
else if(str.equalsIgnoreCase("SwapTotal:")) 
result[2] = Integer.parseInt(token.nextToken()); 
else if(str.equalsIgnoreCase("SwapFree:")) 
result[3] = Integer.parseInt(token.nextToken()); 


return result; 


/** 
* get memory by used info 

* @return float efficiency 
* @throws IOException 
* @throws InterruptedException 
*/ 
public static float getCpuInfo() throws IOException, InterruptedException 

File file = new File("/proc/stat"); 
BufferedReader br = new BufferedReader(new InputStreamReader( 
new FileInputStream(file))); 
StringTokenizer token = new StringTokenizer(br.readLine()); 
token.nextToken(); 
int user1 = Integer.parseInt(token.nextToken()); 
int nice1 = Integer.parseInt(token.nextToken()); 
int sys1 = Integer.parseInt(token.nextToken()); 
int idle1 = Integer.parseInt(token.nextToken()); 

Thread.sleep(1000); 

br = new BufferedReader( 
new InputStreamReader(new FileInputStream(file))); 
token = new StringTokenizer(br.readLine()); 
token.nextToken(); 
int user2 = Integer.parseInt(token.nextToken()); 
int nice2 = Integer.parseInt(token.nextToken()); 
int sys2 = Integer.parseInt(token.nextToken()); 
int idle2 = Integer.parseInt(token.nextToken()); 

return (float)((user2 + sys2 + nice2) - (user1 + sys1 + nice1)) / (float)((user2 + nice2 + sys2 + idle2) - (user1 + nice1 + sys1 + idle1)); 


/** 
* 测试类 

*

@author javer QQ:84831612


* @date 2005 
*/ 
public class JaverTest 

public static void main(String[] args) throws Exception 

int[] memInfo = LinuxSystemTool.getMemInfo(); 
System.out.println("MemTotal:" + memInfo[0]); 
System.out.println("MemFree:" + memInfo[1]); 
System.out.println("SwapTotal:" + memInfo[2]); 
System.out.println("SwapFree:" + memInfo[3]); 

System.out.println("CPU利用率:" + LinuxSystemTool.getCpuInfo()); 

分享到:
评论

相关推荐

    新手入门 Linux菜鸟必学的60个命令-转载Linux必学命令

    - **功能:** `top` 命令用于实时监控系统的 CPU、内存等资源使用情况。 - **用法:** `top` - **示例:** 运行 `top` 命令: ```bash top ``` **磁盘使用情况命令 (df):** - **功能:** `df` 命令用于查看文件系统...

    一周内学会linux系统管理

    10. **系统监控**:了解资源监控工具,如htop、iostat、vmstat,监控CPU、内存、磁盘I/O和网络状态。 11. **防火墙与安全**:理解iptables防火墙规则,设置端口开放和关闭,了解SSH安全实践,如禁用密码登录、设置...

    转载对电脑的初步了解.doc

    - 在DOS系统中,可以使用命令检查内存容量。 - 在Windows系统中,可以通过系统信息或任务管理器查看硬件和内存信息。 电脑的每个组件都有其特定的功能和重要性,共同协作完成各种复杂的计算和操作任务。了解这些...

    FIBOCOM G500 OpenCPU 编程应用设计说明_V1.0.1.pdf

    模块应用了OpenCPU技术,这可能意味着该模块内部具有一个开放的操作系统(例如Linux),能够在标准的CPU环境下执行用户编写的程序。OpenCPU概念下,用户可以利用模块提供的编程接口(APIs)定制程序,并在设备上运行...

    内核编译配置选项简介

    - **BSD进程会计**:记录有关进程的信息,如创建时间、创建者、内存使用情况等,并将其写入文件。这有助于诊断和性能分析。 - **使用新的第三版文件格式**:使用更新的文件格式来存储进程会计信息,但可能不兼容旧...

    GPU深度发掘(一)GPGPU数学基础教程

    - **OpenGL离屏渲染**:使用FBO(帧缓冲对象)进行离屏渲染,以便于在内存中存储渲染结果。 #### 4. GPGPU概念详解 ##### 4.1 数组=纹理 在GPGPU编程中,可以将数组视为纹理来进行处理,这样可以在GPU上高效地存储...

    基于嵌入式软PLC的掘进机控制平台关键技术分析.pdf

    系统中的数据采集、处理和决策支持的流程是通过软PLC分析数据,然后在CPU中形成决策信号值,控制机器的动作、作业逻辑以及相关保护功能。 控制平台的软硬件架构设计需要形成分层结构,使系统具有开放性和可定制性,...

    服务器系统平台技术规格书收集.pdf

    * 主机一配置要求包括:CPU类型、处理器个数、TPCC值要求、内存、内置磁盘容量、系统带宽、I/O带宽、实际配置系统I/O插槽、内置DVD-ROM、快速以太网口、多模光纤网卡、FC光纤通道卡等 * 操作系统:UNIX,支持中文...

    OAKS16-MINI FuLLKit

    - **操作系统**:推荐使用 Windows 或 Linux 等主流操作系统。 - **硬件要求**:至少配备 2GB 内存,具有足够的 CPU 性能。 - **接口要求**:具备 USB 接口或其他可用于连接调试器的接口。 ##### 6.2 开发环境配置 ...

    oracle 双机集群文档(转载)

    在硬件层面,安装Oracle RAC需要具备一定的配置,如文中提到的双CPU、1GB内存、双千兆网卡以及通过SCSI连接的共享磁盘。软件层面,每个节点需要操作系统、Oracle集群软件(Oracle Clusterware)、Oracle RAC软件,...

    详解VMware12安装centOS8的配置图文教程(vm虚拟机安装centos8教程)

    如果不熟悉Linux的文件系统,可以使用默认设置。 - 如果需要自定义分区,可以选择分区方式,然后接受更改。 6. 安装过程 - 安装过程中会要求设置root用户的密码。可以设置一个复杂一些的密码,以保证系统的安全性。...

Global site tag (gtag.js) - Google Analytics