Espaço livre em disco de um arquivo de log do JBoss que ainda está sendo gravado para

1

Existe algum bloqueio no conteúdo, imposto pelo processo se em todo o processo estiver usando o arquivo.

Hospedamos um servidor de aplicativos JBoss em um sistema operacional RHEL 6.4 e, devido às restrições de espaço em disco, decidimos remover os arquivos de registro gerados até a data.

No entanto, se excluirmos o arquivo de log que está sendo usado, pode haver alguns problemas com o login no jboss, o que eventualmente leva ao reinício da instância do Jboss App Server.

Nós decidimos anular o server.log que está sendo escrito dinamicamente pelo processo do servidor de aplicativos JBoss (verificado com o comando fuser ) usando os comandos abaixo:

-- > server.log
-- echo "" > server.log

Nenhum dos comandos acima funcionou. O tamanho dos arquivos ainda mostra 500+ MB

Como faço para remover o conteúdo do arquivo sem excluir o arquivo?

    
por Avinash 05.03.2014 / 12:11

2 respostas

1

O Linux só possui bloqueios cooperativos. Nada impedirá que um processo abra um arquivo que tenha permissão para abrir. Você precisaria chamar um mecanismo de bloqueio em todos os processos usando o arquivo para impedir o acesso simultâneo. No entanto, o que você está tentando fazer não tem nada a ver com acesso simultâneo, até onde eu posso ver.

Se você remover um arquivo que está aberto em um processo, o arquivo não será removido: somente o nome dele será removido. O arquivo em si é realmente removido apenas quando não tem mais nenhum nome (link físico zero) e não está mais aberto. Portanto, se você executar rm server.log enquanto o aplicativo JBoss ainda estiver aberto, isso não liberará espaço em disco até que o aplicativo JBoss seja reiniciado (ou feche o arquivo de log por algum outro motivo).

Se você executar > server.log ou echo "" > server.log , isso faz truncar o arquivo para 0 ou 1 bytes, respectivamente, para que o espaço em disco seja liberado. Se o aplicativo JBoss estiver gravando no arquivo, ele continuará gravando na mesma posição, 500 MB no arquivo. Isso resulta em um arquivo esparso , onde o arquivo contém bytes nulos até a posição em que o aplicativo começou a gravar nele. Por exemplo, se o arquivo tiver 500 MB quando você o truncou e o aplicativo continuar gravando 1 MB, o tamanho do arquivo será de 501 MB, mas o espaço em disco ocupado pelo arquivo é de apenas 1 MB e os primeiros 500 MB do arquivo são bytes nulos.

Se você quiser que o aplicativo escreva no início do arquivo, terá que dizer para fazer isso. Normalmente, você diria para fechar seu arquivo de log atual e iniciar um novo. Como grebneke comentado : veja Como limpar server.log no JBoss?

    
por 06.03.2014 / 02:08
0

Você pode bloquear o arquivo explicitamente pelo processo (e possuir o bloqueio - outros podem aguardar liberação ou desistir).

Para começar, confira flock e lockf . Bloqueios de arquivos podem até endereçar intervalos dentro dos arquivos.

Um link que também trata de alguns problemas com multithreading e tentativas de soluções.

link

    
por 05.03.2014 / 12:18