したがって、Apacheベンチマーク(ab)を使用してベンチマークを行い、多数のリクエストを使用するとします。次に、テストの途中でこのエラーが発生することがあります。
それが何を意味するのかもわかりません。どうすれば修正できますか?それとも、サーバーが非常に多くのヒットを取得した場合に発生するものですか?問題は、10,000ヒットを実行すると、すべてが完全に実行されることです。もう一度実行すると、4000になり、エラーが発生します。
apr_socket_recv: Connection reset by peer (104)
私の設定について少し:私はnginxが静的リクエストを受け取り、動的リクエストをApacheに処理します。問題のファイルはnginxによってキャッシュから提供されるので、おそらくnginxがリクエストを処理する方法に関係していると思いますか?
アイデア?
エラーは、セッションの途中で、もう一方の端(Webサーバー)が突然切断されたことを意味します。 Apacheまたはnginxのエラーログを調べて、疑わしいものがないかどうかを確認してください。
これは、サーバーへのリクエストの負荷が高いこと、つまり、すべてのスレッドがリクエストの処理でビジーであることを意味します。解決策:server.xmlファイルのコネクタのmaxThread属性数を増やすか、acceptCount属性値を増やします。
acceptcount:可能なすべての要求処理スレッドが使用中の場合の、着信接続要求の最大キュー長。キューがいっぱいになったときに受け取った要求はすべて拒否されます。
同じ問題があり、サーバーのバージョンは次のとおりでした。
Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips mod_fcgid/2.3.9 PHP/5.6.5 mod_Perl/2.0.9dev Perl/v5.16.3
不要なモジュールを削除して問題が解決しました:
Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips
したがって、mod_fcgid、mod_phpまたはmod_Perlのいずれかが問題を引き起こしています。使用していない場合は無効にしてみてください。
(補足:opcacheを使用している場合は、fast_shutdownも無効にしてください。問題の原因にもなっています:opcache.fast_shutdown = 0)
ここでの回答以外にも、私は他の多くの答えを読みました:
localhost
を_127.0.0.1
_で置き換えるApacheBench, Version 2.3 <$Revision: 1807734 $>
_を持っています)-r
_を追加します(次にapr_pollset_poll: The timeout specified has expired (70007)
を取得します)それらのどれも助けませんでした。
similar struggles を見た後、 wrk
に切り替えることを考えました。
問題は ephermalポート の量に関連しているようです。これはポート範囲なので、50000から25000に設定しようとしました。まだ運がない。次に、それがTIME_WAITおよび このブログ投稿 に関連しているという印象を受けました。私はそれを確認できたと思います:
_$ netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n
1 CLOSE_WAIT
1 established)
1 Foreign
4 LISTEN
8 SYN_SENT
62 SYN_RECV
351 ESTABLISHED
13916 TIME_WAIT
_
ここまでは修正しませんでした:-/
_Sudo sysctl -a | grep net.ipv4.tcp
_によると、私は:
_net.ipv4.tcp_tw_reuse = 0 # No luck setting only that to 1
net.ipv4.tcp_max_tw_buckets = 32768
net.ipv4.tcp_fin_timeout = 60 # Setting it to 5 didn't help either
_