Назад | Перейти на главную страницу

Почему серверы не всегда работают на максимуме?

Это вопрос, который беспокоит меня некоторое время, и я не могу найти в Интернете ничего, что бы об этом говорилось. У меня есть сервер под управлением VMware Hypervisor ESXi. Когда я загружаю на нем виртуальные машины, они обычно загружаются через 2-3 минуты; не очень долго, но не мгновенно. Однако, когда я смотрю журналы производительности на сервере, ни процессор, ни оперативная память, ни диск не используются примерно на 100%; обычно они в среднем составляют около 60% -80%. Итак, если серверу есть над чем поработать, почему он не делает это на 100%?

Мне кажется, что в любой момент ограничивающий производительность компонент должен работать на 100%. Например, если у меня очень медленный жесткий диск, он почти всегда должен работать на 100%. Следовательно, по крайней мере одна из областей (процессор, ОЗУ, диск и сеть) всегда должна быть на 100%, если сервер не находится в полном режиме ожидания.

Почему это не так?

Задержка будет одной из причин. Задержка между «диск предоставит мне эти данные, которые мне нужны, прежде чем я смогу сделать что-нибудь еще» и моментом, когда данные вернутся, оставит ЦП на это время бездействующим.

Ресурсы, вероятно, работают на 100%, но на очень короткие периоды. Загрузка операционной системы будет происходить по общему шаблону «обработать или решить что-то, извлечь что-то с диска, сделать что-то в памяти, сделать что-то с устройством», повторяясь много раз в секунду. Поэтому, когда вы видите, что диск работает на 25% в течение 2 секунд, это, вероятно, означает, что он работал на 100% в течение 0,5 секунды, а остальное время бездействовал.

Как отмечает EEAA, многоядерные системы делают это немного сложнее. Однопоточная часть программного обеспечения на ЦП, которая может выполнять четыре потока, может работать только на 25% на полной скорости. Даже многопоточное программное обеспечение редко может достичь 100%, потому что данные должны (обычно) перетекать с жесткого диска в оперативную память, в кэш и в ЦП. Сохранить этот конвейер заполненным сложно, и, как правило, это происходит с предсказуемыми рабочими нагрузками, такими как кодирование видео. В этом случае операционная система может наблюдать шаблоны чтения и извлекать данные до того, как они потребуются, помещая их в соответствующие кеши, такие как дисковый кеш в ОЗУ.

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

Во-первых, и, возможно, наиболее просто, в многоядерной системе, чтобы понять использование ЦП, вы должны принять во внимание, является ли нагрузка процесса многопоточной и рассчитана ли она на использование преимуществ нескольких ядер. Если это не так, то в зависимости от сочетания запущенных процессов вы никогда не сможете увидеть 100% использование. Когда-либо.

Во-вторых, необходимо учитывать производительность устройства ввода-вывода. Как ваша система, например, узнает, на сколько операций ввода-вывода могут выполнять ваши устройства? Это не так. Более значимый показатель для вас - это ваш iowait значение во время загрузки (которое может быть трудно получить во время процесса загрузки) или дисковые очереди / задержка во время загрузки (что должно быть легче получить из вашего гипервизора). Если вы видите очереди или всплеск задержки, скорее всего, ваши устройства ввода-вывода являются фактором, способствующим вашим проблемам с производительностью.

Я работаю с сервером около 20 лет. Обычно это не очень хорошо, когда компонент все время работает на 100%.

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

Если ваша база данных составляет 24 ГБ, а ОС требует 8 ГБ, вы не хотели бы выделять для машины только 32 ГБ ОЗУ, есть много «вещей», которые могут пойти не так, как плохой код, DDOS, интенсивное использование приложений, кто знает, не имея места для головы, как узнать, что сервер в беде?

У нас около 2000 серверов в нашем центре обработки данных, нам нравится видеть, что все они работают примерно на 75% CPU и RAM, пространство жесткого диска находится в нашей SAN, так что это совершенно другой шар из воска. У нас также есть предупреждения, чтобы сообщить нам, когда они достигают 85% ЦП или ОЗУ, и сигналы, чтобы сообщить нам, когда они достигают 90%.