Memahami kesalahan ini: apr_socket_recv: Koneksi reset oleh rekan (104)


14

Jadi, jika saya melakukan benchmark dengan apache benchmark (ab), dan saya menggunakan banyak permintaan. Lalu terkadang di tengah ujian saya mendapatkan kesalahan ini.

Saya bahkan tidak tahu apa artinya. Jadi bagaimana saya bisa memperbaikinya? Atau itu hanya sesuatu yang akan terjadi jika server mendapat terlalu banyak hit? Masalahnya adalah, jika saya menjalankan 10.000 hit, semuanya akan berjalan dengan sempurna. Jika saya jalankan lagi, ia akan mencapai 4000 dan mendapatkan kesalahan:

apr_socket_recv: Connection reset by peer (104)

Sedikit tentang pengaturan saya: Saya punya nginx mengambil permintaan statis dan memproses yang dinamis menjadi apache. File tersebut disajikan dari cache oleh nginx, jadi saya kira itu mungkin ada hubungannya dengan bagaimana nginx menangani permintaan?

Ide ide?

Jawaban:


7

Kesalahan berarti bahwa ujung lainnya (server web) tiba-tiba terputus di tengah sesi. lihat log apache atau nginx error untuk melihat apakah ada sesuatu yang mencurigakan di sana.


4

Ini berarti bahwa server penuh dengan permintaan yaitu, semua utas sedang sibuk melayani permintaan. Solusi: baik meningkatkan jumlah atribut maxThread untuk konektor dalam file server.xml atau meningkatkan nilai atribut acceptCount.

acceptcount: Panjang antrian maksimum untuk permintaan koneksi masuk saat semua kemungkinan utas pemrosesan thread sedang digunakan. Setiap permintaan yang diterima saat antrian penuh akan ditolak.


0

Saya memiliki masalah yang sama dan versi server saya adalah:

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

saya menghapus modul yang tidak perlu dan masalah hilang:

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

Jadi salah satu mod_fcgid , mod_php atau mod_perl menyebabkan masalah. Anda dapat menonaktifkannya jika tidak digunakan.

(Catatan: Jika Anda menggunakan opcache, nonaktifkan fast_shutdown juga. Itu juga menyebabkan masalah: opcache.fast_shutdown = 0)


0

Selain jawaban di sini, saya sudah membaca banyak yang lain:

Tidak ada yang membantu.

Saya berpikir untuk beralih ke wrksetelah melihat perjuangan serupa .

Menemukan masalahnya

Masalahnya tampaknya terkait dengan jumlah port ephermal . Saya mencoba mengaturnya dari 50.000 ke 25.000 karena ini adalah kisaran port. Masih belum berhasil. Lalu saya mendapat kesan itu terkait dengan TIME_WAIT dan posting blog ini . Saya pikir saya dapat mengkonfirmasi bahwa:

$ 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

Apa yang saya coba

Saya tidak memperbaikinya sejauh ini: - /

Menurut sudo sysctl -a | grep net.ipv4.tcp, saya punya:

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

Masalah ini disebabkan oleh sistem. jika memberikan permintaan konkurensi tinggi ke sistem. Kernel OS akan memicu perlindungan banjir SYN. Jadi sistem akan mengatur ulang tautannya. Anda dapat memodifikasi konfigurasi OS di file.

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

kamu bisa mencobanya.

biasanya atribut net.ipv4.tcp_syncookiesitu digunakan untuk melindungi OS untuk menghindari serangan permintaan besar. Tetapi jika Anda ingin menggunakan OS ini untuk melakukan beberapa uji beban atau uji kinerja, Anda harus menutup fitur ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.