Jar no Raspberry Pi não responde depois de um longo tempo

1
Olá Eu fiz um programa em java com um amigo que é projetado para rodar 24/7 como um assistente pessoal em um Raspberry Pi sem cabeça. Basicamente pode ser usado como um alarme e nos dizer o tempo ou notícias etc. Assim para ter isto 24/7 funcionando sem cabeça, eu segui direções de aqui para ter o jar start quando o Pi for inicializado (então ele é executado como um daemon).

Tudo está bem para as primeiras duas horas do dia, mas depois de um longo período de tempo (cerca de um dia ou mais), o jar não responde, mas quando eu SSH no Pi, então parece que o Pi quase "acorda" e tudo funciona de novo.

Eu li que o Raspberry Pi não tem um modo de hibernação, então estou confuso sobre qual é a causa, e como desligá-lo para que o jar seja realmente responsivo 24/7.

Eu queria saber se os encadeamentos do daemon vão dormir ou se os encadeamentos geralmente vão dormir se não fizerem muito, porque neste momento nosso programa quase "dorme" enquanto espera que os eventos ocorram (como um certo tempo para acertar o alarme para ativar etc.), por isso não faz muito para a maior parte do tempo.

    
por jundl77 07.02.2015 / 21:32

1 resposta

0

I was actually more wondering about the long-term behavior of daemons in unix or threads in general

Eles correm até que eles parem. O sistema não irá pará-los arbitrariamente, e você já sabe que o pi não pode ir dormir. Se por "não responder" você quer dizer "lento" e o sistema estiver fazendo outras coisas, pode ser porque o JRE foi trocado (mas não parece que esse é o problema).

Você pode querer olhar para o perfil da memória ao longo do tempo. Se aumentar constantemente, até o ponto em que é muito maior depois de alguns dias, quando o problema ocorre, isso é uma pista de que algo está errado. Eu acho que é quase impossível realmente "vazar" a memória com o java, mas certamente é possível construir acidentalmente massas que não estão sendo realmente usadas. Você pode estar interessado em este .

Além disso, você precisa implementar um registro mais detalhado no programa; aparentemente, conta o tempo de um jeito ou de outro. Faça-o acordar em intervalos regulares curtos, independentemente de haver algo a fazer e relatar seu estado. Isso pode misteriosamente "consertar" o problema, ou pode fornecer uma pista real. O registro robusto é crítico para monitorar processos persistentes. Toda vez que faz alguma coisa - qualquer coisa - registre-a. Toda vez que uma certa quantidade de tempo passa sem fazer nada, registre isso. Logging demais é melhor do que não é suficiente.

    
por 08.02.2015 / 16:08