Perl:大容量ログを正常に読み込む方法が知りたい
ある動作のログを出力するシステムの機能改修の立場にある者です。
言語はperlです。
大容量ログを正常に読み込む方法が知りたいのですが、急いでおります。
ログが出力されているファイルが大容量で、
ログ読み込みの始めのうちは問題なく扱えていますが、
ログをどんどん読み込んでいくと
「Internal Server Error」となります。
スクリプトは下記の通りです。
open LOGFILE,○○
while($** = <LOGFILE>){
ログの文字列をいろいろ切り出して、配列に格納。
必要なログ情報を取り出せたらループから出る。
}
close(LOGFILE);
上記の配列を扱い、ログを多様な表示スタイルで出力します。
ブラウザでのログ表示で検索条件で指定されたログを抽出できたら
途中でループから逃げているので問題なく動作しております。
しかし、ページを切り替え、ログをどんどん読み込んでいくと
(おそらく)配列に格納するメモリが大容量のため
エラーになってしまいます。
※ログ表示で設置している検索条件機能
(1)何ページ目表示指定 (2)1ページあたりのログ表示行数指定
(100行表示で3ページ目を見る場合、201行目から300行が表示されます。)
そのためページ切り替え毎にログを格納している配列を破棄?するなど
メモリを解放することが必要になる?かと思っています。
しかし、ページ切り替えごとにログの一番初めから読み込み直す必要もあるのでは?とも考えています。
※ログの一文目からカウンタで順番を数えていて、後でログを格納した配列でキーを指定してログを取り出しています。
検索条件を変えながらでも、かつメモリを解放?しながらログを配列に格納して扱う方法はあるでしょうか。
つまづいてしまって進めません。。
※メモリを増やすといったパワープレーではなく、
プログラムの書き方でメモリの負荷を少なくして実現させたいです。
もしいい方法をご存知の方がいらっしゃれば、よろしくお願いいたします。
長文失礼いたしました。
お礼
回答ありがとうございました。