Grundlegendes zu diesem Fehler: apr_socket_recv: Verbindung von Peer zurückgesetzt (104)

14

Wenn ich also ein Benchmarking mit Apache Benchmark (ab) durchführe und eine große Anzahl von Anfragen verwende. Dann bekomme ich manchmal mitten in einem Test diesen Fehler.

Ich weiß nicht mal was es bedeutet. Wie kann ich das beheben? Oder passiert es nur, wenn der Server sowieso zu viele Treffer bekommt? Das Problem ist, wenn ich 10.000 Treffer mache, läuft alles perfekt. Wenn ich es erneut ausführe, wird es 4000 und der Fehler wird angezeigt:

apr_socket_recv: Connection reset by peer (104)

Ein wenig über mein Setup: Ich habe Nginx statische Anfragen zu nehmen und dynamische zu Apache zu verarbeiten. Die fragliche Datei wird von nginx aus dem Cache ausgeliefert. Ich vermute also, es hat wahrscheinlich damit zu tun, wie nginx mit den Anforderungen umgeht.

Ideen?

Matthew
quelle

Antworten:

7

Der Fehler bedeutet, dass das andere Ende (Webserver) plötzlich in der Mitte der Sitzung getrennt wurde. Sehen Sie sich die Apache- oder Nginx-Fehlerprotokolle an, um festzustellen, ob dort etwas Verdächtiges vorliegt.

Aleksandar Ivanisevic
quelle
4

Dies bedeutet, dass der Server stark mit der Anfrage belastet ist, dh, alle Threads sind mit der Bearbeitung der Anfrage beschäftigt. Lösung: Erhöhen Sie entweder die Anzahl der maxThread-Attribute für den Connector in der Datei server.xml oder den Wert des acceptCount-Attributs.

acceptcount: Die maximale Warteschlangenlänge für eingehende Verbindungsanforderungen, wenn alle möglichen Anforderungsverarbeitungsthreads verwendet werden. Alle Anfragen, die eingehen, wenn die Warteschlange voll ist, werden abgelehnt.

Kushal Bafna
quelle
0

Ich hatte das gleiche Problem und meine Serverversion war:

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

Ich habe nicht benötigte Module entfernt und das Problem ist behoben:

Server Version: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips

Also verursacht eines von mod_fcgid , mod_php oder mod_perl ein Problem. Sie können versuchen, diese zu deaktivieren, wenn Sie sie nicht verwenden.

(Randnotiz: Wenn Sie Opcache verwenden, deaktivieren Sie auch Fast_shutdown. Dies verursachte ebenfalls ein Problem: opcache.fast_shutdown = 0)

Ünsal Korkmaz
quelle
0

Neben den Antworten hier habe ich viele andere gelesen:

Keiner von ihnen half.

Ich dachte darüber wrknach, zu wechseln, nachdem ich ähnliche Kämpfe gesehen hatte .

Das Problem finden

Das Problem scheint mit der Anzahl der ephermalen Ports zusammenzuhängen . Ich habe versucht, es von 50000 bis 25000 einzustellen, da dies der Portbereich ist. Immer noch kein Glück. Dann hatte ich den Eindruck, dass es mit TIME_WAIT und diesem Blogpost zusammenhängt . Ich denke, ich könnte das bestätigen:

$ 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

Was ich versucht habe

Ich habe es bisher nicht behoben: - /

Demnach habe sudo sysctl -a | grep net.ipv4.tcpich:

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
Martin Thoma
quelle
-1

Dieses Problem wird vom System verursacht. Wenn Sie eine hohe Parallelitätsanforderung an das System senden. Der Betriebssystemkern löst den SYN-Hochwasserschutz aus. Das System setzt den Link zurück. Sie können die OS-Konfiguration in der Datei ändern.

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

du kannst es versuchen.

In der Regel wurde das Attribut net.ipv4.tcp_syncookieszum Schutz des Betriebssystems verwendet, um den Angriff auf große Anforderungen zu vermeiden. Wenn Sie dieses Betriebssystem jedoch für Auslastungstests oder Leistungstests verwenden möchten, sollten Sie diese Funktion schließen.

Geldfliege
quelle