Java 网口获取数据速度_java获取JVM的CPU占用率、内存占用率、线程数及服务器的网口吞吐率、磁盘读写速率...

本文介绍了一种使用Java获取JVM的CPU占用率、内存占用率、线程数以及服务器网口吞吐率的方法。作者分享了在Windows和Linux环境下实现这些功能的代码,包括如何获取JVM的PID,以及监控网络和CPU利用率的逻辑。代码中涉及了操作系统特定的命令和API调用,并提供了在Tomcat中的应用实例。
摘要由CSDN通过智能技术生成

怎么说呢,本人菜鸟一枚,费了几天时间,终于做了一个用java获取JVM的CPU占用率、内存占用率、线程数及服务器的网口吞吐率、磁盘读写速率的实现。

其中windows环境下获取jvm 的cpu占用率这里是参考网上别人的东西(在此感谢提供参考的网友),其他的都是基于自己的想法做出来的。该工具类亲测

在win7 64位系统和CentOS6系统没有问题,其他的暂时没有测过,欢迎高手指教,勿喷勿喷,感谢手下留情~

运行环境:jdk 1.8 + tomcat 7 + Spring 4.3

tomcat 容器启动及进入init()进行JVM PID的获取及执行任务

可能会碰到的问题:无法引入com.sun.management.OperatingSystemMXBean

解决方案:Eclipse默认把这些受访问限制的API设成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的

Deprecated and restricted API中的Forbidden references(access rules)

选为Warning就可以编译通过。

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.LineNumberReader;

import java.lang.management.ManagementFactory;

import java.lang.management.RuntimeMXBean;

import java.util.Formatter;

import java.util.StringTokenizer;

import java.util.Timer;

import java.util.TimerTask;

import javax.annotation.PostConstruct;

import javax.annotation.PreDestroy;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.alibaba.fastjson.serializer.SerializerFeature;

import com.nufront.euht.model.SysPerformInfo;

import com.nufront.euht.service.api.sys.SysPerformInfoServiceI;

import com.nufront.euht.util.UuidUtil;

import com.sun.management.OperatingSystemMXBean;

/**

* 网管信息信息信息采集类

*

* @author liming.cen

* @date 2017-4-11

*/

@Service

public class SysInfoAcquirerService {

private static final int CPUTIME = 5000;

/**

* 网管进程信息采集周期(注意:PERIOD_TIME 一定要大于 SLEEP_TIME )

*/

private static final int PERIOD_TIME = 1000 * 60 * 15;

/**

* 此类中Thread.sleep()里的线程睡眠时间

*/

private static final int SLEEP_TIME = 1000 * 60 * 9;

private static final int PERCENT = 100;

private static final int FAULTLENGTH = 10;

private String isWindowsOrLinux = isWindowsOrLinux();

private String pid = "";

private Timer sysInfoGetTimer = new Timer("sysInfoGet");

@Autowired

private SysPerformInfoServiceI sysPerformInfoService;

public Logger log = Logger.getLogger(SysInfoAcquirerService.class);

/**

* 初始化bean的时候就立即获取JVM进程的PID及执行任务

*

* @return

*/

@PostConstruct

public void init() {

if (isWindowsOrLinux.equals("windows")) { // 判断操作系统类型是否为:windows

getJvmPIDOnWindows();

} else {

getJvmPIDOnLinux();

}

sysInfoGetTimer.schedule(new SysInfoAcquirerTimerTask(), 10 * 1000, PERIOD_TIME);

}

/**

* 判断是服务器的系统类型是Windows 还是 Linux

*

* @return

*/

public String isWindowsOrLinux() {

String osName = System.getProperty("os.name");

String sysName = "";

if (osName.toLowerCase().startsWith("windows")) {

sysName = "windows";

} else if (osName.toLowerCase().startsWith("linux")) {

sysName = "linux";

}

return sysName;

}

/**

* 获取JVM 的CPU占用率(%)

*

* @return

*/

public String getCPURate() {

String cpuRate = "";

if (isWindowsOrLinux.equals("windows")) { // 判断操作系统类型是否为:windows

cpuRate = getCPURateForWindows();

} else {

cpuRate = getCPURateForLinux();

}

return cpuRate;

}

/**

* windows环境下获取JVM的PID

*/

public void getJvmPIDOnWindows() {

RuntimeMXBean runtime = ManagementFactory.getRuntimeMXBean();

pid = runtime.getName().split("@")[0];

log.info("PID of JVM:" + pid);

}

/**

* linux环境下获取JVM的PID

*/

public void getJvmPIDOnLinux() {

String command = "pidof java";

BufferedReader in = null;

Process pro = null;

try {

pro = Runtime.getRuntime().exec(new String[] { "sh", "-c", command });

in = new BufferedReader(new InputStreamReader(pro.getInputStream()));

StringTokenizer ts = new StringTokenizer(in.readLine());

pid = ts.nextToken();

log.info("PID of JVM:" + pid);

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 获取JVM的内存占用率(%)

*

* @return

*/

public String getMemoryRate() {

String memRate = "";

if (isWindowsOrLinux.equals("windows")) { // 判断操作系统类型是否为:windows

memRate = getMemoryRateForWindows();// 查询windows系统的cpu占用率

} else {

memRate = getMemoryRateForLinux();// 查询linux系统的cpu占用率

}

return memRate;

}

/**

* 获取JVM 线程数

*

* @return

*/

public int getThreadCount() {

int threadCount = 0;

if (isWindowsOrLinux.equals("windows")) { // 判断操作系统类型是否为:windows

threadCount = getThreadCountForWindows();// 查询windows系统的线程数

} else {

threadCount = getThreadCountForLinux();// 查询linux系统的线程数

}

return threadCount;

}

/**

* 获取磁盘读写速率(MB/s)

*

* @return

*/

// public String getDiskAccess() { // TODO:待完成

// String diskAccess = "";

// if (isWindowsOrLinux.equals("windows")) { // 判断操作系统类型是否为:w

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值