Instância da JVM

Olá,

Tenho uma aplicação que faz uso de mais de uma JVM (Cada JVM tem a aplicação completa carregada - motivação: disponibilidade - portanto são duas aplicações idênticas rodando simultaneamente, gerenciadas por um balanceador).

O problema é que o log gerado pelas duas aplicações é escrito num mesmo arquivo (e este fato não pode ser mudado), gerando confusão na análise, já que em certas situações, fica difícil perceber de qual JVM é referente determinada linha do log.

Assim, gostaria de saber se existe alguma maneira de “identificar” as diferentes JVMs… Por exemplo, existe algum valor que é gerado quando a JVM é iniciada que pode ser usado para distinguir as diferentes JVMs? Pensei em usar a hora (em milisegundos) que a JVM foi iniciada, mas correria o risco de as duas terem subido exatamente ao mesmo tempo e aí não haveria como distinguí-las… Enfim, preciso de um identificador para colocar em cada linha do log dizendo de qual JVM aquela linha é referente…
Espero que tenham entendido, mas qlq coisa só perguntar!

Alguém poderia me ajudar nisso??

Abraços!

A ideia dos milisegundos é boa… acho muito improvavel que vc consiga iniciar 2 aplicações no mesmo milisegundo uma da outra… mas de qq maneira se vc está qrendo garantir 100% vc poderia fazer a primeira aplicação gravar em um arquivo por exemplo qual eh o “nome” dela, e a segunda aplicação poderia ler desse arquivo escolhendo um “nome” diferente… tb não precisa ser arquivo, pode ser no banco… pode ser até alguma variavel de abiente… eu acho!! :smiley:

O que está sendo rodado nas JVM? Como vc faz o balanceamento de carga?

Oi André, antes de tudo vlw pela resposta! :wink:

Então, também pensei em usar meios externos para ter esse controle, mas a criação de um arquivo está descartada pelo cliente e o uso da base geraria esforços de uma outra equipe, portanto, pelo menos nessas primeiras investidas, gostaria de encontrar uma solução ‘local’. :wink:

Abraços!

Opções:

  • Hostname + PID
  • VMID

Em tempo: Faça um teste de carga com duas vms populando o log. A probabilidade de um deles truncar e sobreescrever o outro é alta.

Porque? Bem, escritas em arquivos texto no contexto de um log precisam ser atômicas. O ideal é você empregar um único modulo pra coletar o log (eis porque no unix, o syslog é um protocolo).

Não preciso dizer que o log4j tem tudo isso, certo?

Então, cada JVM (são 2) tem a aplicação completa rodando. Ou seja, existem na verdade 2 aplicações idênticas rodando em JVMs distintas.

Por incrível que pareça, esse ‘cluster’ foi criado pelo cliente praticamente sem nos consultar (eles achavam que esse fato não implicaria em ‘quase nada’ para a app… ) e ainda não temos maiores informações sobre como é feita a distribuição e o balanceamento dela no ambiente de produção… Portanto o uso de variáveis no ambiente do cluster tb não é dos mais apropriados no momento.

:wink:

[quote=Aldrin Leal]Opções:

  • Hostname + PID
  • VMID

[/quote]

Vou tb dar uma pesquisada sobre essas sugestões!!

vlw! :wink:

O sistema já está em produção e ‘misticamente’ não existem evidências de logs que sumiram. Ou seja, parece que no ambiente em produção já existe um cuidado nesse sentido.

[quote=Aldrin Leal]Opções:

  • Hostname + PID
  • VMID

[/quote]

Aldrin,

Dei uma pesquisada sobre esse VMID, e não sei se entendi bem… mas me parece que esse identificador nada mais é do que um hash sobre o hostname aliado a algum tipo de contador… é isso mesmo?

Quanto a essa opção de usar o hostname + PID, deixa eu te perguntar uma coisa: Você sabe como eu faço para obter o PID da JVM em tempo de execução? (sem utilizar shellscript). Ahh, eu uso a JVM da IBM (Websphere).

Abraços!