Como evitar um padrão consistente de pausa de java no Linux Mint

Eu tenho um aplicativo Java em execução no Linux Mint. A cada minuto, o programa mostra uma desaceleração muito notável - Uma pausa. A pausa é de 3 a 4 segundos consistentes. Quando executamos outras instâncias do mesmo programa, elas também pausam de 3 a 4 segundos a cada minuto. Cada programa para em um segundo diferente do minuto.

última atualização:

Após a última atualização (abaixo), aumentar a contagem de threads do pool de threads viu o problema da GUI desaparecer. Após cerca de 40 horas, observamos um vazamento de rosca no JettyHttpClient bloqueio-PEGUE (Request.send()) ligar. Para explicar a mecânica, usando a classe Executor: um thread principal é executado a cada poucos minutos. Ele usa o Executor para executar um thread independente para chamar o host com um comando HTTP GET, o Jetty'sHttpClient.request.send().

Após cerca de 40 horas de operação, houve um aumento no número de threads em execução noHttpClient piscina. Por 40 horas, os mesmos threads funcionaram bem. A hipótese de trabalho é que, nessa época, um ou maissend() as chamadas não foram concluídas ou atingiram o tempo limite e não retornaram ao segmento de chamada. Essencialmente, esses tópicos estão pendurados no Jetty Client.

Ao assistir a cada ciclo regular emjVisualMV nós vemos o comportamento normal a cada ciclo; alguns threads HttpClient são acionados para o host GET, executam e desaparecem em apenas alguns segundos. Também no monitor existem cerca de 10 threads pertencentes ao JettyHttpClient conjunto de encadeamentos 'presentes' para (agora) 10 horas.

A expectativa é que houve algum erro no processamento subjacente do cliente ou da rede. Estou surpreso que não houve exceção de tempo limite ou exceção de programação. Há uma pergunta clara que posso fazer agora.

O que pode acontecer por dentroHttpClient que poderia apenas travar umRequest.send()Qual é o tempo limite da chamada retornada? Eu acho que ainda haverá tempos limite absolutos ou verificações de bloqueio, etc. (não?)O sistema de E / S pode travar e deixar a linha do chamador travada - enquanto Java obedientemente ...Dispara o encadeamento do gerente no horário agendado e, em seguida,Nas próximasHttp.Request.send() acontece,Um novo thread (s) da execução do pool para o próximo envio (como parece ter acontecido).Enquanto o anteriorsend() está preso no limboPosso limitar ou, de outra forma, fazer uma limpeza nesses segmentos presos?

Isso estava acontecendo antes de aumentarmos o tamanho do conjunto de encadeamentos. O que aconteceu é que a "culpa" se tornou mais focada na área problemática. Também suspeitamos do sistema subjacente porque também tivemos travamentos com o ApacheHttpClient novamente na mesma hora (não específica) do dia.

(atualização prévia) ...

O comportamento de pausa observado é oJavaFX A GUI não atualiza / atualiza; o relógio da tela (textView),setText() a chamada foi registrada durante o congelamento com duas x atualizações por segundo (novas informações). O relógio não é atualizado (no Mint Linux), continua sendo atualizado quando executado no Windows. Para evitar que eu me repita para perguntas sobre GC, logs, análises etc. a resposta será a mesma; realizamos diagnósticos extensos há semanas. O problema é inconfundivelmente uma mistura de: Linux JVM / Linux Mint / Threads (por JavaFX). Outro dado novo é que o aumento da contagem do pool de threads em +2 parece remover o congelamento - São necessários mais testes para confirmar isso e ajustar os números. A questão é "Quais são os parâmetros que fazem a diferença entre as duas plataformas?"

Executamos várias instâncias do programa no Windows por dias sem pausas. Quando rodamos em uma plataforma Mint Linux, vemos o congelamento, é muito consistente.

O programa possui vários threads em execução em um agendamento. Um segmento abre a Internet para um soquete http. Quando comentamos essa área, a pausa desaparece. No entanto, não vemos esse comportamento usando o Windows. As experiências apontam para algo específico do subsistema de E / S de rede Mint, agendamento de linux, JVM Linux Java 8 ou alguma interação entre os dois.

Como você pode imaginar, estamos arrancando nossos cabelos com esse. Por exemplo, desativamos o log e a pausa permaneceu. Continuamos o log e fizemos apenas uma chamada para o servidor http, pausando a cada 60 segundos, na mesma contagem de segundos. Isso acontece mesmo quando não fazemos outro processamento. Tentamos diferentes bibliotecas http, etc. Parece muito claro que está na JVM ou no Linux.

Alguém sabe uma maneira de resolver isso?

questionAnswers(0)

yourAnswerToTheQuestion