При возникновении неполадки, связанной с производительностью, рекомендуется оценить возникшую ситуацию и сузить круг возможных причин.
Эти вопросы могут показаться тривиальными, но ответы на них очень важны:
Если программа работает медленно лишь с недавних пор, причиной снижения производительности могут быть последние изменения.
Если это так, обратитесь за помощью к создателю программы или ее поставщику.
Если был перемещен один из файлов, с которыми работает программа (в том числе и сам исполняемый файл), то задержки могут быть вызваны необходимостью передачи данных по сети. Другой вариант - конфликт между двумя файлами, которые ранее были расположены на разных дисках.
Если администратор изменил параметры конфигурации системы, на выполнение программы могли быть наложены дополнительные ограничения. Например, если приоритеты программ были изменены командой schedtune -r, то быстродействие приложений, выполняемых в фоновом режиме, могло понизиться, а быстродействие интерактивных приложений - повыситься.
Хотя интерпретируемые языки ускоряют и облегчают создание программ, эти программы невозможно оптимизировать при компиляции. Кроме того, на языке, подобном perl или awk, очень просто составить программу длиной в несколько строк, выполнение которой потребует огромного количества операций ввода-вывода и значительных ресурсов процессора. Часто в таких случаях можно ограничиться визуальной проверкой исходного текста программы, подсчитав число неявных итераций, выполняемых для каждого оператора.
Файловая система резервирует часть системной памяти для хранения страниц файлов, к которым возможны последующие обращения. Если дважды с небольшим интервалом запустить одну и ту же программу, которая только обменивается данными с диском, то, как правило, во второй раз она будет выполняться быстрее. Это относится и к программам, применяющим NFS. Аналогичный эффект может наблюдаться и при работе больших программ, таких, как компиляторы. Даже если программа не обращается к диску, во второй раз она может выполняться быстрее за счет того, что часть исполняемого кода программы осталась в памяти и не нуждается в загрузке.
Инструкции по выполнению этой задачи приведены в разделе Определение ресурсов, ограничивающих производительность.
Многие сталкиваются с падением производительности в "часы пик", то есть когда большое количество пользователей в организации интенсивно работают с системой. Это явление не всегда вызвано только повышенной нагрузкой. Иногда снижение производительности в "часы пик" может говорить о несбалансированности системы, которая проявляется только при высокой нагрузке. Следует рассмотреть и другие причины повторяющейся неполадки.
Если вы обнаружили, что причина падения производительности заключается в конфликте между интерактивными процессами и фоновыми программами, рассчитанными на длительное выполнение и расходующими большой объем ресурсов CPU, необходимо повысить приоритет интерактивных процессов с помощью команды schedtune -r -d. См. раздел Настройка вычисления приоритета нити.
В этом случае рекомендуется воспользоваться программой обнаружения перегрузок, например, программой filtd (компонент PTX). При возникновении перегрузки демон filtd может запускать указанный сценарий оболочки или собирать заданную информацию. Вы можете самостоятельно создать аналогичный инструмент с помощью сценариев оболочки, содержащих команды vmstat, iostat, netstat, sar и ps commands.
Если снижение производительности отмечено только в одной системе распределенной среды, можно предположить, что ресурсы захвачены одной программой, или что случайным образом конфликтуют два процесса.
Иногда возникают ситуации, когда система игнорирует одного из пользователей.
# time cp .profile testjunk фактическое 0m0.08s польз. 0m0.00s сис. 0m0.01s
После этого запустите те же команды от имени пользователя, в работе которого не было отмечено никаких изменений. Будет ли разница в фактическом времени?
При переходе от автономных систем к распределенным системам часто возникают одни и те же проблемы. Их причиной, как правило, является стремление пользователей настроить отдельную систему согласно своим требованиям, или использование функций, потребляющих много ресурсов. Помимо настройки максимального размера блока передачи (MTU) и размера mbuf в конфигурации локальной сети (соответствующие инструкции содержит Глава 9. Отслеживание и настройка ввода-вывода в подсистеме связи), администратор должен убедиться, что сетевые ресурсы используются эффективно.
При всплеске сетевой активности может существенно снизиться производительность всех систем сети, даже тех, которые почти не работают с сетью. Это происходит вследствие резкого увеличения количества прерываний и расхода ресурсов CPU на прием и обработку пакетов. Отслеживать и анализировать подобные ситуации лучше с помощью устройств диагностики сети, а не с помощью обычных инструментов анализа производительности.
При использовании системы в качестве маршрутизатора значительный объем ресурсов CPU будет тратиться на обработку и копирование пакетов. Кроме того, между процессами, обрабатывающими пакеты, и остальными процессами будут возникать конфликты. Для соединения локальных сетей рекомендуется применять специально предназначенные для этого аппаратные маршрутизаторы и мосты: они дешевле и надежнее.
На некоторых этапах создания распределенной системы файловая система NFS применяется для того, чтобы пользователи в новых системах сохраняли доступ к своим домашним каталогам, расположенным в старых системах. Это упрощает переход к распределенной системе, однако требует передачи больших объемов данных по сети. Если пользователи из системы А работают преимущественно с данными, хранящимися в системе В, то это должно быть известно системному администратору.
При доступе к файлам через NFS значительно увеличивается нагрузка на сеть, расход процессорного времени на клиенте и на сервере, а также время отклика конечного пользователя. Всегда следует стремиться к тому, чтобы пользователь работал в той системе, в которой хранятся его данные. Исключение составляют ситуации, когда работа с данными в удаленной системе оправдана, например, если централизованное хранение данных необходимо для повышения надежности и управления резервным копированием, или если необходимо гарантировать, что все пользователи работают с самой последней версией программы.
Если по этим или другим соображениям необходимо сохранить определенный уровень обмена данными между клиентом и сервером NFS, лучше выделить для этих целей отдельную систему-сервер, чтобы несколько систем не совмещали в себе функции клиента и сервера.
Простейший способ переноса программы в распределенную среду - замена вызовов программ демонами RPC в соотношении 1:1. Однако при замене вызова локальной программы на RPC производительность может снизиться даже больше, чем при замене операций ввода-вывода с локальным диском на операции ввода-вывода в NFS. Если демоны RPC действительно необходимы, их следует по мере возможности объединять в пакетные вызовы.
Если время от времени снижается производительность программ, использующих некоторое устройство или службу, ознакомьтесь с разделом, посвященным этому устройству или службе:
Убедитесь, что эта служба или устройство настроены в соответствии с рекомендациями, приведенными в руководстве пользователя и соответствующем разделе "Отслеживание и настройка" этой книги.