Por que meu servidor RPC usaria 5x CPU ao migrar para um novo kernel do Linux?

1

Estamos correndo para uma parede aqui, então achei que valeria a pena perguntar neste site.

Temos um processo Java que serve conexões Sun RPC antigas como uma camada de compatibilidade em um novo sistema. Em máquinas antigas do SuSE (2007 Xeon com 2.6.16), tudo funcionou muito bem. Embora tenhamos tentado migrar para uma plataforma Xeon E5-2670 mais moderna com o RHEL 2.6.32, o processo é executado, mas está atrelando todas as CPUs ao carregamento e responde SLOWER em relação ao kit anterior. A carga no lado do cliente é a mesma, estamos usando um disco de servidor mais rápido, o mesmo número de núcleos físicos (apesar de agora x2 devido ao hyperthreading), a mesma RAM (que não está sofrendo de fome ou foi trocada).

A criação de perfis não está realmente revelando nada. Havia alguma suspeita sobre o disco rodando mais devagar porque os logs estavam sendo escritos (ext3 antigo, agora ext4 + acl), mas isso não parece ser um problema e "log load" é o mesmo. iostat, netstat tudo parece normal.

Suspeito que algo mudou no manuseio de RPC entre os kernels, mas parece ser difícil encontrar muita informação, uma vez que (suponho) a comunicação do tipo Sun RPC não é tão popular hoje em dia.

Alguma ideia? Eu não espero que alguém necessariamente resolva o problema já que eu não posso compartilhar muito sobre isso, mas talvez ponteiros sobre o que observar para diagnosticar a sobrecarga de kernel e RPC?

obrigado!

    
por bjb 14.01.2015 / 16:47

2 respostas

1

Parece que o problema deriva do recurso hugepage transparente do kernel. Não tenho certeza dos detalhes técnicos completos, mas basta dizer que os três comandos a seguir para desativá-lo corrigiram as coisas:

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

A carga da CPU caiu de volta para o local onde a tivemos antes de passar para o novo kernel.

Espero que isso ajude alguém desde que eu não consegui encontrar uma coisa maldita na internet no que diz respeito ao RPC que não estava relacionado com NFS! : -)

    
por 28.01.2015 / 17:22
-1

Verifique seu código para While-sleeps e substitua-o pelo sleep real + verifique sua configuração do kernel.

    
por 14.01.2015 / 17:20

Tags