Mongrel не использует полную мощность процессора на сервере Windows 2003 - PullRequest
0 голосов
/ 23 марта 2012

У меня есть развертывание, использующее: рельсы 2.3.2 рубин 1.8.7 MySQL БД а также 3 экземпляра mongrel (службы windows) с apache в качестве балансировщика нагрузки [Я знаю, что это для обновления ...]

ОС: Windows2003

У нас много задач с интенсивным использованием ЦП, и когда они выполняются на 4-ядерном компьютере, процесс mongrel может использовать максимум 25% процессорной мощности на ядре, для которого была запланирована задача. После выполнения многих тестов мы заметили, что он может использовать только мощность одного ядра, и поэтому при выполнении задач существует задержка во времени.

Есть предложение виртуализировать ... что сложно сделать на клиентском сервере. Кто-нибудь получил какие-либо предложения о том, как можно улучшить ситуацию? Объем памяти для этого процесса достигает 250 МБ - 1 ГБ, но это не такая большая проблема.

Заранее спасибо Линус

1 Ответ

0 голосов
/ 27 марта 2012

Обычно используемые версии Ruby (MRI или YARV, то есть 1.8 или 1.9) не могут использовать более одного ядра одновременно.МРТ однопоточный и просто обеспечивает зеленые нити внутри.YARV использует реальные потоки ОС, но имеет GIL (глобальную блокировку интерпретатора), которая обеспечивает одновременную работу только одного потока.

Таким образом, ваши шавки не могут использовать более одного ядра каждый (даже еслизакодировал ваше Rails-приложение для обеспечения безопасности потоков).Существуют альтернативные реализации Ruby, такие как JRuby или Rubinius, которые предоставляют собственные потоки без глобальной блокировки интерпретатора и, таким образом, позволяют вашему приложению использовать более одного ядра, но вам, вероятно, придется немного адаптировать свое приложение.Тем не менее, даже тогда один запрос будет выполняться в одном потоке и, следовательно, использовать только одно ядро.Но это трудно понять, если вы не будете обрабатывать свои собственные потоки (или, по крайней мере, волокна в 1.9), что, скорее всего, не стоит хлопот.

Поэтому обычно рекомендуется запускать несколько серверов приложений.процессы (шавки в вашем случае).Я лично использую около 1,5 - 3 на ядро ​​(в зависимости от приложения).Таким образом, вы сможете отвечать на множество параллельных запросов и в полной мере использовать доступную мощность процессора, разделяемую между ними.

...