отслеживание использования процессора и памяти на процесс

<p>я подозреваю, что одно из моих приложений съедает больше циклов цп, чем я хочу. проблема в том, что это происходит в пакетном режиме, и просто просмотр диспетчера задач мне не помогает, поскольку он показывает только немедленное использование.</p><p>есть ли способ (на windows), чтобы отслеживать историю использования процессора и памяти для какого-либо процесса. например. я начну отслеживать «firefox» и через час или около того увижу график использования процессора и памяти за этот час.</p><p>я ищу либо готовый инструмент, либо программный способ для достижения этой цели.</p>

<p>просто введите <code>perfmon</code> в <code>start > run</code> и нажмите ввод. когда окно performance открыто, нажмите на знак +, чтобы добавить новые счетчики на график. счетчики - это разные аспекты работы вашего пк, которые по сходству сгруппированы в группы, называемые «объект производительности».</p><p>для своих вопросов вы можете выбрать объекты производительности «процесс», «память» и «процессор». затем вы можете увидеть эти счетчики в режиме реального времени</p><p>вы также можете указать утилиту, чтобы сохранить данные о производительности для проверки позже. для этого выберите «журналы и оповещения производительности» на левой панели. (он находится прямо под консолью системного монитора, которая предоставляет нам вышеупомянутые счетчики. если его там нет, нажмите «файл»> «добавить/удалить оснастку», нажмите «добавить» и выберите «журналы и оповещения производительности» в списке ".) в разделе" журналы и оповещения производительности "создайте новую конфигурацию мониторинга в разделе" журналы счетчиков ". затем вы можете добавить счетчики, указать частоту выборки, формат журнала (двоичный или простой текст) и местоположение журнала.</p>

<p> <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx">process explorer</a> может показать общее время процессора, затраченное процессом, а также график истории для процесса.</p>

<p>используя perfmon.exe, я попытался использовать счетчик «private bytes» в разделе «process» для отслеживания использования памяти, и он работает хорошо.</p>

<p>может быть, вы можете использовать это. он должен работать для вас и сообщит время процессора для указанного процесса.</p><pre><code>@echo off : rich kreider <rjk@techish.net> : report processor time for given process until process exits (could be expanded to use a pid to be more : precise) : depends: typeperf : usage: foo.cmd <processname> set process=%~1 echo press ctrl-c to stop... :begin for /f "tokens=2 delims=," %%c in ('typeperf "\process(%process%)\%% processor time" -si 1 -sc 1 ^| find /v "\\"') do ( if %%~c==-1 ( goto :end ) else ( echo %%~c%% goto begin ) ) :end echo process seems to have terminated. </code></pre>

<p>я согласен, perfmon.exe позволяет добавлять счетчики (щелкните правой кнопкой мыши на правой панели) для любого процесса, который вы хотите отслеживать.</p><p>объект производительности: process установите флажок «выбрать экземпляры из списка» и выберите firefox.</p>

<p>wmi - это инструментарий управления windows, и он встроен во все последние версии windows. он позволяет программно отслеживать такие вещи, как использование процессора, дисковый ввод-вывод и использование памяти.</p><p>perfmon.exe является интерфейсом gui для этого интерфейса и может отслеживать процесс, записывать информацию в журнал и позволяет анализировать журнал после факта. это не самая элегантная программа в мире, но она выполняет свою работу. </p>

<p>process lasso больше предназначен для автоматизации процессов и оптимизации классов приоритетов, а не графиков. тем не менее, он<em> делает </em>предлагает историю использования цп для каждого процесса (изображена в виде белой линии на графике), но он<em>не</em>предлагает историю использования памяти для каждого процесса. </p><p>отказ от ответственности: я являюсь автором process lasso, но на самом деле я не одобряю его здесь - так как есть лучшие решения (perfmon - лучший).</p><p>лучшая вещь - это монитор ресурсов и производительности windows vista +. он может отслеживать использование процессором, памятью, сетью и диском доступов процессами с течением времени. это отличная утилита для сбора информации о системе, которая должна была быть создана давно. если я не ошибаюсь, он может отслеживать процессорные ресурсы процессора и использование памяти с течением времени (среди всего перечисленного).</p>

<p>хотя я не пробовал это, <a href="http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx">procdump</a> кажется лучшим решением.</p><p>описание с сайта:</p><blockquote> <p>procdump - это утилита командной строки, основной целью которой является мониторинг приложения для скачков цп и создание аварийных дампов во время скачка, которые администратор или разработчик может использовать для определения причины скачка. procdump также включает в себя мониторинг зависших окон (используя то же определение зависания окон, что и в windows и диспетчере задач), мониторинг необработанных исключений и может генерировать дампы на основе значений счетчиков производительности системы. он также может служить общей утилитой дампа процесса, которую вы можете встроить в другие скрипты.</p> </blockquote>

<p>возможно, вы захотите взглянуть на <a href="http://www.bitsum.com/prolasso.php">process lasso</a> .</p>

<p>вы также можете попробовать использовать скрипт c #/perl/java для получения данных об использовании с помощью команд wmi, и ниже приведены шаги для этого.</p><p>нам нужно выполнить 2 запроса wmi select и применить формулу загрузки cpu%</p><p><strong>1. чтобы получить общее количество логических процессов</strong> </p><pre><code>select numberoflogicalprocessors from win32\_computersystem </code></pre><p><strong>2. чтобы получить значения percentprocessortime, timestamp\_sys100ns (была применена формула использования цп для получения фактического процента использования) и workingsetprivate (ram) минимум 2 раза с интервалом ожидания 1 секунда</strong></p><pre><code>select * from win32\_perfrawdata\_perfproc\_process where idprocess=1234 </code></pre><p><strong>3. применить формулу загрузки цп</strong></p><pre><code>cpu%= ((p2-p1)/(t2-t1)*100)/numberoflogicalprocessors </code></pre><p>p2 указывает percentprocessortime, извлеченный во второй раз, а p1 указывает percentprocessortime, извлеченный в первый раз, t2 и t1 для timestamp\_sys100ns.</p><p>пример perl-кода для этого можно найти по ссылке <a href="http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/">http://www.craftedforeveryone.com/cpu-and-ram-utilization-of-an-application-using-perl-via-wmi/</a> </p><p>эта логика применяется ко всем языкам программирования, которые поддерживают запросы wmi</p>

<p>хм, я вижу, что <a href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx">process explorer</a> может это сделать, хотя его графики не слишком удобны. все еще ищу альтернативные/лучшие способы сделать это.</p>

<p>perfmon.exe встроен в windows.</p>

<p>под windows 10 диспетчер задач может показывать суммарные часы работы процессора. просто перейдите на вкладку «история приложений» и «удалить историю использования». теперь оставьте все запущенным на час или два:</p><p> <a href="https://i.stack.imgur.com/mv0ua.png"> <img src="https://i.stack.imgur.com/mv0ua.png" alt="windows 10 cumulative cpu time"> </a> </p><p>что это не делает, так это разбивает использование в браузерах по вкладкам. нередко неактивные вкладки выполняют огромную работу, каждая открытая вкладка использует энергию и замедляет работу вашего пк.</p>

<p>я использую информацию о задачах для графика истории скорости cpu/ram/io . <a href="http://www.iarsn.com/taskinfo.html">http://www.iarsn.com/taskinfo.html</a> </p><p>но всплески неотзывчивости, больше напоминают время прерывания из-за сбойного hd/ss диска. </p>