Получение информации об используемых ресурсах
Модератор: SLEDopit
Получение информации об используемых ресурсах
Вопрос: как получить информацию об используемых ресурсах компьютера так, чтобы получить действительно полезную информацию, которая позволит администратору принять решение? Речь идёт о таких ресурсах как оперативная память и ресурсы процессора.
Начнём с памяти. Вот есть такие инструменты как ps, top, htop в выводе которых есть столбцы RES и SHR, в адресное пространство процесса включены разделяемые библиотеки, которые потому и называются разделяемыми, что используются одновременно несколькими процессами, поэтому поле SHR, которое показывает память процесса + память библиотек будет давать необъективную информацию и нужно смотреть поле RES, я правильно рассуждаю?
Самые ресурсоёмкие приложения как правило являются многопотоковыми, то есть, если запущен httpd, то htop покажет около 10 строк htop, я правильно понимаю, чтобы определить сколько httpd жрёт памяти, мне нужно просуммировать все строки httpd по полю RES? Есть ли в линуксе инструменты, аналоги htop, которые умеют делать такое суммирование?
Но самое интересное это с виртуализацией. Вот допустим у меня запущена виртуальная машина KVM, htop показывает несколько процессов qemu-system-x86_64, у каждого из которого в поле RES по 500 Мбайт. Но позвольте, qemu-system-x86_64 - это процесс в userspace, а KVM переводится как Kernel-based Virtual Machine, то есть должен быть некий процесс в пространстве ядра и именно он и должен потреблять гигабайты, почему же htop показывает не его, а qemu-system-x86_64
Начнём с памяти. Вот есть такие инструменты как ps, top, htop в выводе которых есть столбцы RES и SHR, в адресное пространство процесса включены разделяемые библиотеки, которые потому и называются разделяемыми, что используются одновременно несколькими процессами, поэтому поле SHR, которое показывает память процесса + память библиотек будет давать необъективную информацию и нужно смотреть поле RES, я правильно рассуждаю?
Самые ресурсоёмкие приложения как правило являются многопотоковыми, то есть, если запущен httpd, то htop покажет около 10 строк htop, я правильно понимаю, чтобы определить сколько httpd жрёт памяти, мне нужно просуммировать все строки httpd по полю RES? Есть ли в линуксе инструменты, аналоги htop, которые умеют делать такое суммирование?
Но самое интересное это с виртуализацией. Вот допустим у меня запущена виртуальная машина KVM, htop показывает несколько процессов qemu-system-x86_64, у каждого из которого в поле RES по 500 Мбайт. Но позвольте, qemu-system-x86_64 - это процесс в userspace, а KVM переводится как Kernel-based Virtual Machine, то есть должен быть некий процесс в пространстве ядра и именно он и должен потреблять гигабайты, почему же htop показывает не его, а qemu-system-x86_64
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Получение информации об используемых ресурсах
Судя, по выводу htop, нет.
У меня открыт браузер, htop показывает кучу потоков. Цифры в колонках RES и SHR для всех строк
одинаковы и меняются синхронно. Значит, это общий объем для всех потоков.
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение информации об используемых ресурсах
top по умолчанию суммирует потоки.
Добавлено (09:46):
Не должен. Это гипервизор, его дело — обеспечить изоляцию, а не жрать память.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Получение информации об используемых ресурсах
То есть виртуальные машины выполняются вовсе не в гипервизоре?
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение информации об используемых ресурсах
В процессоре они выполняются.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Получение информации об используемых ресурсах
Ну понятно что в процессоре, я имел ввиду, что вся гостевая ос с её процессами выглядит ведь как один процесс в хостовой ос? Чем задачи гипервизора kvm.ko отличаются от задач процесса qemu-system-x86_64? У kvm.ko ведь приоритет при выполнении выше, то есть было бы логичнее ресурсы ему отдать, чтобы виртуальная машина быстрее выполнялась?
Почему тогда в top процессы chromuim-browser у меня отображаются не просуммированными?
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Получение информации об используемых ресурсах
Потому, что это процессы, а не потоки. Потоки в top вообще не видны.
Re: Получение информации об используемых ресурсах
Ну да, процесс от потока отличается тем, что каждый процесс работает в своём отдельном адресном пространстве, а несколько потоков могут работать в едином. Но это не меняет сути вопроса, можно спросить, если ли инструменты, которые умеют делать суммирование потоков, можно, которые умеют делать суммирование и потоков и процессов, суть в том, чтобы просуммировать сущности из которых состоит некая вполне понимаемая единица и понять сколько ресурсов она (единица) потребляет.
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение информации об используемых ресурсах
Тем, что kvm.ko управляет разделением аппаратных ресурсов (т. н. ring -1), а qemu-system-x86_64 запускает систему с использованием этих ресурсов.
С чего Вы взяли?
Потому что это именно разные процессы. Архитектура у него такая.
Добавлено (11:42):
Если попросить (опция -H или интерактивная команда H), то станут видны.
Добавлено (11:45):
Так сформулируйте для начала, как Вы понимаете эту единицу, а потом уже задавайте вопрос. Если, конечно, в процессе формулировки само собой не придёт и понимание ответа.sunny1983 писал: ↑07.06.2020 11:28Но это не меняет сути вопроса, можно спросить, если ли инструменты, которые умеют делать суммирование потоков, можно, которые умеют делать суммирование и потоков и процессов, суть в том, чтобы просуммировать сущности из которых состоит некая вполне понимаемая единица и понять сколько ресурсов она (единица) потребляет.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Получение информации об используемых ресурсах
В выводе top потоков вообще нет, только процесс, потоки суммирует.
В выводе htop потоки видны, как отдельные строки, но цифры общие для всех, стало быть, суммирует.
Я лично таких не знаю, потому что
на самом деле, не очень понимаемая.
У меня открыто несколько вкладок в терминале - это одна единица или несколько?
У меня открыто несколько окон терминала по одной вкладке - это одна единица или несколько?
У меня открыто несколько окон терминала, в которых разное число вкладок - это сколько единиц?
Если задача "суммировать сущности", сущность здесь вроде как одна - терминал.
С другой стороны, можно считать, что отдельная сущность - это окно.
А с точки зрения менеджера процессов картина вообще другая: куча процессов с одинаковым названием.
То же самое с браузером: разные окна, в каждом окне разные вкладки.
Добавлено (11:58):
Да, я знаю, пробовал. Что-то там добавилось, но не очень понятно. В htop это сделано куда наглядней.Bizdelnick писал: ↑07.06.2020 11:40Если попросить (опция -H или интерактивная команда H), то станут видны.
Re: Получение информации об используемых ресурсах
Когда я запускаю top, я вижу несколько процессов с одинаковым cmdline, их стало быть и надо суммировать. Некоторые серверные приложения можно настраивать, например httpd при помощи замены мультипроцессной модели prefork на worker можно сделать web-сервер из многопроцессового многопоточным, но тут интересует не то процессами являются сущности или потоками, а сколько это всё потребляет ресурсов. Вопрос же был получить информацию, чтобы принять решение: всё нормально или нужно выставить более жёсткие лимиты или докупит памяти. То же самое можно сказать о клиентских процессах, таких как chromuim-browser, мне нужна информация о принятии решений, если я увижу, что браузер потребляет более 50% ресурсов, то я докуплю памяти или сделаю вывод, что в данной версии браузера имеют место утечки памяти и сменю браузер.Hephaestus писал: ↑07.06.2020 11:56на самом деле, не очень понимаемая.
У меня открыто несколько вкладок в терминале - это одна единица или несколько?
У меня открыто несколько окон терминала по одной вкладке - это одна единица или несколько?
У меня открыто несколько окон терминала, в которых разное число вкладок - это сколько единиц?
Если задача "суммировать сущности", сущность здесь вроде как одна - терминал.
С другой стороны, можно считать, что отдельная сущность - это окно.
А с точки зрения менеджера процессов картина вообще другая: куча процессов с одинаковым названием.
То же самое с браузером: разные окна, в каждом окне разные вкладки.
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Получение информации об используемых ресурсах
Весьма неоднозначно.
На примере браузера: chromuim-browser создает кучу процессов и чтобы выяснить, сколько потребляет "сущность", нужно просуммировать цифры по всем процессам. Казалось бы, всё просто.
Но если вдруг открыто несколько копий chromuim-browser, тогда просто так суммировать уже нельзя, иначе вы получите объем потребления двух/трех/четырех браузеров, а не одного, причём потреблять они будут не поровну, скорее всего.
Информация не слишком пригодна для принятия решения. Появляются как минимум одно дополнительное условие: должно быть запущено не больше одной копии программы. Суммировать по окнам тоже может не получиться: могут быть дополнительные процессы в фоне (типа всяких лаунчеров). В результате оптимальным может оказаться способ, который есть сейчас.
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение информации об используемых ресурсах
А если эти процессы (для примера, тот же chromium-browser) принадлежат разным пользователям? Или, скажем, какая-нибудь графическая программка запущена в локальной сессии и тем же пользователем по ssh? Надо их суммировать или нет?
Так не всё ли равно, какие процессы сколько жрут в сумме или по отдельности? Общее потребление видно, если память забита — надо что-то делать.
Вообще, конечно, есть критерии, вполне годные для группировки процессов: группы процессов, cgroups и т. п. Для cgroup можно вообще задать лимит потребления памяти. Поизучайте этот вопрос.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Получение информации об используемых ресурсах
Первые ссылки в google говорят, что cgroups - это вообще-то не про то, а про контейнеризацию, но ладно, почитаю.
Нашёл пример. когда суммирование могло бы быть полезным, представьте сервер хостинга, на котором запущены nginx, httpd, mysqld, php-fpm (его на сервере есть в сразу нескольких сборках, для разных версий PHP и с разными конфигурациями). Допустим я запускаю top, вижу несколько строк всей этой радости, где каждый процесс потребляет не более 50 Мбайт и считаю что всё нормально, но при этом не пролистываю вниз, а внизу у меня скажем ещё сотня процессов php-fpm, каждый из которых, вроде бы потребляет всего 20 Мбайт, но их - сотня, поэтому я не вижу, что некий скрипт монополизировал ресурсы.
Вопрос с виртуальными машинами кстати прояснился, top в отличие от htop показал, что qemu-system-x86_64 потребляет 2 Гбайт, ровно столько виртуальной машине и выделено, kvm.ko я упомянул, потому что читал в одной книге, что процессы уровня ядра выполнятся с большим приорететом чем процессы уровня пользователя, но на самом деле я в архитектуре Linux разбираюсь плохо. Кстати вопрос, а где можно посмотреть потребление ресурсов самим ядром?
Нашёл пример. когда суммирование могло бы быть полезным, представьте сервер хостинга, на котором запущены nginx, httpd, mysqld, php-fpm (его на сервере есть в сразу нескольких сборках, для разных версий PHP и с разными конфигурациями). Допустим я запускаю top, вижу несколько строк всей этой радости, где каждый процесс потребляет не более 50 Мбайт и считаю что всё нормально, но при этом не пролистываю вниз, а внизу у меня скажем ещё сотня процессов php-fpm, каждый из которых, вроде бы потребляет всего 20 Мбайт, но их - сотня, поэтому я не вижу, что некий скрипт монополизировал ресурсы.
Вопрос с виртуальными машинами кстати прояснился, top в отличие от htop показал, что qemu-system-x86_64 потребляет 2 Гбайт, ровно столько виртуальной машине и выделено, kvm.ko я упомянул, потому что читал в одной книге, что процессы уровня ядра выполнятся с большим приорететом чем процессы уровня пользователя, но на самом деле я в архитектуре Linux разбираюсь плохо. Кстати вопрос, а где можно посмотреть потребление ресурсов самим ядром?
- Hephaestus
- Сообщения: 3729
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
- Контактная информация:
Re: Получение информации об используемых ресурсах
Вопрос не в том, что оно не может быть полезным.
Вопрос в том, что оно должно делаться в разных случаях по-разному.
Менеджер суммирует то, что имеет смысл суммировать _всегда_.
Остальные варианты суммирования плохо алгоритмизируются, как видите.
- Bizdelnick
- Модератор
- Сообщения: 20794
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Получение информации об используемых ресурсах
Контейнеризация — только одно из их применений.
Нормально всё или ненормально — видно уже по 4 и 5 строчкам вывода, для этого ничего никуда пролистывать не надо.sunny1983 писал: ↑09.06.2020 08:00Допустим я запускаю top, вижу несколько строк всей этой радости, где каждый процесс потребляет не более 50 Мбайт и считаю что всё нормально, но при этом не пролистываю вниз, а внизу у меня скажем ещё сотня процессов php-fpm, каждый из которых, вроде бы потребляет всего 20 Мбайт, но их - сотня, поэтому я не вижу, что некий скрипт монополизировал ресурсы.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |