История создания или уничтожения процесса / потока или бухгалтерская книга в Mac OS X

831
raulk

Я вижу странное поведение потоков в моем Mac (Yosemite 10.10.4). Количество потоков увеличивается, а затем снова уменьшается. Иногда он остается чрезвычайно высоким, таким образом превышая maxprocи приводя к fork: Resource temporarily unavailableсообщениям, даже после увеличения его до 2048 года.

Учитывая, что потоки учитываются maxproc, я хотел бы отслеживать, откуда идет этот поток .

top, htopИ glancesпредлагают только снимки, но мне нужен датируемый журнал создания и уничтожения потоков, в том числе права собственности и родительства, чтобы точно определить проблему.

Есть идеи?

РЕДАКТИРОВАТЬ 1: убрал мою ссылку на Google Chrome в качестве потенциального подозреваемого, чтобы вопрос был сосредоточен на истории потоков или бухгалтерской книге.

0
Ну, во-первых, в действительности нет такой вещи, как утечка потока. Темы не являются ограниченным ресурсом. Во-вторых, каждый запрос на получение сценария, загрузку изображения или таблицы стилей, либо уведомление шпионящего за вами маркетолога о том, что вы что-то посещали, обновления аналитики на стороне клиента и т. Д., Создает поток. для большинства браузеров было бы необычно использовать менее 10 потоков для загрузки современной страницы. Создание и уничтожение потоков стоит не так дорого, поэтому большинство асинхронных приложений объединяют потоки и оставляют их для дальнейшего использования. Так в чем твоя настоящая проблема? темы не "расходуются". Есть бесконечные темы. Frank Thomas 8 лет назад 1
CONT. Поток представляет собой поток инструкций, поэтому он является наименьшей и самой атомарной единицей обработки, которую может использовать приложение. это означает, что каждый процесс выполняется как минимум один поток. В этом случае все ваши потоки бездействуют, они ничего не выполняют, о чем свидетельствует низкая или несуществующая загрузка ЦП для этих процессов. если поток не потребляет ЦП, то он также может не существовать, за исключением небольшого объема работы, который позволит повторно использовать его позже, что спасет вас, поэтому нет ни причины его выбрасывать, ни причин для беспокойства по поводу того, что процесс имеет породил как минимум 63 темы. Frank Thomas 8 лет назад 1
Да, я знаю, что это за нить, но суть в том, что в ядрах Mac OS X и * nix они учитываются в границах `ulimit` и` sysctl`. Вот где моя система достигает предела, возможно, из-за ложного приложения, и именно поэтому я хотел бы отслеживать, откуда поступает эта активность, чтобы выявить проблему. http://blog.ghostinthemachines.com/2010/01/19/mac-os-x-fork-resource-temporary-unavailable/ https://stackoverflow.com/questions/13009632/getting-strange-behavior-from- терминал-и-Iterm-баш-вилка-ресурс-temporar raulk 8 лет назад 0
Не существует встроенного / простого способа, но dtrace должен предоставлять нужную вам информацию, но это очень большой универсальный инструмент, поэтому он имеет некоторую кривую обучения и потребует некоторых исследований. Здесь может быть хорошее место для начала: https://docs.oracle.com/cd/E18752_01/html/819-5488/gcggv.html С другой стороны, ответ Ролана Смита здесь может предложить вам, по крайней мере, определить, какие PID / PPID создаются по мере их появления: http://stackoverflow.com/questions/14269891/monitor-process-creation-in-freebsd. Удачи. Frank Thomas 8 лет назад 0
Спасибо за указатель. Я думаю, что вы должны исправить ваши комментарии выше, @FrankThomas. (1) Потоки не являются ограниченным ресурсом => они могут быть, если они ограничены ОС. В системах Unix можно установить для `maxproc` значение` unlimited`, но в Mac OS X это невозможно и ограничено 2048, поэтому ** количество потоков по своей природе ограничено ** делает их ** ограниченным ресурсом * *. (2) HTTP-запросы на выборку изображений, CSS и т. Д. Из браузера ** не создают каждый новый поток **! Потоки повторно используются через пулы потоков, как вы позже укажете. Вы можете исправить это тоже. И, возможно, удалить понижающий голос;) raulk 8 лет назад 0
Оказывается, существует ** IS ** встроенный простой способ отслеживать процесс / поток в Mac OS X в режиме реального времени: инструмент ** `execsnoop` ​​**. Я добавил это как ответ ниже. raulk 8 лет назад 0

2 ответа на вопрос

1
raulk

I was able to gather some insight thanks to the execsnoop tool. Description from the man page:

execsnoop prints details of new processes as they are executed. Details such as UID, PID and argument listing are printed out.

Example output:

[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 uses DTrace, and I found this great post with some other scripts/tools: http://dtrace.org/blogs/brendan/2011/10/10/top-10-dtrace-scripts-for-mac-os-x/.

In Mac OS X (Darwin) and *nix kernels, threads are represented as processes, and that's why the count towards the ulimit and sysctl limits.

-2
Eric Malouff

от mac: fork: Ресурс временно недоступен

решить, ссылаясь на папку, в которой находится скрипт или утилита.

например: из папки вам нужно запустить скрипт или утилиту:

/ usr / local / opt / dart / libexec / bin / pub global активировать stagehand

Похожие вопросы