Arquivo de log não está crescendo além de um tamanho. Por quê?

4

Temos um aplicativo da Web baseado em java em execução no CentOS 6.0 de 64 bits e ele grava muitos arquivos de log. Alguns dos arquivos são rotacionados diariamente usando logrotate usando daily , copytruncate e outras poucas opções.

Um determinado arquivo de log pára de crescer exatamente com "102400000" bytes. O processo continua funcionando bem. Mas nada é escrito no log então.

Eu fiz um stat no arquivo usando watch para ver se, depois de atingir o tamanho do byte "102400000", a hora modificada é alterada, mas isso não acontece. Nada acontece com o arquivo. Apenas fica lá como está. Outros arquivos de log no mesmo diretório continuam sendo gravados.

As coisas mencionadas em outra pergunta do StackExchange aqui não se aplica. Eu verifiquei e verifiquei novamente onde a opção ulimit mencionada foi definida, mas não há nenhuma.

Fazer strace -f -p PID mostrou que o processo estava tentando gravar, mas encontrou as mensagens "Arquivo muito grande" e "Limite de tamanho de arquivo excedido":

[pid  5679] write(1, "\n\n\n\n\n23-01-2013 12:00:46:921  Av"..., 128) = -1 EFBIG (File too large)
[pid  5679] --- SIGXFSZ (File size limit exceeded) @ 0 (0) ---

Como faço para descobrir o que está impondo esse limite ao tamanho do arquivo? Outros arquivos de log no mesmo diretório são muito grandes (maiores que 1Gb em tamanho) e não possuem problemas como tal.

    
por Gautam Somani 22.01.2013 / 10:10

1 resposta

3

Então (do seu comentário), existe um ulimit (causando SIGXFSZ e EFBIG ), o que explica porque o tamanho do log não pode ser maior.

Você pode confirmar com:

grep 'Max file size' "/proc/$pid/limits"

(onde $pid é o id do processo java destinado a gravar nesse arquivo).

Possivelmente é definido pelo próprio processo (verifique se há setrlimit ou ulimit na saída strace). Ele também pode ser definido por um script de wrapper que inicie java ou o aplicativo java (procure por ulimit -f 100000 ).

    
por 23.01.2013 / 08:36