java怎样获取CPU占用率和硬盘占用率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎样获取CPU占用率和硬盘占用率相关的知识,希望对你有一定的参考价值。
通过jmx可以监控vm内存使用,系统内存使用等,以下是网上某博客代码,特点是通过window和linux命令获得CPU使用率。
利用java程序实现获取计算机cpu利用率和内存使用信息。
package com.amgkaka.performance;/** *//**
* 监视信息的JavaBean类.
* @author amg
* @version 1.0
* Creation date: 2008-4-25 - 上午10:37:00
*/
public class MonitorInfoBean
/** *//** 可使用内存. */
private long totalMemory;
/** *//** 剩余内存. */
private long freeMemory;
/** *//** 最大可使用内存. */
private long maxMemory;
/** *//** 操作系统. */
private String osName;
/** *//** 总的物理内存. */
private long totalMemorySize;
/** *//** 剩余的物理内存. */
private long freePhysicalMemorySize;
/** *//** 已使用的物理内存. */
private long usedMemory;
/** *//** 线程总数. */
private int totalThread;
/** *//** cpu使用率. */
private double cpuRatio;
public long getFreeMemory()
return freeMemory;
public void setFreeMemory(long freeMemory)
this.freeMemory = freeMemory;
public long getFreePhysicalMemorySize()
return freePhysicalMemorySize;
public void setFreePhysicalMemorySize(long freePhysicalMemorySize)
this.freePhysicalMemorySize = freePhysicalMemorySize;
public long getMaxMemory()
return maxMemory;
public void setMaxMemory(long maxMemory)
this.maxMemory = maxMemory;
public String getOsName()
return osName;
public void setOsName(String osName)
this.osName = osName;
public long getTotalMemory()
return totalMemory;
public void setTotalMemory(long totalMemory)
this.totalMemory = totalMemory;
public long getTotalMemorySize()
return totalMemorySize;
public void setTotalMemorySize(long totalMemorySize)
this.totalMemorySize = totalMemorySize;
public int getTotalThread()
return totalThread;
public void setTotalThread(int totalThread)
this.totalThread = totalThread;
public long getUsedMemory()
return usedMemory;
public void setUsedMemory(long usedMemory)
this.usedMemory = usedMemory;
public double getCpuRatio()
return cpuRatio;
public void setCpuRatio(double cpuRatio)
this.cpuRatio = cpuRatio;
参考技术A /** *//**
* 获得CPU使用率.
* @return 返回cpu使用率
*/
private double getCpuRatioForWindows()
try
String procCmd = System.getenv("windir")
+ "\\system32\\wbem\\wmic.exe process get Caption,CommandLine,"
+ "KernelModeTime,ReadOperationCount,ThreadCount,UserModeTime,WriteOperationCount";
// 取进程信息
long[] c0 = readCpu(Runtime.getRuntime().exec(procCmd));
Thread.sleep(CPUTIME);
long[] c1 = readCpu(Runtime.getRuntime().exec(procCmd));
if (c0 != null && c1 != null)
long idletime = c1[0] - c0[0];
long busytime = c1[1] - c0[1];
return Double.valueOf(
PERCENT * (busytime) / (busytime + idletime))
.doubleValue();
else
return 0.0;
catch (Exception ex)
ex.printStackTrace();
return 0.0;
怎样解决软件启动CPU占用率瞬间变高,导致软件启动变慢的问题;C++ Builder(BCB) 开发的大概有30个FORM
C++ Builder(BCB) 开发的软件大概有30个FORM,没有动态链接(DLL),没有线程.跑起来后一切正常.就是启动慢要8s......
求解决方法...
有用的回答可以再加一百分
我现在将一半的FORM进行动态创建了,可速度只是比以前快了1秒,看来动态也起不了什么作用了,求解决法子.........
1、防杀毒软件造成故障
由于新版的KV、金山、瑞星都加入了对网页、插件、邮件的随机监控,无疑增大了系统负担。处理方式:基本上没有合理的处理方式,尽量使用最少的监控服务吧,者,升级你的硬件配备。
2、驱动没有经过认证,造成CPU资源占用100%
大量的测试版的驱动在网上泛滥,造成了难以发现的故障原因。 处理方式:尤其是显卡驱动特别要注意,建议使用微软认证的或由官方发布的驱动,并且严格核对型号、版本。
3、病毒、木马造成
大量的蠕虫病毒在系统内部迅速复制,造成CPU占用资源率据高不下。解决办法:用可靠的杀毒软件彻底清理系统内存和本地硬盘,并且打开系统设置软件,察看有无异常启动的程序。经常性更新升级杀毒软件和防火墙,加强防毒意识,掌握正确的防杀毒知识。
4、控制面板—管理工具—服务—RISING REALTIME MONITOR SERVICE点鼠标右键,改为手动。
5、开始->;运行->;msconfig->;启动,关闭不必要的启动项,重启。
6、查看“svchost”进程。
svchost.exe是Windows XP系统的一个核心进程。svchost.exe不单单只出现在Windows XP中,在使用NT内核的Windows系统中都会有svchost.exe的存在。一般在Windows 2000中svchost.exe进程的数目为2个,而在Windows XP中svchost.exe进程的数目就上升到了4个及4个以上。
7、查看网络连接。主要是网卡。
8、查看网络连接
当安装了Windows XP的计算机做服务器的时候,收到端口 445 上的连接请求时,它将分配内存和少量地调配 CPU资源来为这些连接提供服务。当负荷过重的时候,CPU占用率可能过高,这是因为在工作项的数目和响应能力之间存在固有的权衡关系。你要确定合适的 MaxWorkItems 设置以提高系统响应能力。如果设置的值不正确,服务器的响应能力可能会受到影响,或者某个用户独占太多系统资源。
要解决此问题,我们可以通过修改注册表来解决:在注册表编辑器中依次展开[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserver ]分支,在右侧窗口中新建一个名为“maxworkitems”的DWORD值。然后双击该值,在打开的窗口中键入下列数值并保存退出:
9、看看是不是Windows XP使用鼠标右键引起CPU占用100%
在资源管理器里面,当你右键点击一个目录或一个文件,你将有可能出现下面所列问题:
任何文件的拷贝操作在那个时间将有可能停止相应
网络连接速度将显著性的降低
所有的流输入/输出操作例如使用Windows Media Player听音乐将有可能是音乐失真成因:
当你在资源管理器里面右键点击一个文件或目录的时候,当快捷菜单显示的时候,CPU占用率将增加到100%,当你关闭快捷菜单的时候才返回正常水平。
解决方法:
文字较多,请看链接http://help.360.cn/index.php?c=help&a=topic&bid=5030806&tid=19726210
参考资料:http://help.360.cn/index.php?c=help&a=topic&bid=5030806&tid=19726210
参考技术A 呵呵,这个问题很容易解决,你把除了mainForm以外的所有的Form都设置成动态生成就不会那么占用内存了!追问内存倒不高,就是CPU瞬间变高
追答你的Form是不是都是静态生成的?
追问没有一个是动态的,悲剧啊!
追答呵呵,那真是很悲剧!
最好做到动态生成、关闭后动态删除!这样程序的运行就不会占用那么多的电脑资源!
这些 磁盘的操作可以尽量放到后台线程里面慢慢加载,先显示界面,不要block住主线程 参考技术C 启动慢可以减少启动时同步加载的资源,如果必须加载就采用类似PhotoShop那样的启动画面,来减少由于启动时间过长造成的用户体验差的情况
至于CPU占用瞬间变高?会有多高?在什么样CPU的机器上进行的测试?一般来说多核CPU如果单线程启动的程序都不会占用很多的吧追问
工作电脑 E2200 2.2GHz ---->启动8-9秒 占用率40-47%
I3 CPU 启动5-6秒 占用30%左右
说实话这个数据不是很高,除非文档中有特殊要求
因为启动时间有这么长,说明启动时加载的内容较多,可以从构造函数OnLoad时减少部分,或者推迟到OnShow之后进行,不过这个时候加载会让界面卡上一段时间
如果都是必须的话,就是建议用启动画面的方法,这样的用户体验较好,类似office那种
另外,能把一些启动的执行流,或者代码说出来嘛,至少对你的程序启动有个认识
你的意思是因为一次启动的FORM太多了才导致cpu过高? 我不知道是不是所有的FORM都跟随软件的启动一起动起来了/
追答从经验上说当然很有可能,当然也可能是连接数据库时产生的。一般开发过几个窗口程序之后,就不会采用这样的设计了。
以上是关于java怎样获取CPU占用率和硬盘占用率的主要内容,如果未能解决你的问题,请参考以下文章