1. ホーム
  2. performance

[解決済み] apacheサーバーがMaxClientsの設定に達したので、MaxClientsの設定を上げることを検討してください。

2022-02-24 01:07:25

質問

私は centos 5.5 を 768MB の RAM で動かしています。 server reached MaxClients setting, consider raising the MaxClients setting cactiのグラフを見ると、サーバーがすべてのリソースを使用していないことがわかります。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers    10
ServerLimit        1024
MaxClients         768
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         2
MaxClients         150
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>



free -m
             total       used       free     shared    buffers     cached
Mem:           768        352        415          0          0         37
-/+ buffers/cache:        315        452
Swap:            0          0          0



top - 11:03:54 up 41 days, 11:53,  1 user,  load average: 0.05, 0.03, 0.00
Tasks:  35 total,   1 running,  34 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.3%st
Mem:    786432k total,   389744k used,   396688k free,        0k buffers
Swap:        0k total,        0k used,        0k free,    38284k cached

以下を試しましたが、サーバーの応答が非常に遅くなります。

<IfModule worker.c>
#StartServers         2
#MaxClients         150
#MinSpareThreads     25
#MaxSpareThreads     75
#ThreadsPerChild     25
#MaxRequestsPerChild  0

StartServers    20
MaxClients      1024
ServerLimit     1024
MinSpareThreads 128
MaxSpareThreads 768
ThreadsPerChild 64
MaxRequestsPerChild 0
</IfModule>

free -m
             total       used       free     shared    buffers     cached
Mem:           768        324        443          0          0         37
-/+ buffers/cache:        286        481
Swap:            0          0          0

<イグ

レギレロ

に更新しました。

<IfModule prefork.c>
  StartServers       12
  MinSpareServers    12
  MaxSpareServers    12
  MaxClients         50
  MaxRequestsPerChild  300
</IfModule>

topを使用しています。

Tasks:  36 total,   1 running,  35 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.3%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    786432k total,   613180k used,   173252k free,        0k buffers
Swap:        0k total,        0k used,        0k free,    76488k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                         
    1 root      20   0 10364   92   60 S  0.0  0.0   1:09.53 init                                                                                                                                                                            
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd/808                                                                                                                                                                    
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper/808                                                                                                                                                                     
  124 root      16  -4 12620    8    4 S  0.0  0.0   0:00.00 udevd                                                                                                                                                                           
  533 root      20   0 95504 5692  228 S  0.0  0.7   4:02.94 memcached                                                                                                                                                                       
  546 root      20   0  5924  332  276 S  0.0  0.0   6:54.51 syslogd                                                                                                                                                                         
  557 root      20   0  101m 1456  868 S  0.0  0.2  13:18.64 snmpd                                                                                                                                                                           
  570 root      20   0 62640  316  208 S  0.0  0.0   2:39.56 sshd                                                                                                                                                                            
  579 root      20   0 21656   24   20 S  0.0  0.0   0:00.00 xinetd                                                                                                                                                                          
  589 root      20   0 12072   12    8 S  0.0  0.0   0:00.05 mysqld_safe                                                                                                                                                                     
  940 mysql     20   0  559m 164m 3832 S  0.3 21.5 209:33.88 mysqld                                                                                                                                                                          
 1015 root      20   0 20880  200  132 S  0.0  0.0   0:10.48 crond                                                                                                                                                                           
 1023 root      20   0 46748    4    0 S  0.0  0.0   0:00.00 saslauthd                                                                                                                                                                       
 1024 root      20   0 46748    4    0 S  0.0  0.0   0:00.00 saslauthd                                                                                                                                                                       
 3605 root      20   0 62832 2168  636 S  0.0  0.3   0:02.58 sendmail                                                                                                                                                                        
 3613 smmsp     20   0 57712 1648  504 S  0.0  0.2   0:00.01 sendmail                                                                                                                                                                        
17610 root      20   0 85932 3312 2600 S  0.0  0.4   0:00.02 sshd                                                                                                                                                                            
17612 mcmap     20   0 86072 1760 1012 S  0.0  0.2   0:00.17 sshd                                                                                                                                                                            
17613 mcmap     20   0 12076 1656 1292 S  0.0  0.2   0:00.01 bash                                                                                                                                                                            
17637 root      20   0 45052 1432 1120 S  0.0  0.2   0:00.00 su                                                                                                                                                                              
17638 root      20   0 12180 1800 1324 S  0.0  0.2   0:00.08 bash                                                                                                                                                                            
17740 root      20   0  246m 9264 4516 S  0.0  1.2   0:00.19 httpd                                                                                                                                                                           
18264 apache    20   0  282m  43m 4940 S  0.0  5.7   0:00.56 httpd                                                                                                                                                                           
18514 apache    20   0  279m  40m 4832 S  0.0  5.3   0:01.47 httpd                                                                                                                                                                           
18518 apache    20   0  273m  36m 4396 S  0.0  4.7   0:00.45 httpd                                                                                                                                                                           
18528 apache    20   0  251m  13m 3660 S  0.0  1.8   0:00.41 httpd                                                                                                                                                                           
18529 apache    20   0  278m  40m 4340 S  0.0  5.3   0:00.99 httpd                                                                                                                                                                           
18530 apache    20   0  278m  40m 4268 S  0.0  5.3   0:00.67 httpd                                                                                                                                                                           
18548 apache    20   0  272m  33m 3516 S  0.0  4.4   0:00.28 httpd                                                                                                                                                                           
18552 apache    20   0  280m  42m 3684 S  0.0  5.5   0:00.48 httpd                                                                                                                                                                           
18553 apache    20   0  271m  33m 3768 S  0.0  4.3   0:00.45 httpd                                                                                                                                                                           
18555 apache    20   0  274m  36m 3672 S  0.0  4.7   0:00.58 httpd                                                                                                                                                                           
18572 apache    20   0  247m 9020 2856 S  0.0  1.1   0:00.01 httpd                                                                                                                                                                           
18578 apache    20   0  280m  42m 3684 S  0.0  5.6   0:00.76 httpd                                                                                                                                                                           
18589 apache    20   0  246m 5452  676 S  0.0  0.7   0:00.00 httpd                                                                                                                                                                           
18588 root      20   0 12624 1216  932 R  0.0  0.2   0:00.06


free -m
             total       used       free     shared    buffers     cached
Mem:           768        578        189          0          0         74
-/+ buffers/cache:        504        263
Swap:            0          0          0

<イグ この4時間のcactiの結果の現在の画像を追加しました。しかし、以前は最大10スレッドしか利用できなかったので、改善されたように見えます。これを見て、私はもっと改善することができると思いますか?

free -m
             total       used       free     shared    buffers     cached
Mem:           768        619        148          0          0         49
-/+ buffers/cache:        570        197
Swap:            0          0          0

新しいテスト

2GB RAM の VPS ボックスで、prefork を次のように設定しました。

StartServers      20
MinSpareServers   20
MaxSpareServers   20
ServerLimit  256
MaxClients   256
MaxRequestsPerChild  4000

今日の朝、私のmemcacheサーバーは、以下の原因で死亡しました。

Nov 20 09:28:40 vps22899094 kernel: Out of memory: Kill process 12517 (memcached) score 81 or sacrifice child
Nov 20 09:28:40 vps22899094 kernel: Killed process 12517, UID 497, (memcached) total-vm:565252kB, anon-rss:42940kB, file-rss:44kB

apacheに設定する最適な値は何でしょうか?

#/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="1024"
OPTIONS="-l 127.0.0.1"

/etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

bind-address=127.0.0.1

#script
thread_concurrency=2
query_cache_size = 16M
query_cache_type=1
query_cache_limit=5M

# MyISAM #
#key-buffer-size                = 32M
#myisam-recover                 = FORCE,BACKUP

# SAFETY #
#max-allowed-packet             = 16M
#max-connect-errors             = 1000000

# CACHES AND LIMITS #
tmp-table-size                 = 32M
max-heap-table-size            = 32M
#query-cache-type               = 0
#query-cache-size               = 0
max-connections                = 50
thread-cache-size              = 16
#open-files-limit               = 65535
#table-definition-cache         = 1024
#table-open-cache               = 2048

# INNODB #
#innodb-flush-method            = O_DIRECT
#innodb-log-files-in-group      = 2
#innodb-log-file-size           = 5M
#innodb-flush-log-at-trx-commit = 1
#innodb-file-per-table          = 1
#innodb-buffer-pool-size        = 921M
# LOGGING #
log-error                      = /var/log/mysqld.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = /var/log/mysqld-slow.log

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

解決方法は?

Apacheをmod_phpで使用する場合、apacheの強制は prefork モードではなく worker . php5 がマルチスレッドをサポートしていることは知られていますが、 いくつかの php5 ライブラリはマルチスレッド環境ではあまりうまく動作しないことも知られています (たとえば、あるスレッドでロケールをコールすると、 他の php スレッドのロケールも変更されてしまうような場合などです)。

php-fpm のように php が cgi で動作していない場合、mod_php を apache 内で動作させ、apache を prefork モードで動作させています。 あなたのテストでは、単に prefork 設定をコメントアウトして worker 設定を増やしただけで、prefork 設定はデフォルト値、共有設定は若干変更された値になっています。

StartServers       20
MinSpareServers    5
MaxSpareServers    10
MaxClients         1024
MaxRequestsPerChild  0

これは、apacheに20プロセスで開始するよう依頼し、10プロセス以上何もしていない場合は、この子プロセスを減らし、5から10プロセスの間にとどめるよう指示したことを意味します。apacheの増加/減少速度は1分間に1回です。そのため、すぐに古典的な状況に戻ってしまうことになります。平均が低いのは、通常5つの利用可能なプロセスがあるためですが、トラフィックが増加するとすぐにそれらはすべて使用され、apacheが新しいフォークを作成するのが非常に遅いため、利用可能なプロセスはありません。これは、あなたのPHPリクエストがかなり長く、早く終わらないこと、そしてapacheのフォークが他のリクエストを処理できるほど早くリリースされないことから、確かに増加しています。

最後のグラフで、赤いピークの前にわずかな緑があるのがわかりますか?もしこれを5分ではなく1分単位でグラフ化すれば、この緑の部分が、エラーメッセージなしに流入するトラフィックを受け止めるには十分な量ではないことがわかるでしょう。

今度は 1024 MaxClients . この設定変更後、cactiのグラフが表示されないのは、この設定変更により、利用可能なプロセスがなくなると、apacheは新しい子プロセスをフォークし続け、ビジー状態の子プロセスは1024個に制限されるからだと思われます。子プロセスあたり20MBのRAM(またはPHPのmemory_limitが大きく、64MBや256MBのようなものを許可していて、これらのPHPリクエストは実際にはもっとRAMを使っています)、おそらくDBサーバを使用します... あなたのサーバは、768MBのRAMしかないために遅くなるのです。おそらく、apache が最初の 20 個の子供を開始しようとしたときに、すでに利用可能な RAM の限界に達しているのでしょう。

古典的な対処法としては、apache のフォークが使用するメモリ量をチェックし (実行中にいくつか top コマンドを実行します)、それからこの RAM 量でどれだけの並列リクエストを処理できるか (つまり prefork モードでの並列 apache 子) を見つけます。例えば 12 を、例えば この数字をapache mpmの設定にこのように記述します。

<IfModule prefork.c>
  StartServers       12
  MinSpareServers    12
  MaxSpareServers    12
  MaxClients         12
  MaxRequestsPerChild  300
</IfModule>

つまり、トラフィックの増減に関わらず、フォークの数を動かさないということです。なぜなら、常にすべてのRAMを使用し、トラフィックのピークに備えたいからです。そのため 300 は、300 リクエスト後に各フォークをリサイクルすることを意味します。これは 0 よりも優れており、メモリリークの問題が発生する可能性がないことを意味します。MaxClients は 12 に設定されています。 <ストライク を処理するために12より多い25または50。 ListenBacklog キューは、いくつかのリクエストを待ち行列にすることができます。 (この奇妙な sendende を削除しました。なぜこんなことを言ったのか覚えていませんが、12 件以上のリクエストが着信すると、次のものが Backlog キューにプッシュされます。) MaxClient は目標とするプロセス数に設定する必要があります。

そうそう、12個以上の並列リクエストは処理できないってことですね。

もっと多くのリクエストを処理したい場合。

  • 買い足す RAM
  • でapacheを使用してみてください。 ワーカー モードを使用しますが、mod_php を削除し、php を独自のプーラー設定を持つ並列デーモンとして使用します (これは php-fpm )、fastcgiで接続します。php-fpm を大量に並列処理させるには RAM が必要ですが、mod_php よりも少ないかもしれません。
  • phpのプロセスで費やす時間を短縮する . Cactiのグラフから、潜在的な問題がわかります。11:25-11:30にトラフィックのピークがあるか、PHPコードが非常に遅くなっているのです。高速なリクエストは、並列リクエストの数を減らすことができます。

もしあなたの問題が本当にトラフィックのピークであるなら、プロキシキャッシュサーバーのようなキャッシュで解決できるかもしれません。もし問題がPHPのランダムな遅さであるなら...それはアプリケーションの問題です、例えばPHPから他のサイトへHTTPクエリをしていませんか?

そして最後に、@Jan Vlcinsky が述べているように、次のことを試してみてください。 nginx としてのみ利用可能で、phpは php-fpm . RAMを買うことができず、大きなトラフィックを処理する必要がある場合、それは決定的にテストをdesserveだ。

更新しました。 について 内部ダミー接続 (あなたの問題であればですが、そうでないかもしれません)。

確認 このリンク 前回の回答 . これは「正常」ですが、シンプルなバーチャルホストを持っていない場合、これらのリクエストは、おそらくメインの重いアプリケーションをヒットし、遅いhttpクエリを生成し、通常のユーザーがあなたのapacheプロセスにアクセスするのを妨げています。彼らは、グレースフルリロードまたは子供の管理で生成されます。

もし、シンプルで基本的な "It works" デフォルトのバーチャルホストを持っていない場合は、いくつかの書き換えによって、アプリケーションへのこれらのリクエストを防ぐことができます。

  RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
  RewriteRule .* - [F,L]

更新しました。

1つのVirtualhostを持つことは、内部ダミー接続からあなたを保護しません、それは最悪です、あなたはこれらの接続があなたのユニークなVirtualhostで作られていることを今確信しています。そのため、リライトルールを使用することで、アプリケーションへの副作用を避ける必要があります。

あなたのcactiグラフィックスを読むと、あなたのapacheはpreforkモードではなく、workerモードのバグであるように思われます。実行 httpd -l または apache2 -l ワーカーモードの場合、アプリケーションで PHP の問題が発生する可能性がありますが、 ワーカーの設定を確認する必要があります。

<IfModule worker.c>
  StartServers           3
  MaxClients           500
  MinSpareThreads       75
  MaxSpareThreads      250 
  ThreadsPerChild       25
  MaxRequestsPerChild  300
</IfModule>

3 つのプロセスを起動し、それぞれに 25 個のスレッドがあり (つまりデフォルトでは 3*25=75 個の並列リクエストが可能)、 75 個のスレッドが何もしないことを許可し、 1 つのスレッドが使われるとすぐに新しいプロセスが fork され、さらに 25 個のスレッドが追加されます。そして、何もしていないスレッドが 250 個以上 (10 プロセス) になると、いくつかのプロセスが強制終了されます。これらの設定は、あなたのメモリと一緒に調整する必要があります。ここでは、500の並列プロセス(25スレッドで20プロセス)を許可しています。あなたの使用量はもっと多いかもしれません。

<IfModule worker.c>
  StartServers           2
  MaxClients           250
  MinSpareThreads       50
  MaxSpareThreads      150 
  ThreadsPerChild       25
  MaxRequestsPerChild  300
</IfModule>