2

Apache + fastcgiを使用してphp-fpmに接続する64GB RAMのサーバーがあります。

ApacheBench でいくつかの負荷テストを実行しています。200 リクエスト/秒で 500k リクエスト (目標はサーバーあたり 10k/秒)。「プールがビジー状態のようです」というエラーが表示され続け、200reqs/秒でも処理するように fpm を適切に構成する方法について途方に暮れています。明らかな何かが欠けているように感じます。

fpm-config:

pm = dynamic
pm.max_children = 8192
pm.start_servers = 2048
pm.min_spare_servers = 2048
pm.max_spare_servers = 2048
pm.max_requests = 8000

アパッチ構成:

<IfModule worker.c>
StartServers         2048
ServerLimit     8175
MaxClients         8175
MinSpareThreads    2048
MaxSpareThreads     2048
ThreadsPerChild     25
MaxRequestsPerChild  8000
</IfModule>

私は何を間違っていますか?

4

1 に答える 1

0

私の最初の直感的な反応は、最大 8000 の子を持つことは、リクエストごとの待ち時間が長い場合を除き、実行するプロセスの数が非常に多いように見えるということです。しばらくすると、多数のプロセスが実際にパフォーマンスの低下を引き起こします。これは、コンテキストの切り替えによって、実行中のプロセスが CPU 時間の内外でスワップされるためです。これには時間がかかります。プロセスが大量に待機している外部サービス呼び出しが大量にない限り、これは少し過剰に思えます。さらに、リクエストの過程で 20 MB が割り当てられると仮定すると、空き RAM の 60% 以上を start_servers を提供するためだけに使用することになります。

「プールがビジーのようです」というエラーについては、私は直接知りません。環境に深く入り込まずに言うのは(私にとって)難しいです。AB を実行しているときの空き CPU 時間とメモリ使用率はどうですか?

また、個々のプロセス(FPMなど)が開くことができる接続の数にシステム制限があるかどうかも疑問です... ulimit -aを確認してください

于 2012-08-19T02:22:12.547 に答える