- 浏览: 2286917 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (357)
- J2EE (49)
- JavaScript (40)
- Spring (19)
- Struts (5)
- CSS (8)
- Hibernate (16)
- Java (67)
- DWR (4)
- JSON (3)
- XFIRE (1)
- Tomcat (1)
- Ant (2)
- 设计模式 (2)
- 经典收藏 (2)
- JSP (10)
- Linux (0)
- WebLogic (11)
- myeclipse (13)
- Buffalo (4)
- 文件上传相关 (1)
- oracle (33)
- html (6)
- JSTL (3)
- SVN (2)
- GIT (1)
- 孙卫琴(Java网络编程精解) (1)
- DOM4J (2)
- Swing (1)
- AJAX (1)
- Eclipse (5)
- 日志组件 (3)
- PowerDesigner (1)
- Jquery (22)
- IT技术开发相关网址 (1)
- Nutz (1)
- 其它 (1)
- Velocity (3)
- WebService (1)
- MySql (2)
- Android (1)
- Maven (2)
- Quartz (11)
- Lucene (1)
- springsource (1)
- Junit (1)
- Activiti (0)
最新评论
-
yzlseu:
拼凑,没有营养
Activiti进阶—分配组任务 -
zhangsenhao:
非常赞!代码很清楚
SpringMVC3.0+MyIbatis3.0(分页示例) -
xiamw2000:
分页写得不对,应该是 : order by ${orderNa ...
SpringMVC3.0+MyIbatis3.0(分页示例) -
sheertewtw:
...
SpringMVC:上传与下载 -
kingtoon:
...
XSS之xssprotect
java不用jni,也可以获得当前系统性能信息
http://kakaluyi.iteye.com/blog/211492
Java获取系统信息cpu,内存,硬盘,进程等的相关方法
http://www.vvcha.cn/c.aspx?id=170249
以下为转帖
1 获取 CPU使用率,内存,各盘使用情况
2 获取物理占用信息
http://kakaluyi.iteye.com/blog/211492
Java获取系统信息cpu,内存,硬盘,进程等的相关方法
http://www.vvcha.cn/c.aspx?id=170249
以下为转帖
1 获取 CPU使用率,内存,各盘使用情况
import java.io.File; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.lang.management.ManagementFactory; import java.util.ArrayList; import java.util.List; import com.sun.management.OperatingSystemMXBean; /** * 获取windows系统信息(CPU,内存,文件系统) */ public class WindowsInfoUtil { private static final int CPUTIME = 500; private static final int PERCENT = 100; private static final int FAULTLENGTH = 10; public static void main(String[] args) { System.out.println(getCpuRatioForWindows()); System.out.println(getMemery()); System.out.println(getDisk()); } // 获取内存使用率 public static String getMemery() { OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory .getOperatingSystemMXBean(); // 总的物理内存+虚拟内存 long totalvirtualMemory = osmxb.getTotalSwapSpaceSize(); // 剩余的物理内存 long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize(); Double compare = (Double) (1 - freePhysicalMemorySize * 1.0 / totalvirtualMemory) * 100; String str = "内存已使用:" + compare.intValue() + "%"; return str; } // 获取文件系统使用率 public static List<String> getDisk() { // 操作系统 List<String> list = new ArrayList<String>(); for (char c = 'A'; c <= 'Z'; c++) { String dirName = c + ":/"; File win = new File(dirName); if (win.exists()) { long total = (long) win.getTotalSpace(); long free = (long) win.getFreeSpace(); Double compare = (Double) (1 - free * 1.0 / total) * 100; String str = c + ":盘 已使用 " + compare.intValue() + "%"; list.add(str); } } return list; } // 获得cpu使用率 public static String getCpuRatioForWindows() { try { String procCmd = System.getenv("windir") + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount"; // 取进程信息 long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd)); Thread.sleep(CPUTIME); long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd)); if (c0 != null && c1 != null) { long idletime = c1[0] - c0[0]; long busytime = c1[1] - c0[1]; return "CPU使用率:" + Double.valueOf( PERCENT * (busytime) * 1.0 / (busytime + idletime)).intValue() + "%"; } else { return "CPU使用率:" + 0 + "%"; } } catch (Exception ex) { ex.printStackTrace(); return "CPU使用率:" + 0 + "%"; } } // 读取cpu相关信息 private static long[] readCpu(final Process proc) { long[] retn = new long[2]; try { proc.getOutputStream().close(); InputStreamReader ir = new InputStreamReader(proc.getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line = input.readLine(); if (line == null || line.length() < FAULTLENGTH) { return null; } int capidx = line.indexOf("Caption"); int cmdidx = line.indexOf("CommandLine"); int rocidx = line.indexOf("ReadOperationCount"); int umtidx = line.indexOf("UserModeTime"); int kmtidx = line.indexOf("KernelModeTime"); int wocidx = line.indexOf("WriteOperationCount"); long idletime = 0; long kneltime = 0; long usertime = 0; while ((line = input.readLine()) != null) { if (line.length() < wocidx) { continue; } // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = substring(line, capidx, cmdidx - 1).trim(); String cmd = substring(line, cmdidx, kmtidx - 1).trim(); if (cmd.indexOf("wmic.exe") >= 0) { continue; } String s1 = substring(line, kmtidx, rocidx - 1).trim(); String s2 = substring(line, umtidx, wocidx - 1).trim(); if (caption.equals("System Idle Process") || caption.equals("System")) { if (s1.length() > 0) idletime += Long.valueOf(s1).longValue(); if (s2.length() > 0) idletime += Long.valueOf(s2).longValue(); continue; } if (s1.length() > 0) kneltime += Long.valueOf(s1).longValue(); if (s2.length() > 0) usertime += Long.valueOf(s2).longValue(); } retn[0] = idletime; retn[1] = kneltime + usertime; return retn; } catch (Exception ex) { ex.printStackTrace(); } finally { try { proc.getInputStream().close(); } catch (Exception e) { e.printStackTrace(); } } return null; } /** * 由于String.subString对汉字处理存在问题(把一个汉字视为一个字节),因此在 包含汉字的字符串时存在隐患,现调整如下: * * @param src * 要截取的字符串 * @param start_idx * 开始坐标(包括该坐标) * @param end_idx * 截止坐标(包括该坐标) * @return */ private static String substring(String src, int start_idx, int end_idx) { byte[] b = src.getBytes(); String tgt = ""; for (int i = start_idx; i <= end_idx; i++) { tgt += (char) b[i]; } return tgt; } }
2 获取物理占用信息
public class MonitorInfoBean { /** 可使用内存. */ private long totalMemory; /** 剩余内存. */ private long freeMemory; /** 最大可使用内存. */ private long maxMemory; /** 操作系统. */ private String osName; /** 总的物理内存. */ private long totalMemorySize; /** 剩余的物理内存. */ private long freePhysicalMemorySize; /** 已使用的物理内存. */ private long usedMemory; /** 线程总数. */ private int totalThread; /** cpu使用率. */ private double cpuRatio; public long getFreeMemory() { return freeMemory; } public void setFreeMemory(long freeMemory) { this.freeMemory = freeMemory; } public long getFreePhysicalMemorySize() { return freePhysicalMemorySize; } public void setFreePhysicalMemorySize(long freePhysicalMemorySize) { this.freePhysicalMemorySize = freePhysicalMemorySize; } public long getMaxMemory() { return maxMemory; } public void setMaxMemory(long maxMemory) { this.maxMemory = maxMemory; } public String getOsName() { return osName; } public void setOsName(String osName) { this.osName = osName; } public long getTotalMemory() { return totalMemory; } public void setTotalMemory(long totalMemory) { this.totalMemory = totalMemory; } public long getTotalMemorySize() { return totalMemorySize; } public void setTotalMemorySize(long totalMemorySize) { this.totalMemorySize = totalMemorySize; } public int getTotalThread() { return totalThread; } public void setTotalThread(int totalThread) { this.totalThread = totalThread; } public long getUsedMemory() { return usedMemory; } public void setUsedMemory(long usedMemory) { this.usedMemory = usedMemory; } public double getCpuRatio() { return cpuRatio; } public void setCpuRatio(double cpuRatio) { this.cpuRatio = cpuRatio; } }
import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.util.StringTokenizer; import sun.management.ManagementFactory; import com.sun.management.OperatingSystemMXBean; public class cpu { private static final int CPUTIME = 30; private static final int PERCENT = 100; private static final int FAULTLENGTH = 10; private static final File versionFile = new File("/proc/version"); private static String linuxVersion = null; public double getCpuRatio() { // 操作系统 String osName = System.getProperty("os.name"); double cpuRatio = 0; if (osName.toLowerCase().startsWith("windows")) { return cpuRatio = this.getCpuRatioForWindows(); } else { return cpuRatio = this.getCpuRateForLinux(); } } /** * 获得当前的监控对象. * * @return 返回构造好的监控对象 */ public MonitorInfoBean getMonitorInfoBean() throws Exception { int kb = 1024; // 可使用内存 long totalMemory = Runtime.getRuntime().totalMemory() / kb; // 剩余内存 long freeMemory = Runtime.getRuntime().freeMemory() / kb; // 最大可使用内存 long maxMemory = Runtime.getRuntime().maxMemory() / kb; OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory .getOperatingSystemMXBean(); // 操作系统 String osName = System.getProperty("os.name"); // 总的物理内存 long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb; // 剩余的物理内存 long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb; // 已使用的物理内存 long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb .getFreePhysicalMemorySize()) / kb; // 获得线程总数 ThreadGroup parentThread; for (parentThread = Thread.currentThread().getThreadGroup(); parentThread .getParent() != null; parentThread = parentThread.getParent()) ; int totalThread = parentThread.activeCount(); double cpuRatio = 0; if (osName.toLowerCase().startsWith("windows")) { cpuRatio = this.getCpuRatioForWindows(); } else { cpuRatio = this.getCpuRateForLinux(); } // 构造返回对象 MonitorInfoBean infoBean = new MonitorInfoBean(); infoBean.setFreeMemory(freeMemory); infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize); infoBean.setMaxMemory(maxMemory); infoBean.setOsName(osName); infoBean.setTotalMemory(totalMemory); infoBean.setTotalMemorySize(totalMemorySize); infoBean.setTotalThread(totalThread); infoBean.setUsedMemory(usedMemory); infoBean.setCpuRatio(cpuRatio); return infoBean; } private static double getCpuRateForLinux() { InputStream is = null; InputStreamReader isr = null; BufferedReader brStat = null; StringTokenizer tokenStat = null; try { System.out.println("Get usage rate of CUP , linux version: " + linuxVersion); Process process = Runtime.getRuntime().exec("top -b -n 1"); is = process.getInputStream(); isr = new InputStreamReader(is); brStat = new BufferedReader(isr); if (linuxVersion.equals("2.4")) { brStat.readLine(); brStat.readLine(); brStat.readLine(); brStat.readLine(); tokenStat = new StringTokenizer(brStat.readLine()); tokenStat.nextToken(); tokenStat.nextToken(); String user = tokenStat.nextToken(); tokenStat.nextToken(); String system = tokenStat.nextToken(); tokenStat.nextToken(); String nice = tokenStat.nextToken(); System.out.println(user + " , " + system + " , " + nice); user = user.substring(0, user.indexOf("%")); system = system.substring(0, system.indexOf("%")); nice = nice.substring(0, nice.indexOf("%")); float userUsage = new Float(user).floatValue(); float systemUsage = new Float(system).floatValue(); float niceUsage = new Float(nice).floatValue(); return (userUsage + systemUsage + niceUsage) / 100; } else { brStat.readLine(); brStat.readLine(); tokenStat = new StringTokenizer(brStat.readLine()); tokenStat.nextToken(); tokenStat.nextToken(); tokenStat.nextToken(); tokenStat.nextToken(); tokenStat.nextToken(); tokenStat.nextToken(); tokenStat.nextToken(); String cpuUsage = tokenStat.nextToken(); System.out.println("CPU idle : " + cpuUsage); Float usage = new Float(cpuUsage.substring(0, cpuUsage .indexOf("%"))); return (1 - usage.floatValue() / 100); } } catch (IOException ioe) { System.out.println(ioe.getMessage()); freeResource(is, isr, brStat); return 1; } finally { freeResource(is, isr, brStat); } } private static void freeResource(InputStream is, InputStreamReader isr, BufferedReader br) { try { if (is != null) is.close(); if (isr != null) isr.close(); if (br != null) br.close(); } catch (IOException ioe) { System.out.println(ioe.getMessage()); } } /** * 获得CPU使用率. * * @return 返回cpu使用率 */ private double getCpuRatioForWindows() { try { String procCmd = System.getenv("windir") + "\\system32\\wbem\\wmic.exe process get Caption,CommandLine," + "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount"; // 取进程信息 long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd)); Thread.sleep(CPUTIME); long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd)); if (c0 != null && c1 != null) { long idletime = c1[0] - c0[0]; long busytime = c1[1] - c0[1]; return Double.valueOf( PERCENT * (busytime) / (busytime + idletime)) .doubleValue(); } else { return 0.0; } } catch (Exception ex) { ex.printStackTrace(); return 0.0; } } /** * * 读取CPU信息. * * @param proc */ private long[] readCpu(final Process proc) { long[] retn = new long[2]; try { proc.getOutputStream().close(); InputStreamReader ir = new InputStreamReader(proc.getInputStream()); LineNumberReader input = new LineNumberReader(ir); String line = input.readLine(); if (line == null || line.length() < FAULTLENGTH) { return null; } int capidx = line.indexOf("Caption"); int cmdidx = line.indexOf("CommandLine"); int rocidx = line.indexOf("ReadOperationCount"); int umtidx = line.indexOf("UserModeTime"); int kmtidx = line.indexOf("KernelModeTime"); int wocidx = line.indexOf("WriteOperationCount"); long idletime = 0; long kneltime = 0; long usertime = 0; while ((line = input.readLine()) != null) { if (line.length() < wocidx) { continue; } // 字段出现顺序:Caption,CommandLine,KernelModeTime,ReadOperationCount, // ThreadCount,UserModeTime,WriteOperation String caption = Bytes.substring(line, capidx, cmdidx - 1) .trim(); String cmd = Bytes.substring(line, cmdidx, kmtidx - 1).trim(); if (cmd.indexOf("wmic.exe") >= 0) { continue; } // log.info("line="+line); if (caption.equals("System Idle Process") || caption.equals("System")) { idletime += Long.valueOf( Bytes.substring(line, kmtidx, rocidx - 1).trim()) .longValue(); idletime += Long.valueOf( Bytes.substring(line, umtidx, wocidx - 1).trim()) .longValue(); continue; } kneltime += Long.valueOf( Bytes.substring(line, kmtidx, rocidx - 1).trim()) .longValue(); usertime += Long.valueOf( Bytes.substring(line, umtidx, wocidx - 1).trim()) .longValue(); } retn[0] = idletime; retn[1] = kneltime + usertime; return retn; } catch (Exception ex) { ex.printStackTrace(); } finally { try { proc.getInputStream().close(); } catch (Exception e) { e.printStackTrace(); } } return null; } /** * 测试方法. * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { cpu c = new cpu(); System.out.println("cpu占有率1=" + c.getCpuRatio()); System.out.println("cpu占有率2=" + c.getCpuRatioForWindows()); MonitorInfoBean monitorInfo = c.getMonitorInfoBean(); System.out.println("cpu占有率=" + monitorInfo.getCpuRatio()); System.out.println("可使用内存=" + monitorInfo.getTotalMemory()); System.out.println("剩余内存=" + monitorInfo.getFreeMemory()); System.out.println("最大可使用内存=" + monitorInfo.getMaxMemory()); System.out.println("操作系统=" + monitorInfo.getOsName()); System.out.println("总的物理内存=" + monitorInfo.getTotalMemorySize() + "kb"); System.out.println("剩余的物理内存=" + monitorInfo.getFreeMemory() + "kb"); System.out.println("已使用的物理内存=" + monitorInfo.getUsedMemory() + "kb"); System.out.println("线程总数=" + monitorInfo.getTotalThread() + "kb"); } } class Bytes { public static String substring(String src, int start_idx, int end_idx) { byte[] b = src.getBytes(); String tgt = ""; for (int i = start_idx; i <= end_idx; i++) { tgt += (char) b[i]; } return tgt; } }
发表评论
-
java json-lib & jQuery & jsonp
2016-06-30 11:31 823参考链接: 1、http://hanqunfeng.iteye ... -
随机分配算法(Intege)
2016-01-08 13:05 5187参考资料: http://blog.csdn.net/yaer ... -
XSS之xssprotect
2012-12-07 23:03 29478参考资料 1 跨网站脚本 ... -
Java之Thread(线程题)
2011-10-31 12:33 1971特别说明:java线程相关的参考了张孝祥老师的代码 参考资料 ... -
Java之ThreadLocal(Synchronized)
2011-10-31 10:10 2689参考资料 1 深入研究java.lang.ThreadLoca ... -
Java之synchronized,wait,notify结合运用示例
2011-10-26 11:54 5934场景一:要求二个线程各 ... -
Java之synchronized深入应用
2011-10-23 08:03 1937参考资料 1 java synchronized详解 http ... -
Java之Timer入门
2011-10-11 15:32 1691参考资料 1 java中timer用 ... -
Java之线程(匿名内部类)
2011-10-10 16:36 164231 Thread对象 Thread t = new Thr ... -
Java之线程(join)
2011-10-10 15:39 1478运用场景:多个线程之间 ... -
Java之线程(synchronized,wait(),notify(),notifyAll())
2011-10-10 15:03 3247参考资料 Java多线程入门大全(适用于有一定基础者) htt ... -
Java之线程(sleep,线程名)
2011-10-10 13:09 9713参考资料 1 Java线程:创建与启动 http://lava ... -
Java之线程入门
2011-10-10 11:11 1533参考资料 1 Java线程:概 ... -
java之表反向生成类
2011-09-23 16:41 3476环境:XP+JDK1.5+Oracle10g 注意事项 1 请 ... -
java之线程, NIO学习资料
2011-09-19 12:13 1127Concurrent In Java 6 第一部分 集合 ... -
Java之BigDecimal
2011-09-15 10:12 18020参考资料 1 java.math.BigDecimal的用法 ... -
java.lang.OutOfMemoryError异常解决方法
2011-08-27 16:47 2104转载:java.lang.OutOfMemoryError异常 ... -
Jcom之jp.ne.so_net.ga2.no_ji.jcom.JComException: createInstance() failed HRESULT=
2011-08-25 12:33 11732参考资料 java应用jcom将word转pdf http:/ ... -
Quartz之AnnualCalendar
2011-08-11 17:14 5817问题1 我想排除一年中 ... -
Quartz之InterruptableJob
2011-08-11 11:03 11777问题1 由于业务需要,停止Quartz中正在执行的任务 Qua ...
相关推荐
linux 下用java 获取系统信息 cpu mem jvm等 用java调用系统命令得到,方便实用
在Java编程语言中,获取系统信息是常见的需求,这包括但不限于系统内存的使用...以上就是使用Java获取系统信息的主要类和方法的概述。在实际开发中,需要根据具体的需求和目标平台选择合适的方式来获取和处理这些信息。
Java 获取系统信息(CPU、内存、硬盘、进程等)的相关方法 Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU、内存、硬盘、进程等。下面将介绍两种获取系统信息的方法。 方法一:使用 Java ...
Java 获取系统信息(CPU、内存、硬盘、进程等)的相关方法 Java 获取系统信息是指通过 Java 语言获取当前系统的各种信息,包括 CPU 信息、内存信息、硬盘信息、进程信息等。在实际开发中,这些信息往往是非常有用的...
本篇文章将探讨如何利用Java获取CPU使用率、硬盘大小、网卡状态以及更广泛的系统信息。我们将主要关注一个名为"libsigar-x86-linux.so"的库文件,这是一个跨平台的系统信息获取工具——Sigar(System Information ...
在Java编程语言中,获取操作系统的信息是一项常见的任务,这有助于开发者了解程序运行的环境,进行兼容性检查,或者根据不同的操作...通过实践和学习,你可以更好地掌握Java获取操作系统信息的技巧,提升你的开发能力。
本项目"machineInfo-master"显然是一个用于展示如何利用Java获取系统信息的示例代码库。下面我们将详细讨论如何在Java中获取系统信息,并基于提供的文件名"machineInfo-master"推测可能包含的内容。 1. **Java的`...
### 操作系统信息 操作系统相关的属性提供了对运行Java程序的主机操作系统的深入了解: - **操作系统名称**:`os.name`,如“Linux”、“Windows 10”等。 - **操作系统架构**:`os.arch`,显示了操作系统的架构...
标题中的“一个非常不错的用JAVA获得系统信息的包”指的是使用Java编程语言获取计算机系统信息的工具或库。这样的工具通常允许开发者通过代码获取到操作系统、硬件和网络等多方面的详细信息,便于监控、分析和优化...
在Java编程中,获取系统信息是一项重要的任务,特别是在系统监控、性能分析以及资源管理等领域。本文将详细讲解如何使用Java来获取CPU、内存、硬盘等系统信息,以及如何读取IP地址和网络接口信息。我们将重点介绍`...
### Java 获取系统信息(CPU,内存,硬盘,进程等)的相关方法 在现代软件开发过程中,经常需要获取运行环境的一些基本信息,例如CPU使用率、内存使用情况、硬盘占用空间以及进程状态等。这些信息对于系统监控、...
java 1. 使用wmic相关命令获取windows硬件相关信息。 2. 使用shell相关的dmidecode/fdisk/ifconfig命令获取Linux硬件和系统相关信息
在Java编程语言中,获取本地系统信息是一项常用的任务...通过学习和理解这个源码工程,开发者可以掌握Java获取系统信息的基本方法,进一步可以应用于性能监控、故障排查、日志记录等场景,提升软件的稳定性和可维护性。
在Java编程语言中,获取操作系统的信息对于环境配置、程序...开发人员可以根据需要选择合适的系统属性来获取所需的操作系统信息和其他关键数据。此外,理解这些属性的具体含义也有助于更高效地利用Java语言的各种特性。
如果需要获取更详细的系统信息,如CPU使用率、系统负载等,可以使用`java.lang.management.ManagementFactory`创建的`OperatingSystemMXBean`实例。例如: ```java OperatingSystemMXBean osBean = ...
前段时间摸索在Java中怎么获取系统信息包括cpu、内存、硬盘信息等,刚开始使用Java自带的包进行获取,但这样获取的内存信息不够准确并且容易出现找不到相应包等错误,所以后面使用sigar插件进行获取。下面列举出...