如何使用 java 程序获取 PID 的内存、CPU 使用率?

Posted

技术标签:

【中文标题】如何使用 java 程序获取 PID 的内存、CPU 使用率?【英文标题】:How to get PID's Memory, CPU usage using java program? 【发布时间】:2011-06-23 04:52:32 【问题描述】:

我正在尝试通过 Java 程序获取 PID 的内存和 CPU 使用率。

我可以通过以下代码获取当前程序的PID:

private static int getProcessId()


String name = ManagementFactory.getRuntimeMXBean().getName();

StringBuffer pid = new StringBuffer();
    for (int i = 0, l = name.length(); i < l; i++) 
    if (Character.isDigit(name.charAt(i))) 
        pid.append(name.charAt(i));
     else if (pid.length() > 0) 
        break;
    
    
    try 
    return Integer.parseInt(pid.toString());
     catch (NumberFormatException e) 
    return 0;
    


通过使用 PID,我想计算内存和 CPU 使用率。有什么方法可以得到这些东西吗?

例如,假设我从方法getProcessId() 得到 PID 为 2256。我想计算 PID 的内存和 CPU:2256。

【问题讨论】:

【参考方案1】:

如果您在 Linux(或其他 UNIXy)系统上运行(可能,如果您在谈论 PID),假设您可以使用 procfs file system 下提供的一大堆东西。

您可以在/proc/self 中查找当前进程,或在/proc/&lt;PID&gt; 中查找另一个进程。

对于内存和 CPU 使用率,我将从 statmstatusstat 开始。有关更详细的说明,请参阅here。

【讨论】:

【参考方案2】:

您要显示的信息是特定于平台的。 /proc (procfs) 是现代 UNIX 中的标准机制。 jproc 是 JNI 到 proc 文件系统。您可能会发现它非常有用。

From Author's blog:

好像从 Java 访问 kstats 还不够,我最近去过 玩访问进程 信息 - 特别是 /proc Solaris 上的文件系统 - 来自 java。 JProc 就这样诞生了。

最终的想法是将这个 使用 JKstat 和 SolView 提供更多信息 完整的视图 Solaris 系统。

【讨论】:

以上是关于如何使用 java 程序获取 PID 的内存、CPU 使用率?的主要内容,如果未能解决你的问题,请参考以下文章

linux 怎么查看内存使用情况

Java进程监控

获取Pid

并发编程--锁--如何使用命令行和代码定位死锁

linux下如何获取某一进程占用的物理内存和虚拟内存

ls显示所有java进程的pid命令