Как отслеживать некоторую периодическую активность системы, которая препятствует производительности в реальном времени

334
Dmitry Vyal

Я использую Jack2 с Pianoteq-5 на двухъядерном ноутбуке с 64-битной версией Ubuntu-14.04. Такие конфигурации очень чувствительны к производительности в реальном времени из-за требований низкой задержки. Сначала я слышал постоянные щелчки, которые в основном исчезали, когда я настраивал /etc/security/limits.conf, чтобы включить возможность RR для аудиогруппы.

Так что теперь и у Джека, и у Pianoteq есть потоки с классом планирования SCHED_FIFO. Я могу запустить jack с буфером размером 128 сэмплов, и он работает в большинстве случаев без сбоев. Я говорю «большинство», потому что каждые пару минут что-то разрушает рай. Я слышу целое скопление ужасных трещин. Я подозреваю, что это результат какой-то высокоприоритетной деятельности, начинающейся на заднем плане. Но как отследить, кто виноват?

0
Похоже, наконец-то я нашла главного виновника. Это был менеджер сети, запускающий периодическое обнаружение сетей Wi-Fi или что-то в этом роде. Я не исследовал это далее, но отключение Wi-Fi помогает чрезвычайно. Dmitry Vyal 9 лет назад 0

1 ответ на вопрос

1
ben

Вот один из способов сделать это. Создает много файлов, но я не могу придумать другой способ сделать это.

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

Первый способ: используйте sysstat и собирайте статистику каждые 5 минут (это займет около 8 МБ в день). Ваша запись в cron будет выглядеть примерно так: 5 * * * * / usr / lib / sa / sa1
или 5 * * * * / usr / lib64 / sa / sa1

sysstat будет хранить до месяца данных. Но вы всегда можете скопировать файлы и заархивировать их.

Вы бы использовали команду "sar", чтобы просмотреть исторические данные, чтобы увидеть, когда ваш сервер был занят.

Теперь, когда у вас есть исторические данные на вашем сервере, вам также нужно захватить выходные данные процесса, чтобы вы могли видеть, что работает в данный момент. Вы можете использовать «PS» или «Top» для этого

Таким образом, каждые 5 минут вы также можете записывать выходные данные top и ps auxww, чтобы вы могли видеть все запущенные процессы. Я бы создал два подкаталога "toparchive" и "psarchive", а затем поместил их в качестве моих рабочих мест cron.

5 * * * * top -b -n 1 > /root/toparchive/top.`date +"%Y%m%d_%H%M%S"` 

или же

5 * * * * ps auxww > /root/psarchive/ps.`date +"%Y%m%d_%H%M%S"` 

(это будет много файлов, в качестве альтернативы вы можете написать его так, чтобы у вас были дополнительные подкаталоги с меткой даты, например / root / toparchive / 20140701 /)

Но в основном следите за своим sysstat, и вы можете узнать, когда ваш сервер занят, а затем проверить соответствующий вывод top или ps, который вы захватили, чтобы увидеть, что заняло ваше пространство

Если процесс загружает память, вы можете дополнительно использовать «pmap» и «pgrep» для просмотра текущих процессов и фактического использования памяти.

Ну, так как это рабочая станция, и я наблюдаю такое поведение почти каждую минуту, вероятно, будет достаточно обычных часов. Спасибо за идею! Dmitry Vyal 9 лет назад 0
Использование top будет первой частью, и вы сможете получить представление о том, какие ресурсы используются наиболее интенсивно. Вы все еще можете использовать sar, чтобы увидеть, является ли узкое место ЦП, памятью, вводом-выводом и т. Д. Скорее всего, если что-то ломит ваш сервер, когда вы используете «top», вы увидите этот процесс вверху «top»;) Хорошо удачи! ben 9 лет назад 0