最近做一个Java性能统计的问题,需要统计当前进程占用CPU的情况,最开始使用Java MxBean来获取
OperatingSystemMXBean osMxBean = ManagementFactory.getOperatingSystemMXBean();
double cpu = osMxBean.getSystemLoadAverage();
但是这个方法得到的操作系统统计的整个系统负载,不能较好的反应本进程的CPU占用情况,然后就是用一个新的方法,通过统计线程CPU占用时间来做统计,具体代码如下:

  1. package com.service.article;

  2. import java.lang.management.ManagementFactory;

  3. import java.lang.management.OperatingSystemMXBean;

  4. import java.lang.management.ThreadMXBean;

  5. public class CPUMonitorCalc {

  6. private static CPUMonitorCalc instance = new CPUMonitorCalc();

  7. private OperatingSystemMXBean osMxBean;

  8. private ThreadMXBean threadBean;

  9. private long preTime = System.nanoTime();

  10. private long preUsedTime = 0;

  11. private CPUMonitorCalc() {

  12. osMxBean = ManagementFactory.getOperatingSystemMXBean();

  13. threadBean = ManagementFactory.getThreadMXBean();

  14. }

  15. public static CPUMonitorCalc getInstance() {

  16. return instance;

  17. }

  18. public double getProcessCpu() {

  19. long totalTime = 0;

  20. for (long id : threadBean.getAllThreadIds()) {

  21. totalTime += threadBean.getThreadCpuTime(id);

  22. }

  23. long curtime = System.nanoTime();

  24. long usedTime = totalTime - preUsedTime;

  25. long totalPassedTime = curtime - preTime;

  26. preTime = curtime;

  27. preUsedTime = totalTime;

  28. return (((double) usedTime) / totalPassedTime / osMxBean.getAvailableProcessors()) * 100;

  29. }

  30. }

测试方法:

  1. package com.service.article;

  2. public class ArticleApplication {

  3. public static void main(String[] args) throws Exception {

  4. for (int i = 0; i < 2; i++) {

  5. new Thread(() -> {

  6. while (true) {

  7. long bac = 1000000;

  8. bac = bac >> 1;

  9. }

  10. }).start();;

  11. }

  12. while (true) {

  13. Thread.sleep(5000);

  14. System.out.println(CPUMonitorCalc.getInstance().getProcessCpu());

  15. }

  16. }

  17. }

测试结果跟操作系统统计出来的结果几乎一样

统计操作系统的整个系统负载占用CPU的情况相关推荐

  1. linux下查看java 占用cpu使用情况

    使用top命令,查看cpu占用过高的java PID (如PID=9876) 使用ps aux|grep PID   (ps aux|grep 9876)查看是那个java程序占用cpu . ps - ...

  2. JVM占用CPU过高或者线程卡死定位

    新项目上线初期经常会遇到CPU过高或者线程卡死问题,这虽然是两类性能瓶颈问题,但是定位方法一致,项目中也遇到过几次,分享下定位经验 1.登录项目所在服务器,直接执行top命令,可以看到cpu使用情况, ...

  3. 利用shell脚本来监控linux系统的负载与CPU占用情况

    这几天在学习研究shell脚本,写的一些系统负载与CPU监控脚本程序.在没有nagios监控软件的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统负载与CPU占用的使用情况. 一.安 ...

  4. 衡量cpu使用情况 - 占用率和负载

    说明 在对程序进行性能优化过程中,我体会到:正确的衡量cpu的使用情况(各种指标),是进行代码优化的前提条件:CPU是计算机的大脑,所有代码都是由CPU运行,不管是任何因素导致的性能问题,即使是资源不 ...

  5. ubuntu查看内存占用和查看cpu使用情况的简单方法(ubuntu内存管理)

    单独查看内存使用情况的命令:free -m 查看内存及cpu使用情况的命令:top 也可以安装htop工具,这样更直观, 安装命令如下:sudo apt-get install htop 安装完后,直 ...

  6. linux查看CPU利用率与负载,Linux CPU负载利用率统计

    通常,有如下方式可以得到 cpu 利用率情况: top 命令 e.g. top -m 20 -d 1 -t User 0%, System 6%, IOW 0%, IRQ 0% User 1 + Ni ...

  7. SQLSERVER排查CPU占用高的情况

    今天中午,有朋友叫我帮他看一下数据库,操作系统是Windows2008R2 ,数据库是SQL2008R2 64位 64G内存,16核CPU 硬件配置还是比较高的,他说服务器运行的是金蝶K3软件,数据库 ...

  8. python统计行号_如何使用Python脚本分析CPU使用情况的?

    用以分析Python中CPU使用情况.CPU分析是通过分析CPU执行代码的方式来测量代码的性能,以此找到代码中的不妥之处,然后处理它们. 接下来我们将看看如何跟踪Python脚本使用时CPU使用情况, ...

  9. shell脚本监控系统负载、CPU和内存使用情况

    #一.编写系统负载监控的脚本文件 #!/bin/bash ####################################################################### ...

最新文章

  1. 网吧无盘服务器从30台----115台的经验(二)
  2. jsTree设置默认节点全部展开的方法
  3. 如何用excel筛选相似内容_Excel筛选你用好了么?别再下拉点点点了
  4. html中评论存储方法,html5基于数据存储的评论留言板demo
  5. 难道我的事,又要落空么。。。
  6. Effective C++学习第八天
  7. 自动化要不要学python-老男孩linux自动化运维|做人工智能为什么要学Python呢?
  8. MongoDB Shell操作
  9. 理一理字节对齐的那些事
  10. BUG类算法研究分析
  11. MySQL 之 Metadata Locking 研究
  12. 微信小程序-实现保存图片功能的3种方式
  13. 【pytest官方文档】解读-fixtures函数和测试函数的参数化
  14. [翻译]Exploiting CVE-2015-0057 ——Part 1
  15. CSV保存身份证后再打开后4位0000的解决办法
  16. 集火全屋智能“后装市场”,真正玩得转的没几个
  17. 牛客网数字化招聘解决方案,支持10万人同时在线笔试
  18. winhex快捷键使用
  19. [培训-无线通信基础-10]:正交频分复用(OFDM、符号间多径干扰)
  20. 已安装内存:16.0GB(3.93GB可用):拆开机箱拔掉内存条重新安装试试。

热门文章

  1. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——1.5 安装SMO
  2. MariaDB Spider:实现MySQL横纵向扩展的小能手
  3. LVM和raid结合使用
  4. 贝塞尔曲线开发的艺术
  5. C# 6.0的字典(Dictionary)的语法
  6. 我的Java开发学习之旅------Java经典排序算法之二分插入排序
  7. WCF 第六章 序列化和编码之DataContractJsonSerializer
  8. 高手快帮忙,关于replace和正者表达式的问题
  9. 如何在SharePoint Server中整合其他应用系统?
  10. 10月25日lol服务器维护,《LOL》lol10月25日停机维护到什么时候 10.25维护结束时间...