java获得某进程CPU占用率
昨天碰到一个问题,用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占用率相关推荐
- 获取进程CPU占用率
获取进程CPU占用率 // 时间转换 static __int64 file_time_2_utc(const FILETIME* ftime) {LARGE_INTEGER li;li.LowPar ...
- hint ksql oracle_性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增
你的位置: 问答吧 -> Oracle -> 问题详情 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增 每天都会报以下信息(alert.log): CJ ...
- kernel_task 进程 CPU 占用率高导致 mac 卡顿问题
kernel_task 进程 CPU 占用率高导致 mac 卡顿问题 问题 这个问题已经遇到多次了,在 mac 使用中会突然变得非常卡顿,查看活动监视器发现 kernel_task 进程 cpu 占用 ...
- windows服务器system进程cpu占用率高解决方案(ntoskrnl.exe)
之前给客户服务器部署过服务器监控程序,今天收到邮件告警提醒CPU过高,进入监控发现System进程突然升高,这个是系统进程,只查看进程cpu占用率没用,需要去查看System进程里的线程,具体是由那个 ...
- 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
1.故障现象 客服同事反馈平台系统运行缓慢,网页卡顿严重,多次重启系统后问题依然存在,使用top命令查看服务器情况,发现CPU占用率过高. 2.CPU占用过高问题定位 2.1.定位问题进程 使用top ...
- linux c 获取进程 cpu占用率 内存占用情况
实例如下: #include <stdio.h> #include <unistd.h> #include <sys/time.h> #include <st ...
- 关于android 进程CPU占用率高的原因分析
*记录开发中的问题,方便以后自已回忆,2017-07-17 记录 在开发一个语音的线程中,发现有如下事情,系统越来越慢,也越来越卡,打到 adb shell 输 入 top 查看系统资源,发现 CPU ...
- Win10Tiworker.exe进程CPU占用率过高的解决办
在某些情况下,TiWorker.exe会导致CPU高达100%,而用户感觉最明显的就是风扇不停的转动且电脑也会有些卡顿,这时极有可能是系统在安装一些系统模块,如Windows Update正在自动下载 ...
- cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法
问题描写叙述: 这段时间机器总是出现一个奇怪的问题:cidaemon.exe进程占用CUP率98%以上,大大影响了电脑的正常使用.资源管理器中出现多个cidaemon.exe进程,强制结束占用cpu率 ...
最新文章
- knn 进行手写数字识别
- 对java面试文章的技术漫谈的C#技术理解
- 查找域名、由名字查找某个熟知的端口、由名字查找协议
- 智能自动PPR更改事件策略
- List和Set中忽略的方法addAll(Collection c)和retainAll(Collection c)
- t-sql的执行顺序
- 水凝胶 静电纺丝_【再生医学前沿】Nature子刊:静电纺丝玩出新花样!静电射流偏转的超快3D打印亚微米结构...
- QTTabBar功能是灰色,无法启用的解决办法
- Spotfire 对 列 数据进行自定义排序
- 【图文】Allegro测量工具同时显mil和mm
- Python 3个小练习
- win8 计算机组策略,win8打开组策略提示“无法找到组策略”的原因及解决措施
- 150. 逆波兰表达式求值(中等 栈 数组)
- python广告点击率预测_推荐系统中的点击率预估 – Advertising Recommendation
- Android音频子系统(十五)------Audio调试经验
- 文本修饰标签(text-decoration)
- 为什么要配置环境变量以及配置环境变量的步骤
- rrpp协议如何修改_【网安学术】基于NQA策略的RRPP优化机制
- JavaWeb_Servlet_Request_Response
- 数字影像系统 接收服务器,RIS/PACS数字医疗影像信息系统的关键技术
热门文章
- PAT - L2-011. 玩转二叉树(分冶)
- KubeSphere排错实战(三)
- 【VM】虚拟机+操作系统安装
- 使用OpenCV进行图像修复、Navier-Stokes、INPAINT_TELEA,专栏:各种openCV实践的案例
- PL2303输出的是TTL电平,为什么所有资料都说这个芯片是USB转RS232的??
- el-tree实现仅限叶子节点显示勾选框,并且只能单选
- Scratch(二十九):虚拟现实交互
- CSS水平、垂直布局、盒子
- 第03课:生活中的状态模式——人与水的三态
- Suricata+ELK集群监控办公网流量