0

Debian で単純な LAMP スタックを構成しましたが、Apache Web サーバーでいくつかの問題が発生しています。

Web サーバーは 3 ~ 4 時間ごとにデッドロックに入り、データベースにヒットするすべての要求がブロックされます。サーバーは、リクエストごとに新しい子を作成しています。プロセス数は急速に増加します。数秒後、Monit は何かがおかしいことに気付き、Apache サーバーを再起動します。

この問題は、サーバーがまだ静的コンテンツ要求に応答できるため、PHP がデータベース接続プールを処理する方法によって生成されていると思われます。この種の行動を経験したことがありますか?どうすればいいですか?

更新:問題は解決しました。オペコードのキャッシュとユーザー データに APC を使用するのはよくない考えのようです。現在、ユーザー データの保存には Memcache を使用し、コードのみに APC を使用しています。まだ時々セグメンテーション違反が発生しますが、サーバーはほとんどの場合安定しています。

4

4 に答える 4

3

問題は次のとおりだと思います。

  • それ以上のリクエストをブロックする、困難で長時間実行されるデータベース クエリ。これは、テーブル レベルのロックしか持たない MySQL MyISAM エンジンを使用している場合はかなり簡単で、リーダーはライターを簡単にブロックでき、その逆も同様です。データベースは I/O を待機します。通常、これは「SHOW PROCESSLIST」またはこれを行うツールを使用して診断できます。
  • Prefork サーバーで利用可能な RAM に対して MaxClients を非常に高く設定すると、ほとんどの人がこれを行います。「太い」プリフォーク Apache (インプロセス PHP など) を使用している場合は、十分な RAM を持っているよりも MaxClients を高く設定しないでください。これは、通常の値である 100 または 150 よりもかなり少ないと思われます。

これら 2 つのことが共謀して、表示されている問題を引き起こします。単独で問題を引き起こす可能性があるため、両方を修正する必要があります。

これは完全に推測と経験に基づいています。

于 2008-11-23T22:02:33.910 に答える
1

ログを見てみませんか?/var/log/apache2/*始めるには良い場所です。サーバーが停止する直前に何が要求されますか? そこから、おそらく何が問題なのかを推測できます。PHP スクリプトはデフォルトで 30 秒後に終了するため、このような問題が発生するには、ミスがかなり大規模である必要があります。

于 2008-11-23T21:40:21.350 に答える
1

/etc/apache2/apache2.conf のタイムアウト設定を確認してください。タイムアウトが高く設定されていて、システムが大量の接続切断に見舞われた場合に、同様の問題が発生しました。

于 2008-11-23T21:47:54.157 に答える
0

mysql-slow ログは、遅い問題の原因となっているクエリを見つけるのにも役立ちます。

于 2009-01-08T18:35:59.313 に答える