Загрузка ЦП низка, но выменены процессы, а заблокированные процессы высоки
Мы сталкиваемся с периодическими периодами 100% загрузки ЦП.
Конфигурация сервера:
HP DL580 G7 (4 процессора по 8 ядер в каждом; 128 ГБ памяти.)
Операционная система: Solaris 10_x86 обновление 9
Приложение: Oracle 10 R2; ASM для управления дисками. Размер БД 5 ТБ; SGA 78GB
Подсистема хранения: HP MSA2312sa с двойным контроллером SAS с прямым подключением
В обычный день (загрузка ЦП 20%) вывод vmstat представлен ниже
Неисправности диска на странице памяти KTHR
своп свободный своп рф п по ф дэ ср с0 с1 с2 с3 в системе
0 27 26 128133040 6469184 362 4937 829 3 22 0 117 -0 4 0 97 85888 383138 19238 19 2 79
0 20 31 129089972 4009408 294 4341 28 0 0 0 0 0 2 0 96 144240 363898 27797 12 5 82
1 17 31 128869152 3731692 243 4437 0 0 0 0 0 0 6 0 88 142738 385237 26503 10 5 84
1 21 31 128803936 3665112 283 5545 111 0 0 0 0 0 3 0 102 157962 347356 26940 12 5 82
2 20 31 128556548 3515596 274 10806 0 0 0 0 0 0 6 0 99 253881 391554 34754 13 7 80
Сводка процессов:
Процессы очереди выполнения - 0 ~ 2 заблокированных процесса - 17 ~ 27 процессов с заменой - 31
Сводка загрузки ЦП:
Пользователь - 10%~20% Система - 2%~7% В режиме ожидания - 79%~85%
Что может быть причиной такого нерационального поведения процессора?
Почему заблокированные процессы (b) и процессы вытеснения (w) намного выше запущенных процессов (r)?
Мы смотрим на узкое место процессора, узкое место в памяти или узкое место ввода-вывода?
Мы выполняем резервное копирование Oracle RMAN, но резервное копирование выполняется каждый день в 4 часа утра.
В то время как загрузка ЦП достигает 100% в обычные рабочие часы (с 10:00 до 18:00), фоновые резервные копии в этот период не выполняются.
Что касается больших запросов, мы выполняем довольно длинные и сложные запросы. Эти запросы выполняются каждый день, и загрузка ЦП едва превышает 40%, но за последнюю неделю мы наблюдаем короткие всплески загрузки ЦП на 100%.
4 ответа
Испытываете ли вы 100% загрузку всех 32 процессорных ядер или только нескольких? Я не могу говорить о статистике, которую вы опубликовали, поскольку она довольно нечитаема, но я попытаюсь дать некоторые общие ответы на то, что вы испытываете:
Заблокированные / выгруженные процессы Иногда процессы в серверной ОС связываются с конкретным ядром ЦП и используют ТОЛЬКО это ядро для любых задач, игнорируя все остальные ядра. Как правило, это более серьезная проблема для более старых программ, которые не предназначены для работы в многоядерных системах. Конечный результат - если у вас есть несколько процессов, которые делают это, и они решили использовать одно и то же ядро, они будут постоянно блокировать и заменять друг друга, чтобы делать то, что им нужно, в то время как другие ядра простаивают, ничего не делая. Иногда вы можете настроить программное обеспечение для выбора определенных ядер и вручную "сбалансировать" нагрузку на ваши процессоры (аналогично ручным настройкам IRQ в тот день), но это, очевидно, нежелательно, так как требует ручной настройки с вашей стороны, и вы может привести к тому, что все ухудшится. Выясните, какие процессы блокируют друг друга, и сосредоточьтесь на них. Я сомневаюсь, что у вас узкое место в процессоре с 32 ядрами, но я также не могу сказать наверняка. Прочтите документацию по процессам / программному обеспечению, чтобы узнать, что рекомендует поставщик, и можете ли вы даже настроить процесс для этого.
Заблокированные / выгруженные процессы выше, чем запущенные процессы Вероятно, происходит то, что ваш счетчик производительности просто срабатывает каждый раз, когда процесс блокируется / выгружается и не показывает ТЕКУЩИЕ заблокированные / поменяемые процессы, поэтому он всегда должен быть выше, чем ваши запущенные процессы (что и говорит - количество запущенных в настоящее время процессов в вашей системе). Это не должно быть проблемой.
У вашей виртуальной машины столько же процессоров, сколько у хост-системы? если это так, то это плохо, и это может помешать правильной работе планировщика. То есть, если у вас 8-ядерная система, то ни в одной системе на этом компьютере не должно быть назначено 8 ядер. Вы можете иметь 20 виртуальных машин с назначенными 4 ядрами, и это не проблема, но 1 блок с назначенными 8 ядрами может вызвать проблемы под нагрузкой.
На первый взгляд, ваша система испытывала острую нехватку оперативной памяти в прошлом. Средняя частота сканирования с момента последней загрузки составляет 117, в то время как она должна быть равна 0 или близка к ней в системе с достаточным объемом ОЗУ. Похоже, это подтверждается вашей колонкой 31 w, что, вероятно, означает, что 31 демон был заменен во время нехватки памяти и никогда не возвращался без использования.
Есть ли у вас какие-либо автоматизированные процессы резервного копирования или что-то, что могло бы перебивать диски? Это звучит смутно, как будто у вас проблемы с IOwait. Можете ли вы получить снимок mpstat, когда ваш сервер недоволен? Вы могли бы, вероятно, исключить проблему дискового ввода-вывода, выполнив небольшие записи 5 ГБ на диск или что-то в режиме DIRECT_IO (чтобы обойти тот факт, что на этом сервере можно кэшировать половину земли в свободной памяти). Кроме того, пытались ли вы (если можете) изучить ваши запросы в течение этого времени? Может быть, кто-то хлопает вас кучей полноиндексных сканирований или что-то в этом роде?