我发现我的 Mac(Yosemite 10.10.4)中出现了一些奇怪的线程行为。线程数突然增加,然后又回落。有时线程数会一直保持在极高水平,因此超出上限maxproc
并导致出现fork: Resource temporarily unavailable
消息,即使将其增加到 2048 也是如此。
鉴于线程计数maxproc
,我想监控这个线程抖动来自。
top
,htop
并且glances
只提供快照,但我需要一个线程创建和销毁的带时间戳的日志, 包括所有权和父母身份,准确识别问题。
有任何想法吗?
编辑1:删除了我对 Google Chrome 作为潜在嫌疑人的提及,以使问题集中在线程历史或分类账上。
答案1
我之所以能够获得一些见解,是因为execsnoop
工具。手册页中的描述:
execsnoop 在执行新进程时打印其详细信息。会打印出 UID、PID 和参数列表等详细信息。
示例输出:
[raul@~/bitbar$] sudo execsnoop -v
STRTIME UID PID PPID ARGS
2016 Jan 14 17:56:09 0 1 0 launchd
2016 Jan 14 17:56:09 501 90311 1 influxd
2016 Jan 14 17:56:16 501 90312 321 kcc
2016 Jan 14 17:56:16 0 1 0 launchd
2016 Jan 14 17:56:16 0 90313 1 kcm
2016 Jan 14 17:56:19 0 1 0 launchd
2016 Jan 14 17:56:19 501 90314 1 influxd
execsnoop
用途跟踪,我还发现了这篇很棒的文章,其中包含一些其他脚本/工具:http://dtrace.org/blogs/brendan/2011/10/10/top-10-dtrace-scripts-for-mac-os-x/。
在 Mac OS X(Darwin)和 *nix 内核中,线程表示为进程,这就是计数ulimit
和sysctl
限制的原因。