gpt4 book ai didi

linux - 跟踪线程内存和 CPU 消耗

转载 作者:IT王子 更新时间:2023-10-28 23:37:15 27 4
gpt4 key购买 nike

我正在编写一个 Linux 应用程序,它观察其他应用程序并跟踪资源消耗。我计划使用 Java,但编程语言对我来说并不重要。目标很重要,所以我可以切换到另一种技术或使用模块。我的应用程序将任何选定的第三方应用程序作为子进程运行。大多数 child 软件解决一些算法,如图形、字符串搜索等。观察者程序在结束工作时跟踪 child 的资源。

如果子应用程序是多线程的,也许可以通过某种方式跟踪每个线程消耗了多少资源?可以使用任何非分布式内存线程技术编写应用程序:Java 线程、Boost 线程、POSIX 线程、OpenMP 等。

最佳答案

在现代 Linux 系统 (2.6) 中,每个线程都有一个单独的标识符,其处理方式与 pid 几乎相同。它显示在进程表中(至少在 htop 程序中),它也有其单独的 /proc条目,即 /proc/<tid>/stat .

查看man 5 proc并特别注意stat , statm , status等等。你应该在那里找到你感兴趣的信息。

唯一的障碍是获取这个线程标识符。 与进程 ID 不同! IE。 getpid()所有线程中的调用都返回相同的值。要获取实际的线程标识符,您应该使用(在 C 程序中):

pid_t tid = syscall(SYS_gettid);

顺便说一下,java 虚拟机(至少,它的 OpenJDK Linux 实现)在内部执行此操作,并在其后端将其用于调试目的,但不会将其暴露给 java 接口(interface)。

关于linux - 跟踪线程内存和 CPU 消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1431569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com