2

私はmodxで構築されたサイトを持っており、負荷がかかるとすべてのCPU処理能力が使い果たされ、topはこれを消費する多くの機能しないphpゾンビプロセスを示しています。

システム仕様は次のとおりです...
PHP5.2.14phpは suPHPMysql5.1.51 Apache 2.0.63modx1.0.4 として
実行されます


ApacheBenchを使用してimをテストし、100の同時接続で500の接続をシミュレートする場合

私はこれを2つの方法でテストしました...

.htaccessをオフにして、「Helloworld」をエコーする単純なphpページのストレステストを行います。
一番上にあるのは、phpが機能しなくなり、ゾンビに変わっていることを示していますが、すぐに消えてしまいます

phpがより多くのことをしているmodxによって提供されるページを呼び出すと、より多くのCPUを消費するゾンビがより多く生成され、それらの一部はすぐに消えません。

これを引き起こしているのは何ですか?コードの間違いでしょうか?その場合、単純なHello Worldスクリプトがゾンビを生成するのはなぜですか?

サーバーの構成に問題がありますか、それともサーバーに過度の負荷をかけることに問題がありますか?

これについて頭を悩ませ、次に何をすべきかについてのいくつかの指針を期待しています。

4

2 に答える 2

4

プロセスは、そのプロセスが終了した直後 (通常またはそうでない場合) に "ゾンビ" (上部では Z として表示されます) です。そのプロセス ID は、その親が待機する (または "刈り取る") までプロセス テーブルに残ります。通常の状況では、親プロセスが SIGCHLD のシグナルハンドラを設定すると、(子プロセスの終了時に) シグナルが送信されると、親プロセスは都合のよいときにシグナルを取得します。

親プロセスがサスペンド、ビジー、デッドロックなどの何らかの理由でハングした場合、終了した子プロセスは (親プロセスが再び再開するまで) リープされません。

通常、メインの Apache プロセスは、終了するすべてのワーカーを取得します。ただし、説明したような負荷の高いサーバーでは、メインプロセスがこのリーピングを行うのに十分な時間がない場合があります。リープされていない (「ゾンビ」) プロセスは、上のように表示されます。

この場合、リープされていないプロセスが非常に多くない限り、プロセスは正常で問題にはなりません。

テストが終了すると、ゾンビ プロセスは短時間で消えますか? もしそうなら、すべてが正常であることを心配する必要はありません。

デフォルトでは、Apache はワーカー プロセスが限られた数のリクエストを処理した後に終了するように設定されています。これは、メモリ リークが手に負えないように設計されています。この設定を微調整すると役立つ場合があります。

于 2011-05-13T22:11:07.690 に答える
0

まず、パフォーマンスを向上させるために、.htaccess ファイルからの情報を apache のメイン構成ファイルに入れることができます。.htacess を含むディレクトリがアクセスされるたびに、起動時に 1 回だけロードされる apache 構成に書き換えルールを設定するのとは異なり、.htaccess ファイルが読み取られてロードされます。

PHP の問題について - suPHP について聞いたことがない場合は、apache と組み合わせて fastcgi を実行するか、fpm/nginx に切り替えます。1 か月間使用していますが、Apache よりもはるかに高速です。つまり、2~3倍のパフォーマンスです。

Nginx には、Apache が持つすべての機能があります。ルールを書き直して、セキュリティのような htaccess にします。

于 2010-12-08T23:43:17.717 に答える