Почему мой RPC-сервер использует 5-кратный процессор при переходе на более новое ядро Linux?
Мы вроде как наткнулись здесь на стену, поэтому я подумал, что стоит спросить на этом сайте.
У нас есть процесс Java, который обслуживает старые RPC-подключения Sun в качестве уровня совместимости в новой системе. На старых машинах SuSE (2007 Xeon с 2.6.16) все работало просто отлично. В то время как мы пытались перейти на более современную платформу Xeon E5-2670 с RHEL 2.6.32, процесс выполняется, но он привязывает все процессоры под нагрузкой и отвечает МЕДЛЕННО, чем предыдущий комплект. Загрузка на стороне клиента одинакова, мы используем более быстрый серверный диск, такое же количество физических ядер (хотя теперь x2 из-за гиперпоточности), ту же оперативную память (которая не голодает и не переставляется).
Профилирование на самом деле ничего не показывает. Было некоторое подозрение о том, что диск работает медленнее из-за записи журналов (раньше был ext3 на старых, теперь ext4+acl), но это, кажется, не большая проблема, и "загрузка журналов" такая же. iostat, netstat все выглядит нормально.
Я подозреваю, что что-то изменилось в обработке RPC между ядрами, но, кажется, трудно найти много информации, так как (я предполагаю) связь типа Sun RPC сегодня не так популярна.
Какие-нибудь мысли? Я не ожидаю, что кто-то обязательно решит проблему, так как я не могу рассказать об этом слишком много, но, возможно, указатели на то, на что обратить внимание, чтобы диагностировать RPC и издержки ядра?
Спасибо!
2 ответа
Похоже, что проблема связана с прозрачным функционалом ядра страницы. Я не уверен в полных технических деталях, но достаточно сказать следующие три команды, чтобы отключить это исправленные вещи:
echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo never > /sys/kernel/mm/transparent_hugepage/enabled
Загрузка процессора снизилась до того уровня, который был у нас до перехода на новое ядро.
Надеюсь, что это поможет кому-то еще, так как я не смог найти в интернете чертову информацию о RPC, которая не была связана с NFS!:-)
Проверьте свой код на время пока-сна и замените его фактическим сном + проверьте конфигурацию вашего ядра.