JAVA 得到本进程的CPU占用率

问题描述

JAVA 得到本进程的CPU占用率

各位大神们!现在可以得到CPU总体的占用率,但是我想得到本进程的CPU占用率是多少,怎么实现?

解决方案

如何得到本进程的CPU占用率?
如何得到本进程的CPU占用率?
JAVA进程CPU占用率分析方法

解决方案二:

先说内存占用量:一般说来,你可以使用这两种方式获取内存使用情况
方式一:
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
MemoryUsage memoryUsage = memoryMXBean.getHeapMemoryUsage(); //椎内存使用情况
long totalMemorySize = memoryUsage.getInit(); //初始的总内存
long maxMemorySize = memoryUsage.getMax(); //最大可用内存
long usedMemorySize = memoryUsage.getUsed(); //已使用的内存

方式二:
Runtime rt = Runtime.getRuntime();
long totalMemorySize = rt.totalMemory(); //初始的总内存
long maxMemorySiz = t.maxMemory(); //最大可用内存
long freeMemorySize = rt.freeMemory(); //当前可用内存

需要说明的是,这种方式获取的是整个jvm的内存使用情况,并不是某一个进程的内存使用情况,事实上,在java内部,可以使用Rumtime.getRuntime().exec(${SHELL})来开启一个外部进程(这里${SHELL}代表一个可操作系统的shell命令)。而运行Java程序整个jvm,对于操作系统而言,也仅仅只是一个进程。也就是说,一个jvm就是一个进程,你通过java程序开启的进程都是外部进程,java内部目前还提供了一个destroy方法来销毁该进程,对于该进程的其它信息,都无法直接获取,这些信息的获取,显然需要本地化(Local)的实现。既然标准jdk库没有,就不可能再通过平台无关的代码来实现了。典型的做法就是使用前面第一种情况的方式,再启一个进程,执行shell命令来获取。

不过对于cpu使用时间,采用标准java代码倒是可以拿到。由于java的语法很啰嗦,举一个较完全的例子需要太多的代码,我这里就只写最关键的代码:
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
① long currentCpuTime = threadMXBean.getCurrentThreadCpuTime(); //当前线程的cpu使用时间
long someThreadId = 709817L; //假定有某个线程的ID是709817
② long someThreadCpuTime = threadMXBean.getThreadCpuTime(someThreadId); //获取ID为someThreadId即709817的线程的cpu时间

基于上面的核心api,你可以把由java启动的外部进程放到一个单独的线程中执行,再用代码②的方式来获取该进程的cpu使用时间,也可以将外部进程放入到当前线程中执行,用① 的方式来获得进程的cpu使用时间。

时间: 2024-09-25 07:19:06

JAVA 得到本进程的CPU占用率的相关文章

SYSTEM进程的CPU占用率高怎么办

用户有时可能会遇到SYSTEM 进程的CPU 长时间接近100%的情况. 要分析这个植障问题, 传统的方法是要在性能监视器里添加SYSTEM 的所有线程的CPU计数器,然后找出占用cpu最高的线程,再用Process Viewer 和Pstat 工具分析该线程的内存地址,以便找出最可疑的问题模块.这个方法非常复杂,不太适合普通用户. 借助Process Explorer ,就可以很方便地解决一些和驱动程序有关的SYSTEM 进程问题.例如当在Wndows7 系统中插入USB闪存,并启用ReadB

Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件                                           procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps 命令 top命令 单核情况下Cpu使用率的计算 基本思想 总的Cpu使用率计算 计算方法 某一进程Cpu使用率的计算 计算方法   实验数据 某一线程Cpu使用率的计算 计算方法   实验数据 多核情况下cpu使用率

Linux下如何查看高CPU占用率线程

在 Linux 下 top 工具可以显示 cpu 的平均利用率(user,nice,system,idle,iowait,irq,softirq,etc.) ,可以显示每个 cpu 的利用率.但是无法显示每个线程的 cpu 利用率情况,这时就可能出现这种情况,总的 cpu 利用率中 user 或 system 很高,但是用进程的 cpu 占用率进行排序时,没有进程的 user 或 system 与之对应. 可以用下面的命令将 cpu 占用率高的线程找出来: $ ps H -eo user,pid

在Linux系统中限制CPU占用率的教程

  Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的正常运转. 同时,内核也很公正:它将资源公平地分配给各个进程. 但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度. 如果想让一个CPU密集型的进程运行在较低优先级,那么你就得事先配置好调度器. 下面介绍3种控制

教你在OS X系统Dock上显示CPU占用率

  有时候想知道自己的 Mac 的 CPU 占用率,那么要如何操作才能在桌面随时显示 CPU 的占用情况呢,今天的 Mac 基础教程会告诉大家. 打开 Mac 的系统自带软件 "活动监视器"(找不到的点击屏幕右上角放大镜按钮搜索),把它最小化到 Dock 上,右击 Dock 图标,选择 "显示 CPU 使用率".这样就能随时看到苹果电脑 CPU 情况了,而且是分核心显示的. 当然你也可以让活动监视器的 Dock 图标显示内存.硬盘.网卡等硬件的工况,不过大多数人在意

Mac基础教程之:在Dock上显示CPU占用率

  有时候想知道自己的 Mac 的 CPU 占用率,那么要如何操作才能在桌面随时显示 CPU 的占用情况呢,今天的 Mac 基础教程会告诉大家,资深用户可略过. 打开 Mac 的系统自带软件 "活动监视器"(找不到的点击屏幕右上角放大镜按钮搜索),把它最小化到 Dock 上,右击 Dock 图标,选择 "显示 CPU 使用率".这样就能随时看到苹果电脑 CPU 情况了,而且是分核心显示的. 当然你也可以让活动监视器的 Dock 图标显示内存.硬盘.网卡等硬件的工况,

使用 nice、cpulimit 和 cgroups 限制 cpu 占用率

使用 nice.cpulimit 和 cgroups 限制 cpu 占用率 Linux内核是一名了不起的马戏表演者,它在进程和系统资源间小心地玩着杂耍,并保持系统的正常运转. 同时,内核也很公正:它将资源公平地分配给各个进程. 但是,如果你需要给一个重要进程提高优先级时,该怎么做呢? 或者是,如何降低一个进程的优先级? 又或者,如何限制一组进程所使用的资源呢? 答案是需要由用户来为内核指定进程的优先级 大部分进程启动时的优先级是相同的,因此Linux内核会公平地进行调度. 如果想让一个CPU密集

用Jstack跟踪Cpu占用率的Java线程(转)

以下方法在centOS下执行通过:1.先定位占用cpu高的进程 top 2.使用以下命令 ps p 14766 -L -o pcpu,pid,tid,time,tname,stat,psr | sort -n -k1 -r 其中14766是刚才1中cpu占用率高的进程pid 3.2.4 32525 32537 01:58:41 ?        Sl     6 0.8 32525  1771 00:43:12 ?        Sl     0 0.8 32525  1769 00:39:46

was6.0.17+spring+hibernate+myfaces下CPU占用率异常上升

问题描述 概况:一个300在线用户的系统web服务器(8CPU+8G)windows2003adv+jdk1.4.2+was6.0.17+ihs数据库(8CPU+8G)AIX5.3+oracle10gspring2.0+hibernate3.2+myfaces1.13系统已运行了2年:数据库外键连接较多,查询相对较慢,如查询某些报表会耗费最长45秒(但并发数不超过5)was同时部署2个类似应用(如给两个地区的用户使用),这2个应用通过hibernate默认连接池同时连接上述oracle服务器系统