Нужно пояснить размер резидентного размера / виртуальный размер

Я обнаружил, что pidstat будет хорошим инструментом для мониторинга процессов. Я хочу рассчитать среднее использование памяти конкретного процесса. Вот пример вывода:

 02:34:36 PM PID minflt/s majflt/s VSZ RSS %MEM Command 02:34:37 PM 7276 2.00 0.00 349212 210176 7.14 scalpel 

(Это часть вывода pidstat -r -p 7276 )

Должен ли я использовать информацию размера резидентного размера (RSS) или виртуального размера (VSZ) для вычисления среднего потребления памяти? Я прочитал кое-что в Википедии и на форумах, но я не уверен, чтобы полностью понять различия. Кроме того, кажется, что никто из них не является надежным. Итак, как я могу контролировать процесс, чтобы использовать его память?

Любая помощь по этому вопросу была бы полезна.

One Solution collect form web for “Нужно пояснить размер резидентного размера / виртуальный размер”

RSS – сколько памяти этот процесс в настоящее время имеет в основной памяти (ОЗУ). VSZ – это объем виртуальной памяти, который имеет весь процесс. Это включает в себя все типы памяти, как в ОЗУ, так и поменять местами. Эти цифры могут искажаться, поскольку они также включают разделяемые библиотеки и другие типы памяти. Вы можете иметь пятьсот экземпляров запуска bash , а общий размер их объема памяти не будет суммой их значений RSS или VSZ.

Если вам нужно получить более подробное представление об объеме памяти в процессе, у вас есть несколько вариантов. Вы можете пройти через /proc/$PID/map и выбить ненужный материал. Если это общие библиотеки, расчет может быть сложным в зависимости от ваших потребностей (что, я думаю, я помню).

Если вы только заботитесь о размере кучи процесса, вы всегда можете просто проанализировать запись [heap] в файле map . Размер ядра, выделенного для кучи процесса, может или не может отражать точное количество байтов, которые запросил процесс. Есть мельчайшие детали, внутренности ядра и оптимизация, которые могут отбросить это. В идеальном мире это будет так же, как и ваш процесс, округленный до ближайшего кратного размера системной страницы ( getconf PAGESIZE расскажет вам, что это такое – на ПК, это, вероятно, 4096 байт).

Если вы хотите увидеть, сколько памяти выделил процесс, одним из лучших способов является отказ от метрик на стороне ядра. Вместо этого вы LD_PRELOAD функции распределения памяти кучи C (de) с помощью механизма LD_PRELOAD . Лично я слегка злоупотребляю valgrind чтобы получить информацию об этом. (Обратите внимание, что применение инструментария потребует перезапуска процесса.)

Обратите внимание, что, поскольку вы также можете проводить тесты производительности, то valgrind сделает ваши программы очень медленными (но, вероятно, в пределах ваших допусков).

  • Управление средой, переданной дочернему процессу bash
  • Получение данных из mem-кеша
  • Отображение потоков уровня на уровне ядра, потоки пользовательского уровня для процессов / потоков
  • lsof - отладить выходную информацию
  • Как проследить процесс для оригинального пользователя?
  • Переносимость ссылок файлового дескриптора
  • Отправка сигналов на длительные процессы (AWK, DD)
  • Процесс не закрывается на сломанной трубе
  • Нет подсказки индикатора bash после завершения разветвленного процесса
  • Показать использование ядра ЦП для родительского процесса и его дочерних процессов
  • подозрительная активность на сервере?
  • Linux и Unix - лучшая ОС в мире.