昨天碰到一个问题,用java根据进程号获得该进程的CPU占用率。

在网上找了很多例子,都是用一个sigar.jar包去做的,下载下来以后,根据示例代码,发现获得的进程CPU占用率都是0.0,不知何故。

在网上找了很多例子,也没几个人说到重点。有人说用Thread.sleep(SLEEP_TIME); 但他的代码没给清楚,而且自己也无法解释原因(当然最后是用sleep解决的)。

我也试了很多次,而且发现一个很奇怪的现象,对同一个进程,调用多次sigar.getProcCpu(pid).getPercent();,返回的结果第一次是0.0,第二次或以后的N次都是一个非常小的数(大约是10的负几百次方),大惑不解。

之前一度以为是权限的问题,系统不让调用类似信息。

后来无奈之下,在网上找了两篇C语言调WindowsAPI去获得某进程的CPU占用率的方法。发现这个方法中要调用两次同样的函数。虽然看不懂代码,但知道大致的原理。在那个函数中有个静态变量,第一次调用的时候会记下当前的时刻,下次调用的时候又会记下本次调用当前的时刻,并与上次调用的时刻相减。严格地说并不能叫时刻,这个函数应该是会开启两个计数器,一个用于记录CPU流逝的时间,另一个用于记录指定进程的流逝时间。比方说CPU一共经历了100个滴答,但这个进程却只经历了10个滴答,那它的CPU占用率就是10%。

想用java调用C生产的可执行文件(还没有到用JNI调用C函数的层次,只是通过Runtime调用本地可执行文件),但发现在有的电脑上行得通,有的电脑上会有权限问题。

今天又问了一个学长之前用java没成功是否也是权限问题(其实这会儿我已经得到足够多的提示了,只是自己还没动脑筋仔细想,本来自己应该能琢磨出来的),学长立马给我指出,让我调用sigar提供的方法,调用两次,中间间隔一定时间,试试。

果然成功了。

后来一细想,其实java用的也是C的那个原理。怎么自己没想出来呢?

至此,这个问题搞定。

另:解决问题的中途学到的知识:

1、如何在java项目中配置相对路径的JAR包:将JAR包拷到项目目录下,在项目的Build Path / Configure Build Path / Libraries 中点击右边最上面的Add JARs,然后在项目目录下找到对应jar包即可。

2、在Win32 Console Application中如何不显示控制台: 在代码的第一行加入如下一行代码:

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")

即可。

仍存在的问题:

1、对某一个文件,用"wr" 方式打开,写完之后,用rewind()或fseek()试图将文件的位置指针跳至文件头,从头开始读,失败。最终用freopen()解决。不知rewind()和fseek()为何不可。

java获得某进程CPU占用率相关推荐

  1. 获取进程CPU占用率

    获取进程CPU占用率 // 时间转换 static __int64 file_time_2_utc(const FILETIME* ftime) {LARGE_INTEGER li;li.LowPar ...

  2. hint ksql oracle_性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增

    你的位置: 问答吧 -> Oracle -> 问题详情 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增 每天都会报以下信息(alert.log): CJ ...

  3. kernel_task 进程 CPU 占用率高导致 mac 卡顿问题

    kernel_task 进程 CPU 占用率高导致 mac 卡顿问题 问题 这个问题已经遇到多次了,在 mac 使用中会突然变得非常卡顿,查看活动监视器发现 kernel_task 进程 cpu 占用 ...

  4. windows服务器system进程cpu占用率高解决方案(ntoskrnl.exe)

    之前给客户服务器部署过服务器监控程序,今天收到邮件告警提醒CPU过高,进入监控发现System进程突然升高,这个是系统进程,只查看进程cpu占用率没用,需要去查看System进程里的线程,具体是由那个 ...

  5. 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程

    1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top ...

  6. linux c 获取进程 cpu占用率 内存占用情况

    实例如下: #include <stdio.h> #include <unistd.h> #include <sys/time.h> #include <st ...

  7. 关于android 进程CPU占用率高的原因分析

    *记录开发中的问题,方便以后自已回忆,2017-07-17 记录 在开发一个语音的线程中,发现有如下事情,系统越来越慢,也越来越卡,打到 adb shell 输 入 top 查看系统资源,发现 CPU ...

  8. Win10Tiworker.exe进程CPU占用率过高的解决办

    在某些情况下,TiWorker.exe会导致CPU高达100%,而用户感觉最明显的就是风扇不停的转动且电脑也会有些卡顿,这时极有可能是系统在安装一些系统模块,如Windows Update正在自动下载 ...

  9. cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法

    问题描写叙述: 这段时间机器总是出现一个奇怪的问题:cidaemon.exe进程占用CUP率98%以上,大大影响了电脑的正常使用.资源管理器中出现多个cidaemon.exe进程,强制结束占用cpu率 ...

最新文章

  1. knn 进行手写数字识别
  2. 对java面试文章的技术漫谈的C#技术理解
  3. 查找域名、由名字查找某个熟知的端口、由名字查找协议
  4. 智能自动PPR更改事件策略
  5. List和Set中忽略的方法addAll(Collection c)和retainAll(Collection c)
  6. t-sql的执行顺序
  7. 水凝胶 静电纺丝_【再生医学前沿】Nature子刊:静电纺丝玩出新花样!静电射流偏转的超快3D打印亚微米结构...
  8. QTTabBar功能是灰色,无法启用的解决办法
  9. Spotfire 对 列 数据进行自定义排序
  10. 【图文】Allegro测量工具同时显mil和mm
  11. Python 3个小练习
  12. win8 计算机组策略,win8打开组策略提示“无法找到组策略”的原因及解决措施
  13. 150. 逆波兰表达式求值(中等 栈 数组)
  14. python广告点击率预测_推荐系统中的点击率预估 – Advertising Recommendation
  15. Android音频子系统(十五)------Audio调试经验
  16. 文本修饰标签(text-decoration)
  17. 为什么要配置环境变量以及配置环境变量的步骤
  18. rrpp协议如何修改_【网安学术】基于NQA策略的RRPP优化机制
  19. JavaWeb_Servlet_Request_Response
  20. 数字影像系统 接收服务器,RIS/PACS数字医疗影像信息系统的关键技术

热门文章

  1. PAT - L2-011. 玩转二叉树(分冶)
  2. KubeSphere排错实战(三)
  3. 【VM】虚拟机+操作系统安装
  4. 使用OpenCV进行图像修复、Navier-Stokes、INPAINT_TELEA,专栏:各种openCV实践的案例
  5. PL2303输出的是TTL电平,为什么所有资料都说这个芯片是USB转RS232的??
  6. el-tree实现仅限叶子节点显示勾选框,并且只能单选
  7. Scratch(二十九):虚拟现实交互
  8. CSS水平、垂直布局、盒子
  9. 第03课:生活中的状态模式——人与水的三态
  10. Suricata+ELK集群监控办公网流量