Bu hatayı anlama: apr_socket_recv: Bağlantı eş tarafından sıfırlandı (104)


14

Yani, apache benchmark (ab) ile bazı kıyaslama yaparsam ve çok sayıda istek kullanırsam. Sonra bazen testin ortasında bu hatayı alıyorum.

Bunun ne anlama geldiğini bile bilmiyorum. Nasıl düzeltebilirim? Yoksa sunucu zaten çok fazla isabet alırsa olacak bir şey mi? Sorun şu ki, 10.000 isabet alırsam her şey mükemmel bir şekilde çalışır. Tekrar çalıştırırsam, 4000'e ulaşacak ve hatayı alacaksınız:

apr_socket_recv: Connection reset by peer (104)

Kurulumum hakkında biraz: Statik istekleri alan ve dinamik olanları apache'ye işleyen nginx var. Söz konusu dosya nginx tarafından önbellekten sunulur, bu yüzden muhtemelen nginx istekleri nasıl ele alıyor ile ilgili var sanırım?

Fikirler?

Yanıtlar:


7

Hata, diğer ucun (web sunucusu) oturumun ortasında aniden kesildiği anlamına gelir. orada şüpheli bir şey olup olmadığını görmek için apache veya nginx hata günlüklerine bir göz atın.


4

Bu, sunucunun istekle yoğun bir şekilde yüklendiği anlamına gelir; yani, tüm iş parçacıkları isteğe hizmet vermekle meşguldür. Çözüm: server.xml dosyasındaki bağlayıcı için maxThread öznitelik sayısını artırın veya acceptCount öznitelik değerini artırın.

acceptcount: Tüm olası istek işleme konuları kullanımdayken gelen bağlantı istekleri için maksimum kuyruk uzunluğu. Kuyruk dolduğunda alınan istekler reddedilir.


0

Aynı sorun vardı ve benim sunucu sürümü:

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

gereksiz modülleri kaldırdım ve sorun gitti:

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

Yani mod_fcgid , mod_php veya mod_perl'den biri soruna neden oluyor. Kullanmıyorsanız bunları devre dışı bırakmayı deneyebilirsiniz.

(Yan not; opcache kullanıyorsanız, fast_shutdown'u da devre dışı bırakın. Soruna da neden oluyordu: opcache.fast_shutdown = 0)


0

Buradaki cevapların yanı sıra, bir çok cevap daha okudum:

Hiçbiri yardımcı olmadı.

Benzer mücadeleleriwrk gördükten sonra geçiş yapmayı düşündüm .

Sorunu bulma

Sorun, ephermal portların miktarı ile ilgili gibi görünüyor . Bu bağlantı noktası aralığı olduğu için 50000'den 25000'e ayarlamaya çalıştım. Hala şans yok. Sonra TIME_WAIT ve bu blog yazısı ile ilgili izlenim var . Sanırım bunu doğrulayabilirim:

$ 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

Ne denedim

Şimdiye kadar düzeltmedim: - /

Göre sudo sysctl -a | grep net.ipv4.tcp, ben var:

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

Bu sorun sistemden kaynaklanır. sisteme yüksek eşzamanlılık isteği verirse. İşletim sistemi çekirdeği SYN taşkın korumasını tetikler. Böylece sistem bağlantıyı sıfırlayacaktır. dosyadaki OS yapılandırmasını değiştirebilirsiniz.

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

deneyebilirsin.

genellikle bu özellik net.ipv4.tcp_syncookiesbüyük istek saldırısından kaçınmak için işletim sistemini korumak için kullanıldı. Ancak biraz yük testi veya performans testi yapmak için bu işletim sistemini kullanmak istiyorsanız, bu özelliği kapatmalısınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.