(mod_phpを使用する前に)fcgidを使用するアンマネージドサーバーに移動しましたが、エラーログに次のようなエラーが大量に表示されます。
[2012年4月23日21:17:12] [警告] [クライアント66.249.68.233] mod_fcgid:31秒でデータタイムアウトを読み取り[2012年4月23日21:17:12] [エラー] [クライアント66.249.68.233]早期終了スクリプトヘッダー:index.php
[2012年4月23日17:59:51] [警告] [クライアント74.117.180.58] mod_fcgid:31秒でデータタイムアウトを読み取り[2012年4月23日17:59:51] [警告] [クライアント74.117.180.58](110 )接続がタイムアウトしました:mod_fcgid:ap_pass_brigadeがhandle_request_ipc関数で失敗しました
バックアップ中の負荷が高い(2-3)と、これらの数が増えるようです。バックアップ中にtar/mysqldumpが実行されているときに、負荷3の間にこれを複製することもできました(ユーザーに500エラーメッセージが表示された後、 30秒)。サーバーが過負荷になっていませんか?この質問は関連があるようです ダウンロードが中断された場合、PHP + Fcgidがハングします が同じではありません。
これは一流のサーバーであり、これが多すぎることに驚いています。ここにいくつかの仕様があります:6-7 Drupal Webminのあるサイト
これらのエラーは、fcgid.confが言うように、スクリプトが31秒より長く実行されていたために終了したことを意味します。標準のタイムアウトは40秒です。
Test.phpを作成することで、この動作を簡単に確認できます。
<?php sleep(32); ?>
これにより、エラー500が発生し、このエラーがログに記録されます。
これを解決するには2つの方法があります。
タイムアウトを高く設定します。この設定は別の仮想ホストが読み込まれるたびに変更され、生成されたプロセスが終了するまで残るため、すべての仮想ホストに対して行う必要があります(SSLを忘れないでください!)。
最も簡単な方法は、/etc/Apache2/mods-available/fcgid.conf
を編集することです。これは私たちが使用しているものです:
IdleTimeout 3600
ProcessLifeTime 7200
IPCConnectTimeout 8
IPCCommTimeout 600
BusyTimeout 300
編集:ああ、2番目のエラーは、URLの過度に長いクエリ文字列に関連しています。より長いクエリ文字列を許可するには、fcgid.conf
も編集して挿入します
MaxRequestLen 15728640
実行中のすべてのプロセスを強制終了するためにApacheを再起動して、新しい構成を取得することを忘れないでください。
mysqldumpはデフォルトで、実行中にデータベースを書き込みロックするため、バックアップ中にデータが変更されず、破損を引き起こす可能性があります。 Drupalリクエストごとにデータベースに書き込むため、mysqldumpの実行中にリクエストがハングし、最終的にタイムアウトします。
InnoDBを使用している(または変換できる)場合は、 Percona XtraBackup を使用してホットバックアップを実行できます。それ以外には、mysqldumpをtarまたはgzipにパイプしないでください。 .sqlファイルをダンプし、mysqldumpが完了した(およびロックを解放した)後にtar/gzipを実行します。
また、fcgidの特定のバージョンでは、 VirtualHostブロックの設定のみを適用し、最後に読み取ったブロックの設定をグローバルに適用する になるバグがあることにも注意してください。