前些天正好需要完成一个实时分析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());
}
}
相关推荐
- **功能:** `top` 命令用于实时监控系统的 CPU、内存等资源使用情况。 - **用法:** `top` - **示例:** 运行 `top` 命令: ```bash top ``` **磁盘使用情况命令 (df):** - **功能:** `df` 命令用于查看文件系统...
10. **系统监控**:了解资源监控工具,如htop、iostat、vmstat,监控CPU、内存、磁盘I/O和网络状态。 11. **防火墙与安全**:理解iptables防火墙规则,设置端口开放和关闭,了解SSH安全实践,如禁用密码登录、设置...
- 在DOS系统中,可以使用命令检查内存容量。 - 在Windows系统中,可以通过系统信息或任务管理器查看硬件和内存信息。 电脑的每个组件都有其特定的功能和重要性,共同协作完成各种复杂的计算和操作任务。了解这些...
编写操作系统是一项复杂的任务,需要理解计算机硬件的工作原理,特别是处理器(CPU)的功能和内存管理。在这个过程中,我们将从最基础的层面开始,即实模式和保护模式。 【实模式与保护模式】 在计算机启动时,CPU ...
模块应用了OpenCPU技术,这可能意味着该模块内部具有一个开放的操作系统(例如Linux),能够在标准的CPU环境下执行用户编写的程序。OpenCPU概念下,用户可以利用模块提供的编程接口(APIs)定制程序,并在设备上运行...
- **BSD进程会计**:记录有关进程的信息,如创建时间、创建者、内存使用情况等,并将其写入文件。这有助于诊断和性能分析。 - **使用新的第三版文件格式**:使用更新的文件格式来存储进程会计信息,但可能不兼容旧...
- **OpenGL离屏渲染**:使用FBO(帧缓冲对象)进行离屏渲染,以便于在内存中存储渲染结果。 #### 4. GPGPU概念详解 ##### 4.1 数组=纹理 在GPGPU编程中,可以将数组视为纹理来进行处理,这样可以在GPU上高效地存储...
系统中的数据采集、处理和决策支持的流程是通过软PLC分析数据,然后在CPU中形成决策信号值,控制机器的动作、作业逻辑以及相关保护功能。 控制平台的软硬件架构设计需要形成分层结构,使系统具有开放性和可定制性,...
* 主机一配置要求包括:CPU类型、处理器个数、TPCC值要求、内存、内置磁盘容量、系统带宽、I/O带宽、实际配置系统I/O插槽、内置DVD-ROM、快速以太网口、多模光纤网卡、FC光纤通道卡等 * 操作系统:UNIX,支持中文...
- **操作系统**:推荐使用 Windows 或 Linux 等主流操作系统。 - **硬件要求**:至少配备 2GB 内存,具有足够的 CPU 性能。 - **接口要求**:具备 USB 接口或其他可用于连接调试器的接口。 ##### 6.2 开发环境配置 ...
如果不熟悉Linux的文件系统,可以使用默认设置。 - 如果需要自定义分区,可以选择分区方式,然后接受更改。 6. 安装过程 - 安装过程中会要求设置root用户的密码。可以设置一个复杂一些的密码,以保证系统的安全性。...