Estou trabalhando em um servidor usando o Vert.x em Java e estou observando alguns problemas de desempenho quando rodando em um servidor dedicado rodando o Ubuntu 12.04.
O servidor seleciona as solicitações HTTP de entrada, faz alguma autenticação usando HMACs, analisa os corpos das solicitações, faz algum processamento de texto e envia dados para um servidor diferente em UDP. Não há E / S de disco e apenas uma quantidade relativamente pequena de uso de memória (nem perto de swap). Eu estou fazendo loadtesting contra o servidor usando instâncias Grinder e AWS, mas mesmo com um servidor bem orientado eu sou incapaz de obter mais de 10 mil pedidos por segundo.
O que estou vendo é que um núcleo na máquina do servidor é absolutamente fixo, principalmente no kernel, e os outros núcleos têm apenas 20-25% de utilização. Minha suposição é que a CPU está sendo gasta em receber conexões TCP de entrada. O JMX reporta a maior parte do meu tempo em io.netty.channel.nio.NioEventLoop.select (), que eu suponho que conta o tempo de espera pelo kernel, e strace mostra muito tempo gasto em futex () e epoll_wait (). Eu tentei brincar com as configurações do kernel para aumentar a taxa de transferência do servidor, mas não tive sorte.
Execução do Profiler:
URLoriginal: link
Uso da CPU:
URLoriginal: link
Eu estou querendo saber o que pode ser ajustado no nível do kernel para ajudar nisso. Eu tentei mexer com tamanhos de buffer TCP, aumentando alças de arquivo, desativando os recursos do TCP, etc., sem sucesso. Se isso ajudar, este sistema operacional do servidor está realmente rodando no Xen, é 'dedicado', pois é o único residente.