如何在 Linux 上查找哪个线程cpu利用率最高?

如何在 Linux 上查找哪个线程cpu利用率最高?,第1张

可以用 top 命令看

1.找出cpu耗用厉害的进程pid, 终端执行top命令,然后按下shift+p (shift+m是找出消耗内存最高)查找出cpu利用最厉害的pid号

2.根据上面第一步拿到的pid号,top -H -p pid 。然后按下shift+p,查找出cpu利用率最厉害的线程号,比如top -H -p 1328

3.将获取到的线程号转换成16进制,去百度转换一下就行

4.使用jstack工具将进程信息打印输出,jstack pid号 >/tmp/t.dat,比如jstack 31365 >/tmp/t.dat

5.编辑/tmp/t.dat文件,查找线程号对应的信息

通过查看资料,发现一种比较简单的方法就是在代码中使用printf将当前线程的id打印出来。

而这也分成两种情况:

1. 如果是pthread,则使用,

#include <pthread.h>

pthread_t pthread_self(void)

2. 如果不是pthread,即是由内核创建的线程,则使用,

#include <sys/types.h>

pid_t gettid(void)

获取线程所在的进程的id,方法如下:

#include <sys/types.h>

Linux下获取当前线程ID号函数:

pthread_t pthread_self()

返回:当前线程的ID号

pthread_t 数据类型的定义如下:

typedef unsigned long int pthread_t

sizeof(pthread_t) = 4,4个字节的整数。

Windows下获取当前线程ID号的函数:

DWORD GetCurrentThreadId()

返回值:当前线程的ID号

DWORD数据类型定义:

typedef unsigned long DWORD

在Windows下pthread-win库的pthread_t定义如下:

typedef struct {

void * p /*Pointer to actual object */

unsigned int x/*Extra information - reuse count etc */

} ptw32_handle_t

typedef ptw32_handle_t pthread_t

与Linux的thread_t不一样,它是一个结构,不是一个整数值

在Windows和Linux下可用的获取线程ID号的内联函数如下:

#ifdef WIN32

#include <windows.h>

#else

#include <pthread.h>

#endif

inline unsigned int PthreadSelf()

{

#ifdef WIN32

return::GetCurrentThreadId()

#else

returnthread_self()

#endif

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7593212.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存