Code sample:
maven package
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetyun.mml</groupId> <artifactId>my-mml</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>my-mml</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <build> <defaultGoal>compile</defaultGoal> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> <repositories><!-- repositories--> <repository> <id>maven-ali</id> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> <updatePolicy>always</updatePolicy> <checksumPolicy>fail</checksumPolicy> </snapshots> </repository> </repositories> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.danielflower.apprunner</groupId> <artifactId>javasysmon</artifactId> <version>0.3.5.0</version> </dependency> </dependencies> </project>
package com.zetyun.mml.base; import com.jezhumble.javasysmon.CpuTimes; import com.jezhumble.javasysmon.JavaSysMon; import com.jezhumble.javasysmon.ProcessInfo; public class JavaSysmonUtils { public static void main(String[] args) { String pid; String period; JavaSysMon monitor = new JavaSysMon(); if (args.length != 2) { pid = String.valueOf(monitor.currentPid()); period = "5000"; } else { pid = args[0]; period = args[1]; } while (true) { String processUsage = String.format("%.2f", getProcessUsage(monitor, pid, period) * 100); System.out.println(processUsage); System.out.println("------------------------------------"); } // getProcssCpuUage(); } private static float getProcessUsage(JavaSysMon monitor, String pid, String period) { long cpuTotalTimeBegin = getCpuTotalTime(monitor); long processTotalTimeBegin = getProcessTotalTimeByPid(monitor, Integer.parseInt(pid)); try { Thread.sleep(Long.parseLong(period)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace (); } long cpuTotalTimeEnd = getCpuTotalTime(monitor); long processTotalTimeEnd = getProcessTotalTimeByPid(monitor, Integer.parseInt(pid)); float processUsage = (float) (processTotalTimeEnd - processTotalTimeBegin) / (float) (cpuTotalTimeEnd - cpuTotalTimeBegin); return processUsage; } private static long getCpuTotalTime(JavaSysMon monitor) { return monitor.cpuTimes (). getTotalMillis (); } private static long getProcessTotalTimeByPid(JavaSysMon monitor, int pid) { ProcessInfo processInfo = findProcessByPid(monitor, pid); if (processInfo == null) { return 0; } return processInfo.getSystemMillis() + processInfo.getUserMillis(); } public static ProcessInfo findProcessByPid(JavaSysMon monitor, int pid) { ProcessInfo[] processInfos = monitor.processTable(); for (ProcessInfo processInfo : processInfos) { if (pid == processInfo.getPid()) { return processInfo; } } return null; } public static void getCpuUsge() { JavaSysMon monitor = new JavaSysMon(); while (true) { CpuTimes cpuTimes = monitor.cpuTimes(); System.out.println("\n--------------------"); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace (); } CpuTimes cpuTimes2 = monitor.cpuTimes(); String cpuUsage = String.format("%.5f", cpuTimes2.getCpuUsage(cpuTimes)); System.out.println("cpuUsage :" + cpuUsage); } } }