Acho que esta é a sua pista:
The Java ParNew GC runs every other second on these machines.
Seu aplicativo Java se comunica pela rede. A cada segundo alternativo, você está pausando o aplicativo Java para executar o Garbage Collection. Você está vendo apenas o tráfego de rede a cada segundo alternado, o que significa que o aplicativo só está sendo executado a cada segundo alternativo.
Parece que seu padrão de tráfego de rede é exatamente o esperado?
A execução da coleta de lixo a cada dois segundos certamente não está ajudando você. Se a JVM estiver executando isso, você precisará de um tamanho de heap maior. Se você estiver solicitando essa coleta com System.gc()
ou Runtime.gc()
, tente não solicitar isso com muita frequência e veja se o padrão de tráfego segue as pausas do GC.
Entrar em uma solução de problemas da Garbage Collection do seu aplicativo específico está muito além do escopo de uma resposta neste site, mas sugiro que você escolha algumas métricas importantes para seu aplicativo e meça essa métrica enquanto experimenta diferentes tamanhos de heap intervalos de solicitação de GC diferentes e os diferentes GCs na sua JVM. Há muitos artigos disponíveis ao usar garbagecat para analisar o desempenho do GC.
Não se preocupe muito com a frequência de pausas ou com o número de pausas ou duração das pausas. Use o Coletor de lixo e as configurações que resultam nas melhores métricas para o que é importante para seu aplicativo.
Acho que você encontrará muitos engenheiros Java que diriam que não solicitam a coleta de lixo manualmente. Os desenvolvedores da JVM colocaram muito esforço em ajustar os GCs para serem automaticamente inteligentes. Eles sabem mais do que meros mortais como você ou eu jamais iremos. Confie neles.