编程语言
首页 > 编程语言> > java – 来自pthread_self()的Pthread id与dtrace脚本中的数据不匹配

java – 来自pthread_self()的Pthread id与dtrace脚本中的数据不匹配

作者:互联网

我正在使用here中的这个dtrace脚本来尝试查找java程序的线程发生上下文切换的时间.

我正在尝试将从脚本收集的数据与从正在运行的程序收集的跟踪数据(方法入口/出口之类的东西)进行匹配.我使用简短的JNI方法获取正在运行的线程的pthread id,该方法只返回pthread_self()的值.

我遇到的问题是我从调用pthread_self()获得的线程ID与我在dtrace脚本中获得的任何线程ID完全不同.我想知道是不是因为我正在调用pthread_self(),因为它返回一个指针,但是很难找到关于pthread_t实际上是什么在mac osx上的信息.

解决方法:

所以我将回答我自己的问题,dtrace中的curthread和tid变量是内核线程结构的指针值,要获取这些值来比较dtrace和用户空间线程数据我必须创建一个内核扩展来获取这些内部值用于用户空间中的线程.

一般来说,这是一个坏主意,因为它是不可移植的,如果内核被更改可能很容易破坏并且可能存在安全风险.不幸的是,我没有找到另一种方法来实现我想要的.

标签:java,macos,pthreads,dtrace
来源: https://codeday.me/bug/20190827/1742873.html