人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Apacheでアクセスログがたまに欠落します。欠落した場合は、欠落したログの先頭に「Error writing to log file. 10000000 messages lost.」というエラー文字が追加されています。

この現象はアクセス数の増加に伴って頻発しております。Apacheのアクセスログはrotatelogsを使って、ログローテーションしています。何らかの原因でアクセスログが吹っ飛び、そこからログを書き直しはじめるので、欠落した日のログは極端に少ないです。原因は何でしょうか?また、その対処方法も教えて下さい。

ログDIRでls -lすると

----
root root 2223423 access_log_20080224 (欠落)
root root 72547 access_log_20080225 (欠落)
root root 1831166391 access_log_20080226 (正常)

●質問者: redhat
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apache Dir LOST LS root
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● y-kawaz
●40ポイント

欠落したファイルの例を見た限りでは正常なファイルサイズが 1.8GB となっており、2GB(正確には2147483647バイト)を超えるファイルが無いことです。

恐らくlsで省略した部分にも2GBを超えるものはないのではないでしょうか?

大きく欠落しているファイルはおそらくファイル内の位置を示す値が2GBに到達してしまったために想定外の問題が起きて最初から上書きされてしまったような状況と考えられます。

Linuxには2Gの壁と呼ばれるものがあり、lseek() などファイル内の読み出し位置を移動する関数に与える値の型に signed long (2^31-1=2147483647が最大)が使われている為に発生するものです。

最近のファイルシステムでは2GBの壁は取り除かれていますがアプリケーション側でそれを想定していない作りの場合はこの壁は依然存在します。


いちばん簡単な解決策は2GBに到達しない程度に分割する、ということです。

おそらく現在は以下のような設定になっていると思われますが、

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log_log_%Y%m%d 86400 540" combined

1日毎の分割では2GBに達してしまうようなので更に以下のように時間ごとにも分割されるようにすればよいと思われます。

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log_log_%Y%m%d_$H 3600 540" combined
◎質問者からの返答

なるほど、「2Gの壁」恥ずかしながら、初めて知りました。ログを分割して対処したいと思います。ありがとうございました。


2 ● toohigh
●35ポイント

ログのサイズが大きすぎること、が原因でしょう。

正常に作成された場合のログのサイズが 1.8GB 程度ということで、2GBの壁の影響かと思われます。

対処方法ですが、こんなところでしょうか。

分かりやすさその他の理由から前者の方がおすすめかな、という気がします。

◎質問者からの返答

なるほど、「2Gの壁」恥ずかしながら、初めて知りました。ログを分割して対処したいと思います。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ