001-006151

パッケージ版 Garoon

関心あり
0人の方が関心を示しています。

ログが大量に蓄積されると、CSVファイル書き出し時にFatal errorが発生し、書き出しに失敗する場合がある。

種別
不具合
機能
  • ロギング
再現バージョン
  • 3.5.0
  • 3.5.1
  • 3.5.2
  • 3.5.3
  • 3.5.4
  • 3.5.5
  • 3.7.0
  • 3.7.1
  • 3.7.2
  • 3.7.3
  • 3.7.4
  • 3.7.5
  • 4.0.0
  • 4.0.1
  • 4.0.2
  • 4.0.3
  • 4.2.0
  • 4.2.1
  • 4.2.2
  • 4.2.3
  • 4.2.4
  • 4.2.5
  • 4.2.6
  • 4.6.0
  • 4.6.1
  • 4.6.2
  • 4.6.3
  • 4.10.0
  • 4.10.1
  • 4.10.2
  • 4.10.3
  • 5.0.0
  • 5.0.1
  • 5.0.2
  • 5.5.0
  • 5.5.1
改修バージョン
公開日
2012-12-17
更新日
2014-03-10

【発生条件】

  • ロギングのログデータが大量に蓄積されている。

 

    【準備】

    • バージョン 3.5.0以降のガルーンでログが出力される操作を繰り返し、大量のログを出力します。

     

      【再現手順】

      1. システム管理画面にログインし、[基本システムの管理] > [ロギング] > [ログの書き出し]の順にクリックします。

      2. 各項目を設定し、[書き出す]をクリックします。

      →現象発生:
       次のエラーが発生し、ログが途中までしか書き出されません。(エラーメッセージはCSVファイル内に書き出されます。)
       -----------------
       Fatal error: Allowed memory size of 838860800 bytes exhausted (tried to allocate 220 bytes) in /var/www/cgi-bin/cbgrn/code/include/fw/csv.csp on line 65
       -----------------

       

      補足:

      • 次の環境で現象が発生することを確認しています。
        -----------------
        • マシンスペック
          CPU:Intel(R) Xeon(R) CPU X5550 @ 2.67GHz
          メモリ:2GB

        • データの状態
          ロギングのレコード件数:400万件(約65万件書き出したところでFatal errorが発生します)
        -----------------

      • お使いの環境によって、現象が発生するデータ件数は異なります。

      • ログの書き出し処理以外の操作によって、同様のFatal errorが出力される場合があります。

      【回避方法】

       

      次のいずれかの方法、または2つの方法を併用して、ログをCSVファイルへ書き出します。

      • php.iniのmemory_limitの設定を変更し、CSVファイルに書き出します。

      • 「ログの書き出し」画面でログを書き出す期間を短く指定し、CSVファイルに書き出します。

       

      php.iniのmemory_limitの設定を変更し、CSVファイルに書き出します。


        例:
        変更前
        ------------------------------
        memory_limit = 800M
        ------------------------------

        変更後
        ------------------------------
        memory_limit = 900M
        ------------------------------

        変更後(無制限)
        ------------------------------
        memory_limit = -1
        ------------------------------

      補足:

      • php.iniは次のディレクトリーに配置されています。
        (cgi実行ディレクトリ)/(インストール識別子)/php.ini

      • memory_limitの設定を800Mより大きく設定しても、サーバーのメモリが枯渇し、ログを最後まで書き出せない場合があります。ログが最後まで出力されていることを確認するまで、ガルーン側のログを削除しないで下さい。

      • memory_limitの設定を変更することにより、同サーバー上の他のアプリケーションに影響を与える可能性があります。

      • ログのCSVファイルへの書き出しはサーバーに負荷がかかります。サーバーへのアクセスが多い時間帯は、本操作を実行しないで下さい。

      • ロギングの書き出し時のみ、本設定を行なってください。書き込みが完了したら、変更前の設定に戻して下さい。

      • 設定変更後、Webサーバーを再起動する必要はありません。

      • 次の環境で「memory_limit = -1」の設定でCSV書き出しを行なうと、約350万件書き出した時点でOut of memoryエラーとなり書き出しが中断することを確認しています。
        -----------------
        • マシンスペック
          CPU:Intel(R) Xeon(R) CPU X5550 @ 2.67GHz
          メモリ:2GB

        • データの状態
          ロギングのレコード件数:400万件(約350万件書き出したところでOut of memoryエラーが発生します)

        -----------------

       

        「ログの書き出し」画面でログを書き出す期間を短く指定し、CSVファイルに書き出します。

        1. システム管理画面にログインし、[基本システムの管理] > [ロギング] > [ログの書き出し]の順にクリックします。

        2. 「書き出す期間」を設定し、[書き出す]をクリックします。


        補足:
        次の操作によって、ログがすべて書き出されているかどうかを確認できます。

        1. システム管理画面にログインし、[基本システムの管理] > [ロギング] > [ログ一覧] > [詳細検索]の順にクリックします。

        2. 次の条件でログを検索します。

          例:
          検索文字列:「(」 ※半角丸カッコ
          検索期間:ログの書き出し時に指定した同じ期間

        3. 検索結果欄に表示される、先頭行のデータを確認します。

          例:
          2012-12-12 18:00:00 基本システム 重要情報  [login] system (id:6, name:'佐藤 昇', account:'sato')

        4. 書き出したCSVファイルの最終行を確認し、手順3のデータと同じであることを確認します。

          例:
          2012-12-12 18:00:00 基本システム 重要情報  [login] system (id:6, name:'佐藤 昇', account:'sato')

         

         

        ------------------------------------------------------------
        【更新履歴】
        2014/03/10 「詳細」欄の補足を追記しました。