Команда vmstat
В первую очередь нужно вызвать команду vmstat, которая предоставляет краткую информацию о различных ресурсах системы и связанных с ними неполадках, приводящих к снижению производительности.
# vmstat 2
нити память страница ошибки cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
1 0 22478 1677 0 0 0 0 0 0 188 1380 157 57 32 0 10
1 0 22506 1609 0 0 0 0 0 0 214 1476 186 48 37 0 16
0 0 22498 1582 0 0 0 0 0 0 248 1470 226 55 36 0 9
2 0 22534 1465 0 0 0 0 0 0 238 903 239 77 23 0 0
2 0 22534 1445 0 0 0 0 0 0 209 1142 205 72 28 0 0
2 0 22534 1426 0 0 0 0 0 0 189 1220 212 74 26 0 0
3 0 22534 1410 0 0 0 0 0 0 255 1704 268 70 30 0 0
2 1 22557 1365 0 0 0 0 0 0 383 977 216 72 28 0 0
2 0 22541 1356 0 0 0 0 0 0 237 1418 209 63 33 0 4
1 0 22524 1350 0 0 0 0 0 0 241 1348 179 52 32 0 16
1 0 22546 1293 0 0 0 0 0 0 217 1473 180 51 35 0 14Этот пример показывает результаты запуска зацикленной программы в многопользовательской системе с большой нагрузкой. Первые три отчета (итоговый отчет был удален) показывают, что система была загружена на 50-55 процентов пользовательскими процессами, на 30-35 процентов - задачами системы, а 10-15 процентов пришлось на задержки ввода-вывода. После запуска зацикленной программы она забирает все свободные ресурсы CPU. Так как зацикленная программа не запрашивает операции ввода-вывода, она может получить все процессорное время, которое не используется другими программами, ожидающими завершения операций ввода-вывода. Кроме этого, такая программа всегда готова забрать ресурсы CPU, когда другой процесс их освобождает. При этом она не обязательно отдаст эти ресурсы другому процессу, так как приоритеты всех фоновых процессов одинаковы. Программа работает примерно 10 секунд (группа из пяти отчетов), после чего система возвращается в обычный режим работы (об этом говорят следующие отчеты команды vmstat).
Оптимальной является ситуация, когда процессор работает 100 процентов времени. Это условие всегда выполняется в однопользовательской системе, если в ней нет конкуренции за процессор. В общем случае, если суммарное время us + sy меньше 90 процентов, то считается, что производительность однопользовательской системы не ограничена ресурсами CPU. Однако если значение us + sy в многопользовательской системе превышает 80 процентов, то некоторые процессы часть времени находятся в состоянии ожидания. Это может отрицательно сказаться на времени ответа и скорости работы приложений.
Для того чтобы узнать, служат ли ресурсы процессора причиной снижения производительности системы, изучите значения, указанные в четырех столбцах cpu и двух столбцах нить (нить ядра) вывода команды vmstat. Кроме того, обратите внимание на столбец ошибки:
- cpu
Распределение времени CPU в течение интервала времени. В столбцах cpu указываются следующие значения:
- us
В столбце us указывается, какая доля времени CPU (в процентах) была затрачена на работу в пользовательском режиме. Процессы UNIX могут выполняться в пользовательском или системном режиме (режиме ядра). При работе в пользовательском режиме процесс выполняется в рамках приложения. Ему не требуются ресурсы ядра для выполнения вычислений, управления памятью и настройки переменных.
- sy
В столбце sy указывается, какая доля времени процессора была затрачена на выполнение процессов в системном режиме. Это значение отражает ресурсы CPU, которые были затрачены на выполнение процессов ядра (kprocs) и других процессов, использующих ресурсы ядра. Для получения доступа к ресурсам ядра процесс отправляет системный вызов, в результате чего он переключается в системный режим. Например, при выполнении операции чтения или записи данных в файл ресурсы ядра применяются для открытия файла, смещения указателя в нужную позицию и последующего чтения или записи данных (если файл еще не загружен в оперативную память).
- id
В столбце id указывается, какую долю времени (в процентах) процессор простаивал, не ожидая завершения локальной операции дискового ввода-вывода. Если ни одна нить не готова к работе (очередь выполнения пуста), то система запускает специальную нить wait, иначе называемую idle kproc. В системе SMP нить wait может быть запущена на каждом процессоре. The report generated by the ps command (with the -k or -g 0) этот процесс указывается как kproc или wait. Если в отчете ps указано, что на эту нить в целом затрачивается много времени, то это означает, что существуют большие промежутки времени, в течение которых ни одна нить не готова к работе и не ожидает запуска. Следовательно, система преимущественно простаивает, ожидая появления новых задач.
- wa
В столбце wa указывается доля времени, в течение которой процессор простаивал, ожидая завершения операции ввода-вывода на локальный диск и на диски NFS. Если во время выполнения процесса wait в системе есть хотя бы одна ожидающая выполнения операция ввода-вывода, то это время рассматривается как время ожидания завершения операции ввода-вывода. За исключением случаев, когда операции ввода-вывода выполняются асинхронно с процессом, процесс блокируется на время выполнения запросов на обмен данными с диском. После выполнения запроса на ввод-вывод процесс снова помещается в очередь выполнения. Чем быстрее выполняется обмен данными с диском, тем большая часть времени CPU будет тратиться на выполнение процессов.
Если значение wa больше 25 процентов, то можно сделать вывод, что дисковая подсистема плохо сбалансирована, либо в системе выполняется очень много дисковых операций ввода-вывода.
Информация о change+ приведена в разделе Получение информации о времени ожидания ввода-вывода.
- us
- kthr
Число нитей ядра в различных очередях, усредненное по секундам интервала опроса. В столбцах нити указывается следующее:
- r
Среднее число активных нитей ядра, включающее число выполняемых нитей и число нитей, ожидающих освобождения процессора. Если данное число превышает количество процессоров, по крайней мере одна нить ожидает освобождения процессора; чем больше таких нитей, тем больше снижается производительность.
- b
Среднее число нитей ядра, которые каждую секунду находятся в очереди ожидания VMM. В это число входят нити, ожидающие ввода-вывода в файловую систему, а также нити, выполнение которых приостановлено из-за перегрузки памяти памяти.
Если процессы в системе приостанавливаются из-за перегрузки памяти, то прирост нитей отражает именно значение в столбце b отчета vmstat, а не число нитей в очереди выполнения.
- p
В выводе команды vmstat -I это значение показывает число нитей, ожидающих выполнение ввода-вывода на устройство с линейным доступом, каждую секунду. Нити, ожидающие выполнение ввода-вывода в файловую систему, сюда не включены.
- r
- faults
Здесь указывается информация об управлении процессами, в том числе число прерываний. В столбцах ошибки содержатся следующие значения:
- in
Число прерываний, поступавших от устройств каждую секунду в течение интервала сбора информации. См. раздел Оценка производительности дисков командой vmstat.
- sy
Число системных вызовов, отправлявшихся каждую секунду в течение интервала сбора информации. Пользовательские процессы получают доступ к ресурсам путем отправки стандартных системных вызовов. Эти вызовы отправляют ядру запрос на выполнение необходимой операции, а также служат для обмена данными между ядром и процессом. Допустимое число системных вызовов в секунду зависит от особенностей конкретной рабочей схемы и ее приложений, а также функций, выполняемых системными вызовами. Однако если значение sy достигает 10000 вызовов в однопроцессорной системе (в системе SMP - 10000 вызовов в секунду для каждого процессора), то рекомендуется провести дальнейшее исследование ситуации. Одной из причин увеличения числа системных вызовов может быть запуск опрашивающей процедуры, например, процедуры select(). Рекомендуется измерить значение sy при выполнении базовых операций в системе, и в дальнейшем применять его для сравнения.
- cs
Число переключений контекста, выполнявшихся каждую секунду в течение интервала сбора информации. Все время работы процессора разделяется на логические кванты времени по 10 миллисекунд. Любая нить выполняется до тех пор, пока не истечет квант времени, пока она не будет замещена нитью с более высоким приоритетом, либо пока она добровольно не передаст управление другой нити. Когда управление передается другой нити, контекст, или рабочая среда, предыдущей нити сохраняется, а вместо него загружается контекст текущей нити. В операционной системе предусмотрена очень эффективная процедура переключения контекста, поэтому на переключение контекста тратится лишь незначительная часть ресурсов. Однако при значительном росте числа переключений контекста, например, когда значение cs становится намного больше скорости дискового ввода-вывода и скорости передачи пакетов по сети, необходимо дополнительно проанализировать ситуацию.
- in