Java implements calculation process cpu usage

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);

		}

	}

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325578913&siteId=291194637