我正在分析在OSX上运行的一些多进程nodejs代码。
我看到了:
[C++]:
ticks total nonlib name
23398 63.6% 63.8% ___mac_get_pid
什么是___mac_get_pid
?它的名字肯定暗示它是一些在Mac上获得PID的代码,但时间似乎过长了。
谷歌搜索没有提供任何有用的东西。
答案 0 :(得分:3)
__mac_get_pid
是mac_get_pid
库函数后面的系统调用。手册页mac_get
:http://man.cx/mac_get(3)
mac_get_pid ..获取文件,套接字,套接字对等或进程的标签 mac_get_pid()和mac_get_proc()系统调用返回与任意进程ID或当前进程关联的进程标签。
必须首先使用mac_prepare(3)函数分配和准备用于这些调用的标签存储。当使用标签完成应用程序时,可以使用mac_free(3)返回内存。
这里的“MAC”不是Mac OS X / macOS,而是POSIX.1e的Mandatory Access Control(“作为TrustedBSD项目的一部分在FreeBSD 5.0中引入”)。 mac_get_pid
为implemented in macOS/Dawrin/XNU为“扩展的非POSIX.1e接口”。
可能在使用的nodejs库中有一些方法尝试使用进程列表(如ps / top)进行详细的工作,但是他们无法限制其请求的速率。使用分析器获取带有mac_get_pid
的多个堆栈跟踪(不是v8 profiler仅堆栈跟踪js,但是一些外部分析器连接到nodejs进程)或使用调试器(gdb / lldb)通过手动停止和检查回溯直到找到谁mac_get_pid
(当你不在mac_get_pid
时继续并再次停止)是找到谁调用它的必要步骤。