このエラーを理解する:apr_socket_recv:接続がピアによってリセットされました(104)


14

したがって、Apacheベンチマーク(ab)でベンチマークを実行し、大量のリクエストを使用するとします。その後、テストの途中で時々このエラーが発生します。

意味すらわかりません。どうすれば修正できますか?それとも、とにかくサーバーがあまりにも多くのヒットを取得した場合に発生するものですか?問題は、10,000ヒットを実行すると、すべてが完全に実行されることです。もう一度実行すると、4000になり、エラーが発生します。

apr_socket_recv: Connection reset by peer (104)

私のセットアップについて少し:私はnginxが静的なリクエストを取得し、動的なリクエストをApacheに処理しています。問題のファイルはnginxによってキャッシュから提供されるので、おそらくnginxがリクエストを処理する方法に関係していると思いますか?

アイデア?

回答:


7

このエラーは、セッションの途中で相手側(Webサーバー)が突然切断されたことを意味します。apacheまたはnginxのエラーログを見て、疑わしい点がないかどうかを確認してください。


4

これは、サーバーに要求が大量にロードされていること、つまり、すべてのスレッドが要求の処理でビジーであることを意味します。解決策:server.xmlファイル内のコネクターのmaxThread属性カウントを増やすか、acceptCount属性値を増やします。

acceptcount:すべての可能な要求処理スレッドが使用されている場合の着信接続要求の最大キュー長。キューがいっぱいのときに受信した要求は拒否されます。


0

私は同じ問題を抱えており、私のサーバーバージョンは

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_fcgidmod_phpまたはmod_perlのいずれかが問題を引き起こしています。使用していない場合は、それらを無効にしてみてください。

(補足:opcacheを使用している場合、fast_shutdownも無効にします。これも問題の原因でした:opcache.fast_shutdown = 0)


0

ここでの答えに加えて、私は他の多くのものを読みました。

それらのどれも助けなかった。

同様の苦労を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

-1

この問題はシステムが原因です。システムに高い並行性要求を与える場合。OSカーネルはSYNフラッド保護をトリガーします。そのため、システムはリンクをリセットします。ファイル内のOS構成を変更できます。

#vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 0 # set value is 0
#sysctl -p # read config from the config file.

あなたはそれを試すことができます。

通常、属性net.ipv4.tcp_syncookiesはOSを保護するために使用され、巨大なリクエスト攻撃を回避しました。ただし、このOSを使用して負荷テストまたはパフォーマンステストを実行する場合は、この機能を終了する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.