Private bytes что это
Знакомство с Process Explorer
2. Знакомство с Process Explorer
Полное руководство по Process Explorer
В этом уроке из «Серии уроков по пакету утилит SysInternals» рассматривается Process Explorer, возможно, наиболее часто используемое и полезное приложение в наборе инструментов SysInternals. Но насколько хорошо вы действительно знаете эту утилиту?
Process Explorer, диспетчер задач и приложение для мониторинга системы, существует с 2001 года, и хотя раньше оно работало даже в Windows 9x, современные версии поддерживают только XP и выше, и они постоянно пополняются новыми функциями для современных версий Windows. Фактически, эта программа стала стандартом для устранения неполадок.
Если вы скачали полный пакет SysInternals, то для запуска Process Explorer дважды кликните на файл procexp64.exe или на файл procexp.exe (для 64- и 32-битных систем соответственно.
Итак, что может сделать Process Explorer?
Некоторые из лучших функций включают следующие, хотя это ни в коем случае не исчерпывающий список. Это приложение имеет множество функций, и многие из них скрыты глубоко внутри интерфейса. Удивительно, но это всё помещается в маленький файл.
Каждый раз, когда у вас возникает проблема с приложением, или что-то продолжает зависать на вашем компьютере, или, может быть, вы пытаетесь выяснить, для чего используется конкретный файл DLL, Process Explorer — это инструмент как раз для этой работы.
Понимание древовидного представления процессов
Когда вы запускаете Process Explorer, вам сразу же предоставляется множество визуальных данных — по умолчанию показывается иерархическое древовидное представление процессов, запущенных на вашем компьютере, среди прочего для каждого процесса показывается использование ЦП и ОЗУ. В верхней части панели инструментов есть несколько небольших мини-графиков, показывающих использование ЦП, которые можно щёлкнуть для отображения в отдельном окне.
Определённо много чего происходит, и при первом взгляде происходящее на экране может ошеломить.
Давайте начнём разбираться с каждым из элементов того, что показывает Process Explorer.
На начальном экране отображается набор столбцов, в который входят:
Вы можете настроить эти столбцы и добавить множество других параметров, или вы можете просто щёлкнуть любой из столбцов для сортировки по этому полю. Если вы когда-либо использовали Диспетчер задач раньше, вы, вероятно, сортировали по памяти или ЦП, и вы также можете сделать это здесь.
При нажатии на «Process» выполняется переключение между сортировкой по имени процесса или возвратом к древовидному представлению, которое мы видим по умолчанию, что очень полезно, когда вы к этому привыкнете.
Выводимая информация обновляется один раз в секунду, но вы можете перейти в меню View → Update Speed и настроить частоту обновления: минимальное значение составляет 0,5 секунды, а верхний уровень — 10 секунд. Если вы используете его для устранения неполадок, значение по умолчанию, вероятно, подойдёт, но если вы хотите использовать его в качестве монитора ЦП, находящегося на панели задач, то чтобы программа потребляла меньше процессорного времени, то можно выбрать частоту обновления в 5 или 10 секунд.
Вы также можете приостановить просмотр в том же подменю или просто нажав клавишу пробел. Это заморозит экран программы и вы получите моментальный снимок, что может быть полезно, если вы пытаетесь определить процесс, который запускается и быстро умирает, или если вы решили отсортировать по загрузке ЦП, а все строки продолжают прыгать.
Для запущенного процесса можно открыть подробное представление и детально изучить все столбцы. Вам нужно знать, что если вы нажали на паузу и экран не обновляется, то хоть вы и сможете видеть процесс, который завершил свою работу, в подробном представлении для завершённых процессов не показывается дополнительная информация. По этой причине следует заранее добавить дополнительные столбцы в окно программы, если вы отлавливаете и изучаете процесс, который быстро завершает свою работу.
Что означают цвета в Process Explorer
В типичном списке Process Explorer определённо много цветов, что может немного сбивать с толку начинающего компьютерщика. Очень важно узнать, что означают все эти цвета, потому что они предназначены не только для красоты — каждый из них имеет своё значение.
Если вы не можете вспомнить, что означает один из цветов, вы можете перейти в меню Options → Configure Colors, чтобы открыть диалоговое окно «Color Selection». По сути, это краткая шпаргалка что какой цвет означает. Продолжайте читать, так как мы собираемся объяснить здесь значение всех цветов Process Explorer.
Основываясь на цветах на картинке выше, вот что означает каждый из выбранных элементов (остальные на самом деле не важны).
Поскольку, очевидно, что один и тот же процесс может иметь свойства более чем одной описанной группы, цвета будут применяться в порядке приоритета. Если процесс является сервисом и приостановлен, он будет отображаться тёмно-серым цветом, поскольку этот цвет более важен.
Порядок приоритета процессов, который нам удалось составить во время исследования программы: Suspended → Packed → Immersive → Services → Own Processes (то есть Приостановлено → Упаковано → Иммерсивное → Службы → Собственные процессы).
Проверка идентичности приложения
Один действительно полезный параметр, который, к нашему удивлению, не включён по умолчанию, находится в разделе Options → Verify Image Signatures (Проверить подписи образа).
Эта опция проверяет цифровую подпись для каждого исполняемого файла в списке, что является неоценимым инструментом для устранения неполадок, когда вы смотрите на какое-то работающее подозрительное приложение этом в списке.
На данном этапе подавляющее большинство программного обеспечения с хорошей репутацией должно иметь цифровую подпись. Если что-то не так, вам следует очень внимательно подумать, следует ли вам его использовать.
Действия над процессами
Вы можете быстро принять меры к любому процессу, щёлкнув его правой кнопкой мыши и выбрав один из вариантов или, если хотите, используя сочетания клавиш. Эти варианты включают:
И, очевидно, если вы откроете Properties (Свойства), это приведёт вас к ещё более полезной информации о процессе, многое из чего мы рассмотрим в следующем уроке.
Запуск от имени администратора
Хотя вам совершенно не обязательно запускать Process Explorer от имени администратора, без этого многие полезные функции не будут работать, и вы не сможете увидеть так много информации о каждом процессе, как запустив программу с повышенными привилегиями.
Если вы работаете в Windows XP или 2003, вам нужно будет работать под учётной записью с полными правами администратора для использования большинства функций. Вероятно, это не проблема для большинства людей, потому что XP в любом случае предоставляет дефолтной учётной записи полные права, но если вы пытаетесь использовать программу на работе без прав администратора, это не сработает.
Чтобы запустить приложение в качестве администратор просто щёлкните правой кнопкой мыши и выберите нужный вариант в меню.
Интересный факт: Process Explorer на самом деле использует привилегию Debug Programs, которая во многом объясняет, почему она настолько эффективна.
Как сделать так, чтобы Process Explorer всегда запускался от имени администратора
Если вы хотите, чтобы Process Explorer всегда открывался с правами администратора без необходимости открывать контекстное меню, то в контекстном меню откройте Свойства файла procexp64.exe (или procxp.exe), перейдите на вкладку «Совместимость», а затем выберите параметр «Запускать эту программу от имени администратора».
Использование Process Explorer для замены диспетчера задач
Process Explorer долгое время использовался в качестве мощной замены ранее анемичного встроенного Диспетчера задач — если вы хотите получить реальную мощь в своих руках, он справится с этой задачей.
Примечание. Диспетчер задач Windows 10 значительно улучшен по сравнению с предыдущими версиями. Он все ещё не такой мощный, как Process Explorer, но, вероятно, его проще использовать обычным людям. Так что не меняйте в компьютере мамы Диспетчер задач на Process Explorer.
Чтобы заставить Process Explorer заменить диспетчер задач, все, что вам нужно сделать, это выбрать в меню Options → Replace Task Manager. Всё готово.
Как только вы это сделаете, сочетание клавиш CTRL+SHIFT+ESC или щелчок правой кнопкой мыши по панели задач запустит Process Explorer, а не диспетчер задач. Легко, правда?
Предупреждение: если вы все же замените Диспетчер задач, убедитесь, что вы поместили Process Explorer в такое место, где вы случайно не переместите и не удалите файл. В противном случае вы застрянете с системой, которая не сможет запускать диспетчер задач.
Использование Process Explorer для добавления отличных значков монитора системы в трей
Одной из лучших функций Process Explorer является возможность сворачивать его в системный лоток, но вместо одного значка он может сворачиваться в полный набор значков, которые могут контролировать ЦП, ввод-вывод, диск, сеть, графический процессор и RAM, или любое их сочетание. Вы можете настроить их отображение отдельно или не отображать вовсе, если хотите.
Чтобы настроить это, откройте меню «Options», перейдите в раздел Tray Icons, а затем щёлкните, чтобы включить все значки, которые вы хотели бы видеть на панели задач.
Вы можете просто запускать Process Explorer каждый раз при запуске компьютера, а затем свернуть его в системный лоток, чтобы он всегда был рядом с вами. И, конечно же, если вы использовали вариант замены диспетчера задач, вы можете быстро получить к нему доступ в любое время с помощью сочетания клавиш — хотя вы можете использовать параметр Allow Only One Instance («Разрешить только один экземпляр»), чтобы убедиться, что вы не открываете кучу окон с Process Explorer.
Использование Process Explorer для быстрого поиска по VirusTotal
Если вы работаете на проблемном ПК и хотите выяснить, является ли процесс вирусом, вы можете сэкономить время, используя Process Explorer версии 16 или выше, потому что они добавили интеграцию VirusTotal непосредственно в приложение. Просто щёлкните что-либо в списке правой кнопкой мыши, чтобы увидеть этот параметр.
При первом запуске вам будет предложено принять условия использования VirusTotal, но после этого вы увидите, что результаты VirusTotal появятся прямо в списке.
Вы можете нажать на результат, чтобы перейти к VirusTotal и просмотреть подробности. Это отличное дополнение к одной из лучших утилит на свете.
Следующий урок: Использование Process Explorer для устранения неполадок и диагностики
В следующем уроке нашей серии мы собираемся более подробно рассказать о том, как использовать Process Explorer в некоторых реальных сценариях для устранения распространённых проблем, таких как вредоносное и проблемное ПО. Следите за обновлениями до конца серии.
What is private bytes, virtual bytes, working set?
I am trying to use the perfmon windows utility to debug memory leaks in a process.
This is how perfmon explains the terms:
Working Set is the current size, in bytes, of the Working Set of this process. The Working Set is the set of memory pages touched recently by the threads in the process. If free memory in the computer is above a threshold, pages are left in the Working Set of a process even if they are not in use. When free memory falls below a threshold, pages are trimmed from Working Sets. If they are needed they will then be soft-faulted back into the Working Set before leaving main memory.
Virtual Bytes is the current size, in bytes, of the virtual address space the process is using. Use of virtual address space does not necessarily imply corresponding use of either disk or main memory pages. Virtual space is finite, and the process can limit its ability to load libraries.
Private Bytes is the current size, in bytes, of memory that this process has allocated that cannot be shared with other processes.
These are the questions I have:
Is it the Private Bytes which I should measure to be sure if the process is having any leaks as it does not involve any shared libraries and any leaks, if happening, will come from the process itself?
What is the total memory consumed by the process? Is it the Virtual Bytes or is it the sum of Virtual Bytes and Working Set?
Is there any relation between Private Bytes, Working Set and Virtual Bytes?
Are there any other tools that give a better idea of the memory usage?
4 Answers 4
The short answer to this question is that none of these values are a reliable indicator of how much memory an executable is actually using, and none of them are really appropriate for debugging a memory leak.
Working Set refers to the total physical memory (RAM) used by the process. However, unlike private bytes, this also includes memory-mapped files and various other resources, so it’s an even less accurate measurement than the private bytes. This is the same value that gets reported in Task Manager’s «Mem Usage» and has been the source of endless amounts of confusion in recent years. Memory in the Working Set is «physical» in the sense that it can be addressed without a page fault; however, the standby page list is also still physically in memory but not reported in the Working Set, and this is why you might see the «Mem Usage» suddenly drop when you minimize an application.
Virtual Bytes are the total virtual address space occupied by the entire process. This is like the working set, in the sense that it includes memory-mapped files (shared DLLs), but it also includes data in the standby list and data that has already been paged out and is sitting in a pagefile on disk somewhere. The total virtual bytes used by every process on a system under heavy load will add up to significantly more memory than the machine actually has.
So the relationships are:
There’s another problem here; just as shared libraries can allocate memory inside your application module, leading to potential false positives reported in your app’s Private Bytes, your application may also end up allocating memory inside the shared modules, leading to false negatives. That means it’s actually possible for your application to have a memory leak that never manifests itself in the Private Bytes at all. Unlikely, but possible.
Private Bytes are a reasonable approximation of the amount of memory your executable is using and can be used to help narrow down a list of potential candidates for a memory leak; if you see the number growing and growing constantly and endlessly, you would want to check that process for a leak. This cannot, however, prove that there is or is not a leak.
One of the most effective tools for detecting/correcting memory leaks in Windows is actually Visual Studio (link goes to page on using VS for memory leaks, not the product page). Rational Purify is another possibility. Microsoft also has a more general best practices document on this subject. There are more tools listed in this previous question.
I hope this clears a few things up! Tracking down memory leaks is one of the most difficult things to do in debugging. Good luck.
Process Explorer. Обзор некоторых возможностей
Process Explorer – альтернатива стандартному Task Manager-у. Эта утилита, как и многие другие утилиты Sysinternals, здорово расширяет возможности контроля и управления системой. Главное новшество только что вышедшей 14-ой версии — возможность мониторить сетевую активность процессов. Далее небольшой обзор возможностей этой утилиты, которые считаю наиболее полезными для себя.
Для справки. С 2006 года Sysinternals была приобретена Microsoft, а ключевая фигура этой компании – Марк Руссинович с тех пор работает в Microsoft. Марк известен своими утилитами, книгой Windows Internals, блогом и является признанным специалистом по архитектуре Windows.
Колонки в главном окне
Сервисы внутри svchost
При наведении курсора на svchost (процесс который хостит в себе сервисы) можно видеть перечень сервисов – довольно полезная фича.
Суммарные графики активности, процесс с максимальной активностью
Сверху основного окна расположены графики основных суммарных параметров – память, дисковая, сетевая и CPU активность. При перемещении курсора по истории параметра, показан процесс который дал максимальный вклад в это значение в данный момент времени. Кроме того в тултипе есть информация о мгновенном значении параметра (зависит от частоты обновления). На следующей картинке — график сетевой активности.
В окне «system information» графики собраны вместе, здесь удобнее смотреть корреляцию параметров.
Суммарные графики активности в трее, процесс с максимальной активностью
Очень удобная фича – выведение в трей иконок с графиками суммарной активности. Там могут быть графики дисковой активности, CPU и память. Я использую первые два – поглядываю туда, при возникновении вопросов достаточно навести курсор и узнать какой процесс дает максимальный вклад в параметр. К сожалению сетевую активность туда нельзя выставить, я надеюсь это вопрос времени.
Сетевые соединения процесса
В свойствах процесса в закладке TCP/IP можно посмотреть текущие активные соединения. К сожалению сетевая активность по ним не видна, эта функциональность пока доступна в другой утилите – tcpview.
Потоки процесса, их активность, стек потока с загрузкой символов
В свойствах процесса в закладке threads видны все его потоки и загрузка CPU по потокам. Допустим хочется рассмотреть стек потока, который интенсивно что-то делает или висит. Для этого сперва надо его распознать, допустим по загрузке CPU, потом полезно приостановить процесс, чтобы спокойно рассмотреть его состояние — это можно сделать прямо в этом окне по кнопке “suspend”. Далее выделяем поток и нажимаем “stack”. В большинстве случаев стек будет начинаться в недрах системы и обрываться не совсем понятным образом. Дело в том, что не имея отладочной информации по системным библиотекам не удастся корректно развернуть стек и разобраться в нем. Есть решение – нужно сконфигурировать доступ с символьной информации с сайта Microsoft. Надо проделать несколько шагов:
Информация по использованию памяти в системе
В окне «system information» закладка «memory». Здесь есть два графика – commit и physical. Physical – использование физической памяти без учета файлового кэша, под который уходит все что остается. Commit – сколько памяти выделено для процессов включая используемую виртуальную память. Под графиками в разделе «Commit Charge» есть поля Limit и Peak. Limit определяется суммой физической и виртуальной памяти, т.е. это максимальный суммарный объем памяти, который может выделить система. Peak – это максимум графика Commit за время работы утилиты. Процентные соотношения Current/Limit и Peak/Limit удобны для быстрой оценки насколько состояние системы приближалось к критическому лимиту по доступной памяти.
Handles и DLL процесса
В главном окне можно включить разделитель и снизу отображать DLL или handles выделенного процесса. При борьбе с вирусами и отладке программ это бывает очень полезно. На картинке — список handles для opera, первый handle файловой системы – это flash ролик в временном каталоге.
Для DLL можно добавить колонку с полным путем к образу, отсортировав по нему, проанализировать нет ли каких подозрительных модулей. На картинке видно, что подключен модуль от Logitech, есть подозрение что это что-то типа хука внедряющегося во все процессы. Следующим пунктом посмотрим где он еще встречается.
Поиск handles и DLL
Поиск по имени handle или DLL во всех процессах. Вводим имя DLL от Logitech из предыдущего пункта и убеждаемся что подключается он почти везде.
Другой пример – надо понять, кто блокирует файл или работает с папкой. Вводим часть пути и находим все процессы, которые открыли подобные объекты системы. Можно щелкнуть на элементе из списка и перейти к процессу, при этом будет подсвечен соответствующий handle или DLL.
PS Для отображения некоторых полей (например сетевая статистика) требуются административные привилегии. Повысить привилегии в уже запущенном Process Explorer можно с помощью команды в меню File. Только при наличии таких привилегий есть возможность добавить такие колонки. Я считаю такое поведение неверным, т.к. скрывает потенциальные возможности приложения от пользователя. Если поля добавлены и при следующем запуске нет административных прав, то они будут пустыми. Можно задать ключ «/e» в командной строке, чтобы форсировать поднятие привилегий при старте Process Explorer.
Анализ ключевых показателей производительности — часть 3, последняя, про системные и сервисные метрики
Мы заканчиваем публикацию перевода по тестированию и анализу производительности от команды Patterns&Practices о том, с чем нужно есть ключевые показатели производительности. За перевод спасибо Игорю Щегловитову из Лаборатории Касперского. Остальные наши статьи по теме тестирования можно найти по тегу mstesting
В первой статье цикла по анализу ключевых показателей производительности мы наладили контекст, теперь переходим к конкретным вещам. Во второй посмотрели на анализ пользовательских, бизнесовых показателей/метрик и показателей, необходимых к анализу внутри приложения. В этой, заключительной — про системные и сервисные (в т.ч. зависимых сервисов) метрики.
Итак,
Системные метрики.
Системные метрики позволяют определять, какие системные ресурсы используются и где могут возникать конфликты ресурсов. Эти метрики направлена на отслеживание ресурсов уровня машины, таких как память, сеть, процессор и утилизация диска. Эти метрики могут дать представление о внутренних конфликтах лежащих в основе компьютера.
Вы также можете отслеживать данные метрики для определения аспектов производительности – нужно понимать, если ли зависимость между системными показателями и нагрузкой на приложение. Возможно, вам потребуются дополнительные аппаратные ресурсы (виртуальные или реальные). Если при постоянной нагрузке происходит увеличение значений данных метрик, то это может быть обусловлено внешними факторами — фоновыми задачами, регулярно-выполняющимися заданиями, сетевой активностью или I/O устройства.
Как собирать
Вы можете использовать Azure Diagnostics для сбора данных диагностики для для отладки и устранения неполадок, измерения производительности, мониторинга использования ресурсов, анализа трафика, планирования необходимых ресурсов и аудита. После сбора диагностики ее можно перенести в Microsoft Azure Storage для дальнейшей обработки.
Другой способ для сбора и анализа диагностических данных — это использование PerfView. Этот инструмент позволяет исследовать следующие аспекты:
Изначально PerfView был предназначен для локального запуска, но теперь он может быть использован для сбора данных из Web и Worker ролей облачных сервисов Azure. Вы можете использовать NuGet-пакет AzureRemotePerfView для установки и запуска PerfView удаленно на серверах ролей, после чего скачать и проанализировать полученные данные локально.
Windows Azure Diagnostics и PerfView полезны для анализа используемых ресурсов “постфактум”. Однако, при применении таких практик как DevOps, необходимо мониторить “живые” данные производительности для обнаружения возможных проблем производительности еще до того, как они произойдут. APM-инструменты могут предоставлять такую информацию. Например, утилиты Troubleshooting tools для веб-приложений на портале Azure могут отображать различные графики, показывающие память, процессор и утилизацию сети.
На портале Azure есть “health dashboard”, показывающий общие системные метрики.
Аналогичным образом, панель Diagnostic позволяет отслеживать заранее настроенный набор наиболее часто используемых счетчиков производительности. Здесь вы можете определить специальные правила, при выполнении которых оператор будет получать специальные нотификации, например, когда значение счетчика сильно превысит определенное значение.
Веб-портал Azure может отображать данные о производительности в течении 7 дней. Если вам нужен доступ данных за более длительный период, то данные о производительности нужно выгружать напрямую в Azure Storage.
Websites Process Explorer позволяет вам просматривать детали отдельных процессов запущенных на веб-сайте, а также отслеживать корреляции между использованием различных системных ресурсов.
New Relic и многие другие APM имеют схожие функции. Ниже приведено несколько примеров.
Мониторинг системных ресурсов делится на категории, которые охватывают утилизацию памяти (физической и управляемой), пропускную способность сети, работу процессора и операции дискового ввода вывода (I/O). В следующих разделах описано, на что следует обратить внимание.
Использование физической памяти
Существует две основные причины ошибки OutOfMemory – процесс превышает выделенное для него пространство виртуальной памяти либо операционная система оказывается неспособной выделить дополнительную физическую память для процесса. Второй случай является самым распространенным.
Вы можете использовать описанные ниже счетчики производительности для оценки нагрузки на память:
Также следует учитывать, что большие объемы памяти могут привести к фрагментации (когда свободной физической памяти в соседних блоках недостаточно), поэтому система, которая показывает, что имеет достаточно свободной памяти, может оказаться не в состоянии выделить эту память для конкретного процесса.
Многие APM-инструменты предоставляют сведения об использовании процессами системной памяти без необходимости глубокого понимания о принципах работы памяти. На графике ниже показана пропускная способность (левая ось) и время отклика (правая ось) для приложения, находящегося под постоянной нагрузкой. Примерно после 6 минут производительность внезапно падает, и время отклика начинает “прыгать”, по прошествии нескольких минут происходит показателей.
Результаты нагрузочного тестирования приложения
Записанная с помощью New Relic телеметрия показывает избыточное выделение памяти, которое вызывает сбой операций с последующим восстановлением. Использованная память растет за счет файла подкачки. Такое поведение является классическим симптомом утечки памяти.
Телеметрия, показывающая избыточное выделение памяти
Примечание: В статье Investigating Memory Leaks in Azure Web Sites with Visual Studio 2013 содержится инструкция, показывающая как использовать Visual Studio и Azure Diagnostics для мониторинга использования памяти в веб-приложении в Azure.
Использование управляемой памяти
.NET приложения используют управляемую память, которая контролируется CLR (Common Language Runtime). Среда CLR проецирует управляемую память на физическую. Приложения запрашивают у CLR управляемую память, и CLR отвечает за выделение требуемой и освобождение неиспользуемой памяти. Перемещая структуры данных по блокам, CLR обеспечивает компоновку этого типа памяти, уменьшая тем самым фрагментацию.
Управляемые приложения имеют дополнительный набор счетчиков производительности. В статье Investigating Memory Issues содержится детальное описание ключевых счетчиков. Ниже описаны наиболее важные счетчики производительности: