`

java 获取进程ID 物理内存 cpu使用百分比(linux环境)

阅读更多

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;

import org.apache.log4j.Logger;

import sun.management.ManagementFactory;

import com.ailk.ts.message.bean.MonitorInfoBean;

public class SystemInfoTools {
	final static boolean isNotWindows = System.getProperties().getProperty("os.name").toLowerCase().indexOf("windows") < 0;
	final static BigDecimal DIVISOR = BigDecimal.valueOf(1024);
	private final static Logger logger = Logger.getLogger(SystemInfoTools.class);
	
	public static int getPid(){
		return Integer.parseInt(ManagementFactory.getRuntimeMXBean().getName().split("@")[0]);
	}
	
	public static MonitorInfoBean getMonitorInfoBean() {
		MonitorInfoBean monitorInfo = new MonitorInfoBean();
		if(!isNotWindows){
			monitorInfo.setMemUsage(500);
			return monitorInfo;
		}
		Runtime rt = Runtime.getRuntime();
		BufferedReader in = null;
		try {
			int pid = getPid();
			String[] cmd = {
					"/bin/sh",
					"-c",
					"top -b -n 1 | grep " + pid
					};
			Process p = rt.exec(cmd);
			in = new BufferedReader(new InputStreamReader(p.getInputStream()));
			String str = null;
			String[] strArray = null;
			while ((str = in.readLine()) != null) {
				logger.debug("top: " + str);
				int m = 0;
				strArray = str.split(" ");
				for (int i = 0; i < strArray.length; i++) {
					String info = strArray[i];
					if (info.trim().length() == 0){
						continue;
					}
					if(m == 5) {//第5列为进程占用的物理内存值
						String unit = info.substring(info.length() - 1);
						if(unit.equalsIgnoreCase("g")) {
							monitorInfo.setMemUseSize(Double.parseDouble(info));
						} else if(unit.equalsIgnoreCase("m")) {
							BigDecimal memUseSize = new BigDecimal(info.substring(0, info.length() - 1));
							monitorInfo.setMemUseSize(memUseSize.divide(DIVISOR, 2, BigDecimal.ROUND_HALF_UP).doubleValue());
						} else {
							BigDecimal memUseSize = new BigDecimal(info).divide(DIVISOR);
							monitorInfo.setMemUseSize(memUseSize.divide(DIVISOR, 2, BigDecimal.ROUND_HALF_UP).doubleValue());
						}
					}
					if(m == 8) {//第9列为CPU的使用百分比
						monitorInfo.setCpuUsage(Double.parseDouble(info));
					}
					if(m == 9) {//第10列为内存的使用百分比
						monitorInfo.setMemUsage(Double.parseDouble(info));
					}
					m++;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	    
        return monitorInfo;
	}

}

 

MonitorInfoBean.java

 

 

public class MonitorInfoBean {

	/** cpu使用率 */
	private double cpuUsage;

	/** 内存使用率 */
	private double memUsage;

	/** 内存使用的大小 */
	private double memUseSize;

	public double getCpuUsage() {
		return cpuUsage;
	}

	public void setCpuUsage(double cpuUsage) {
		this.cpuUsage = cpuUsage;
	}

	public double getMemUsage() {
		return memUsage;
	}

	public void setMemUsage(double memUsage) {
		this.memUsage = memUsage;
	}

	public double getMemUseSize() {
		return memUseSize;
	}

	public void setMemUseSize(double memUseSize) {
		this.memUseSize = memUseSize;
	}

}
分享到:
评论

相关推荐

    获取指定进程的内存和cpu使用率

    获取进程的内存使用情况,我们可以使用`PdhAddCounter`与`\\Process(进程名)\Private Bytes`或`\\Process(进程名)\Working Set`这两个性能计数器。前者表示进程独占的内存,后者则包含了进程的虚拟内存和物理内存。...

    java获取各进程的信息

    下面通过一个示例程序来具体说明如何使用Sigar来获取进程的PID、用户、启动时间、大小、所占内存、状态、运行时间、CPU使用率以及命令等信息。 #### 示例代码分析 ```java private static final int SLEEP_TIME = ...

    Java获取系统CPU、内存、硬盘等系统信息

    本文将详细探讨如何利用Java获取Windows和Linux系统的CPU、内存以及硬盘信息。 首先,让我们聚焦于CPU信息的获取。在Java中,`java.lang.management`包提供了ManagementFactory类,它包含了获取系统管理信息的方法...

    获取进程的cpu和内存的占用大小

    为了计算CPU占用率,我们使用`GetProcessTimes`获取进程的创建时间、退出时间、内核时间和用户时间,然后根据这些信息计算出CPU使用时间占总时间的比例,转化为百分比。 需要注意的是,由于CPU占用率是瞬时值,为了...

    c#获取系统和指定进程的CPU和内存占用率

    在C#编程中,了解如何获取系统和特定进程的CPU及内存占用率是十分重要的,尤其是在进行性能监控或资源管理的场景下。本篇将详细解释如何实现这一功能,并提供相应的代码示例。 首先,我们要关注的是操作系统级别的...

    Java获取计算机CPU、内存等信息

    在Java编程中,获取计算机的硬件信息,如CPU使用率和内存使用情况,是一项常见的需求。这主要应用于系统监控、性能分析以及资源管理等方面。Java虽然不像C++或C#那样可以直接调用操作系统API,但它提供了Java ...

    如何在qnx上获取进程内存_如何在qnx上获取进程内存_

    在`top`界面中,你可以看到内存使用相关的列,如`%MEM`(进程占用的总内存百分比)和`RES`(非交换的物理内存占用)。 如果你需要进行更深入的内存分析,比如查找内存泄漏,可能需要使用专门的内存调试工具,例如...

    android 获取cpu使用率, 内存 实时数据

    在Android平台上,获取CPU使用率和内存实时数据是开发者进行性能监控、优化应用或实现系统监控功能的关键步骤。本文将详细介绍如何在Android中获取这些关键信息,并提供相关的代码示例。 首先,我们要理解CPU使用率...

    wpf实现的cpu与物理内存使用情况

    在本文中,我们将深入探讨如何使用Windows Presentation Foundation (WPF) 来实时监控和展示系统的CPU使用率和物理内存消耗情况。WPF是.NET Framework的一部分,它为开发人员提供了丰富的功能来创建美观且功能强大的...

    进程cpu占用率和内存使用大小获取

    在IT领域,尤其是在系统编程和性能分析中,了解如何获取进程的CPU占用率和内存使用情况至关重要。在C++环境中,这通常涉及到操作系统接口的使用,例如Windows API或POSIX系统调用。以下是对"进程CPU占用率和内存使用...

    C# 监测服务器使用情况(CPU、内存、硬盘、网络宽带、进程)

    内存使用率、总CPU百分比、获得物理总内存(、获得可用内存(G)、获取mac地址、获取分区信息使用空间 进程(XX)CPU百分比、进程(XX)占用的内存大小、进程(XX)占用的内存百分比。 PerformanceCount方面比较详细,...

    java监控linux cpu使用率

    在Java中,我们可以利用`Runtime`类或`ProcessBuilder`类来执行Linux命令,如`top`或`vmstat`,然后解析输出以获取CPU使用率。但是,这种方法可能会受到shell环境的影响,且不够高效。更常见的是使用Java的`java....

    Linux获取CPU 内存信息到文件C++简单实现

    在Linux系统下将cpu、内存等信息获取并放在同一个文件中的C++源码,需要g++才能编译

    Java 获取系统信息,包括CPU使用率、硬盘大小、网卡状态、系统信息等

    本篇文章将探讨如何利用Java获取CPU使用率、硬盘大小、网卡状态以及更广泛的系统信息。我们将主要关注一个名为"libsigar-x86-linux.so"的库文件,这是一个跨平台的系统信息获取工具——Sigar(System Information ...

    delphi 仿任务管理器,cpu使用率,内存使用

    delphi 仿任务管理器 获取每个进程的cpu使用率,内存使用情况,很好用,有源代码 ,delphi源码

    C#获取CPU、内存、硬盘当前使用百分比

    在IT领域,尤其是在系统监控和性能分析中,获取CPU、内存和硬盘的使用情况是非常重要的。C#作为.NET框架下的主要编程语言,提供了丰富的API来帮助开发者实现这一目标。本篇将详细介绍如何利用C#来获取这些关键硬件...

    java中获取CPU 内存的方法

    在Java编程中,获取系统资源信息,如CPU使用率和内存使用情况,是常见的需求,尤其是在性能监控和问题排查时。以下将详细解释如何在Java中实现这些功能,并结合提供的代码片段进行说明。 首先,创建一个`...

    WPF获取Windows系统内存占用和CPU占用

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)和Visifire库来实现一个功能,即实时监测并展示Windows操作系统的内存占用和CPU使用情况。Visifire是一款强大的数据可视化工具,它提供了...

    SNMP查看CPU及内存使用率

    ### SNMP查看CPU及内存使用率:深入解析与实践 #### 概述 简单网络管理协议(SNMP,Simple Network Management Protocol)是一种广泛应用于网络管理的标准协议,用于收集和组织网络设备的信息,以及修改该信息以...

Global site tag (gtag.js) - Google Analytics