Как отслеживать и регистрировать использование памяти / процессора процессами с течением времени? [закрыто]

30

Я ищу способ диагностики проблем, таких как смерть подкачки, при которой вздувающийся процесс памяти заполняет подкачку и убивает всю машину (например, apache).

Я уже использую cacti, и я могу настроить nagios (хотя и не очень) или munin, но, насколько я могу судить, они не могут записывать использование отдельных программ - только общий статус.

Я знаю, что могу бросать скрипт, который >> в какой-то файл, каждые 30 с, но я хотел бы посмотреть, существует ли уже существующее зрелое решение.

Опять же, в идеале это будет:

  • записывать использование памяти процессами каждые N секунд
  • записывать использование процессора процессами каждые N секунд
  • графики поддержки и история
  • средние значения поддержки - как, например, mysqld использовал 43% ЦП в последний день и в среднем 400 МБ памяти
  • быть свободным и открытым исходным кодом

Имена процессов не известны и не должны быть известны заранее. Идея состоит в том, чтобы просто позволить ему отслеживать, а затем взглянуть на главных нарушителей.

Моя система Linux (OpenSUSE).

Артем Руссаковский
источник
Хотите ли вы отслеживать какой-либо процесс, который может иметь утечку памяти (N верхних строчек памяти), или вы хотите контролировать определенный набор процессов (например, веб-сервер Apache и процесс Tomcat)? Последний выполним с некоторыми простыми плагинами Nagios или Cacti. Первый сложнее. Вы должны уточнить это.
Стефан Ласевски
Я уже разъяснил это в посте, но еще раз уточню: я хочу знать состояние системы, когда она выходит из строя из-за смерти подкачки. Я хочу знать, кто худшие преступники. И, между прочим, это не должно быть утечка памяти - просто приток трафика, или что-то еще, что вызывает высокое использование памяти. Итак, опять же, предварительное знание двоичных имен не должно быть настроено.
Артем Руссаковский
возможно дубликат - serverfault.com/questions/67234/...
садок
Уоррен, это совершенно другой вопрос.
Артем Руссаковский
8
Закрытие такого поста хорошего качества было плохой вещью, особенно через 4 года задним числом.
Петер говорит восстановить Монику

Ответы:

16

Если вы хотите, чтобы только лучшие нарушители, рассмотрите возможность работы topс относительно длинным интервалом (60 секунд плюс) в пакетном режиме. Вам может потребоваться более одного topзапуска, чтобы захватить главных нарушителей на нескольких ресурсах. Я настроил системы для работы topв течение нескольких циклов, когда ресурс был чрезмерно использован.

Рассмотрите возможность работы sarв пакетном режиме для отслеживания использования ресурсов. Я понимаю, что это на основе сервера, но полезно определить время, когда возникают проблемы.

Запустите muninи включите уведомления. Это может дать вам шанс войти и посмотреть, как работает сервер. Возможно, вы сможете исправить проблему, прежде чем она решится.

Для утечек памяти устойчивое увеличение использования свопа указывает на проблему. Однажды я наблюдал, как сервер медленно умирает в течение нескольких дней. Проблемной службой была программа, отслеживающая другие процессы на предмет утечек памяти. Системный администратор настаивал на том, что увеличение использования свопа не было проблемой, вплоть до тех пор, пока сервер не перестал отвечать.

Вы можете обнаружить, что cfengineобнаружение аномалий может быть использовано для запуска сценария, который фиксирует состояние системы, когда что-то идет не так. Вам может понадобиться много информации, помимо процессов, использующих наибольшее количество ресурсов. Для внезапного притока пользователей может потребоваться список сетевых подключений (по адресу, а не по имени). Использование памяти также полезно.

BillThor
источник
12

sysstat сделан в значительной степени именно для ваших целей.

Питер Айзентраут
источник
Это где вы должны начать. Вы не можете знать, где начать экзамен, пока не знаете, где у вас больше всего шансов. Sysstat - это то, что вы ищете (также есть красивые графики). Как только вы узнаете больше, используйте systemtap.
Аллен
9

Я использовал поверх:

http://freshmeat.net/projects/atop/

«Atop - это полноэкранный монитор производительности ASCII, способный отчитываться о активности всех процессов (даже если процессы завершены в течение интервала), ежедневно регистрировать активность системы и процессов для долгосрочного анализа, выделяя перегруженные системные ресурсы с помощью цвета и т. д. Через регулярные промежутки времени он показывает активность на уровне системы, связанную с процессором, памятью, подкачкой, дисками и сетевыми уровнями, и для каждого активного процесса показывает загрузку процессора, рост памяти, приоритет, имя пользователя, состояние, и код выхода. "

NinjaCat
источник
наверху, кажется, нет отчета, который предоставил бы мне то, что я хотел. Пожалуйста, поправьте меня, если я ошибаюсь.
Артем Руссаковский
Он заботится о ваших первых двух пунктах (память / процессор по процессам). Вы можете использовать библиотеку для сбора этой статистики, а затем делать свою историю / графики на основе данных.
NinjaCat
4
@ artem-russakovskii - по умолчанию поверх записывает данные в файл каждые десять минут. Если ваш сервер вышел из строя в 3:45, вы можете начать с него сверху atop -r log_filename, нажмите, mчтобы переключиться на представление использования памяти для каждого процесса, а затем нажмите, tчтобы двигаться вперед с шагом 10 минут до 3:40. Вы можете прочитать больше об основах использования atop на lwn.net/Articles/387202 и посмотреть пример определения утечки памяти на atoptool.nl/download/case_leakage.pdf
sciurus
6

Вы пробовали коллекционировать?
Это очень мощный и настраиваемый.
Имеет много плагинов и может быть интегрирован с nagios.

http://collectd.org/features.shtml

PiL
источник
Collectd очень легок, не слишком сложен в настройке и позволит вам со временем увидеть рост памяти / подкачки. Тем не менее, он не будет точно определять нарушающие процессы, но, возможно, вы сможете вовремя заметить и заметить рост памяти и вручную проверить ситуацию top.
Мариус Гедминас
1
Я должен сказать, что я не пробовал этот плагин, но читал из руководства по плагину процесса collectd: «Если процессы выбраны, собирается следующая информация. Вся эта информация агрегируется по имени процесса. Размер резидентного сегмента, Используемое пользовательское и системное время, Число процессов с этим именем, Количество потоков (суммированных по всем процессам), Количество основных и второстепенных сбоев страниц. Грубые числа ввода / вывода (байты записаны и прочитаны из-за к системным вызовам процессом).
PiL
Вы можете выбрать процессы или по имени или по регулярному выражению.
Пил
2

Centreon в верхней части Nagios, Nagios в сочетании с NRPE. Затем вы можете написать собственные сценарии для сообщения данных в ЛЮБОМ формате, который вы хотите использовать в NRPE. Затем Nagios опрашивает данные с удаленных серверов с помощью NRPE, а Centreon создает симпатичный график и добавляет массу пользовательских возможностей. Мы используем его на http://beyondhosting.net. У меня уже есть шаблон контейнера VZ с настройкой centreon + nagios, если вы этого хотите.

Графики Centreon строит hostthenpost.org/tyler/2010-07-23_1719.png

VisBits
источник
Я хотел бы получить готовое решение для того, чтобы сообщать о вещах, которые я упомянул, а главное о процессах, которые занимают больше всего памяти. Я также не уверен, что такое VZ.
Артем Руссаковский
2

Nmon это отличный инструмент, который делает то, что вы ищете. Разработано для AIX и Linux. Производит тонну подробного вывода и легко помещается в отчеты. Если вы гуглите, есть вики-страница IBM, в которой есть куча документации и дополнительные утилиты для анализа данных.

mattcaffeine
источник
2

Плотность сервера делает именно то, что вы описываете.

Я использую его на одном из наших производственных серверов и очень рад этому. Его главной особенностью является возможность просмотра графиков, щелчка по пику и просмотра потребления ЦП / памяти сервера в текущий момент времени, включая все запущенные процессы. Они называют это снимками .

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

Арон Роттвил
источник
1
Ах, я забыл упомянуть маленькую часть, где я бы предпочел, чтобы она была бесплатной и с открытым исходным кодом, если это возможно. Более 100 долларов на сервер - это не то, что я собираюсь потратить (а у меня только 1 сервер, а не 5). serverdensity.com/pricing
Артем Руссаковский
2

Ответы предложили, когда я задал похожий вопрос :

Икапан сказал :

Munin - это самый простой способ получить графики работоспособности с минимальными усилиями при установке и настройке. Я также использую поверх для совокупного использования процессора каким-то процессом, но это не то, что Вы просили.

Дэвид Спиллет сказал :

Я использую collectd для записи загрузки системы среди ряда других параметров. Он хранит данные в хранилищах RRD, которые могут быть получены и проанализированы с помощью множества доступных инструментов и сценариев. Я использую модифицированную версию этого скрипта для своих графиков ( пример вывода ).

У Collectd есть плагины для мониторинга большого количества вещей (все, что обычно требуется, и нескольких вещей сверху), и создание собственного не должно быть сложным, если вам нужно что-то специализированное, поэтому это очень гибкий инструмент. Конфигурирование графиков в rrd.cgi - это очень ручной процесс, хотя и не сложный, хотя вы можете найти более удобный инструмент для работы с файлами RRD, поддерживаемыми collectd.

Вы также можете проверить Nagios или OpenNMS .

кроличий садок
источник
1

Munin сделает все, что вам нужно, из коробки, не требуя Nagios или какого-либо другого инструмента. Для OpenSUSE доступны RPM.

gareth_bowles
источник
Это делает это с плагином. Если да, то какой? Я не смог найти тот, который не требует предварительно настроенного списка процессов для мониторинга.
Артем Руссаковский
Из вашего первоначального вопроса не было ясно, что вы не хотите отслеживать предварительно сконфигурированный список процессов. Можете ли вы предоставить более подробную информацию о ваших требованиях?
gareth_bowles
Пояснение: имена процессов не известны и не должны быть известны заранее. Идея состоит в том, чтобы просто позволить ему отслеживать, а затем взглянуть на главных нарушителей.
Артем Руссаковский
1

Может, старый добрый OProfile делает то, что вам нужно? Это основанный на ядре профилировщик системного уровня с небольшими (пару процентов) издержками.

Тогда есть отличный Perl-скрипт PSMon , который позволяет вам устанавливать все виды ограничений ЦП / памяти. Если они превышены, psmon зарегистрирует ошибку и / или завершит процесс, вызвавший ошибку.

Последний не будет выдавать вам никаких отчетов о профилировании, но если он решит убивать один и тот же процесс снова и снова, вы, вероятно, найдете мерзкого ублюдка, которого искали. :-)

Янне Пиккарайнен
источник