多くのログファイルを作成するCentOS 6.0 64ビットで実行されるJavaベースのWebアプリケーションがあります。 、および他の多くのオプションをlogrotate
使用して、いくつかのファイルを毎日交換してください。daily
copytruncate
そのような特定のログファイルの1つは、正確に「102400000」バイトで成長を停止しました。プロセスは引き続き正常に動作します。しかし、当時のログには何も記録されませんでした。
stat
"102400000"バイトサイズに達した後、変更時間が変更されたことを確認するためにファイルを操作しましたが、変更されませwatch
んでした。ファイルには何も起こりません。それはただ同じままです。同じディレクトリ内の他のログファイルに書き込みを続けます。
他のStackExchangeの質問で言及されているものここ申請しないでください。上記のulimitオプションが設定されていますが、何も設定されていないことを確認して、もう一度確認しました。
実行すると、strace -f -p PID
プロセスは書き込みを試みますが、「ファイルが大きすぎます」および「ファイルサイズ制限を超えました」というメッセージが表示されます。
[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) ---
ファイルサイズにこれらの制限を適用する理由をどのように見つけることができますか?同じディレクトリにある他のログファイルはサイズが非常に大きく(サイズが1 GB以上)、これらの問題はありません。
答え1
したがって、(あなたの意見に従って)最終的に(ulimit
およびSIGXFSZ
)EFBIG
ログサイズが大きくなることができない理由を説明します。
以下で確認できます。
grep 'Max file size' "/proc/$pid/limits"
($pid
ファイルに書き込むJavaプロセスのIDはどこにありますか?)
これは、プロセス自体(checkまたはstrace出力setrlimit
)によって設定または開始されたラッパースクリプトまたはJavaアプリケーション(照会)によって設定できます。ulimit
java
ulimit -f 100000