Dalam dua hari terakhir, saya telah membangun satu set server Apache. Setiap server memiliki memori 4G dan menggunakan mode prefork. Jumlah koneksi yang ditetapkan di awal terlalu sedikit dan butuh waktu lama untuk menanggapi permintaan pengguna , saya memodifikasi file konfigurasi Apache 2.0.59 httpd.conf:
Mengutip
#prefork MPM
# StartServers: jumlah proses server yang akan dimulai
# MinSpareServers: jumlah minimum proses server yang disimpan
# MaxSpareServers: jumlah maksimum proses server yang disimpan
# MaxClients: jumlah maksimum proses server yang diperbolehkan untuk dimulai
# MaxRequestsPerChild: jumlah maksimum permintaan yang dilayani oleh proses server
Mulai Server 10
MinSpareServer 10
MaxSpareServer 15
Batas Server 2000
Klien Maks 2000
MaxRequestsPerChild 10.000
Periksa jumlah proses httpd (yaitu, jumlah permintaan bersamaan yang dapat ditangani Apache dalam mode prefork):
Perintah Linux:
Mengutip
ps -ef |.grep httpd |.wc -l
Contoh hasil pengembalian:
1388
Menunjukkan bahwa Apache dapat menangani 1388 permintaan secara bersamaan. Nilai ini dapat disesuaikan secara otomatis oleh Apache sesuai dengan beban.
Periksa jumlah permintaan bersamaan dari Apache dan status koneksi TCP-nya:
Perintah Linux:
Mengutip
netstat -n |.awk '/^tcp/ {++S[$NF]} AKHIR {untuk(a di S) cetak a, S[a]}'
(Pernyataan ini berasal dari Saya mendapatkannya dari Tuan Wang, Direktur Teknis Departemen Bisnis Komunitas Interaktif Sina, yang sangat bagus)
Contoh hasil pengembalian:
TERAKHIR_ACK 5
SYN_RECV 30
DIDIRIKAN TAHUN 1597
FIN_WAIT1 51
FIN_WAIT2 504
WAKTU_TUNGGU 1057
SYN_RECV menunjukkan jumlah permintaan yang menunggu untuk diproses; ESTABLISHED menunjukkan status transmisi data normal; TIME_WAIT menunjukkan jumlah permintaan yang telah diproses dan menunggu batas waktu berakhir.
Mengenai perubahan status TCP dapat dilihat secara jelas pada gambar berikut:
STATUS: DESKRIPSI DITUTUP: Tidak ada koneksi aktif atau sedang berlangsung DENGARKAN: Server menunggu panggilan masuk SYN_RECV: Permintaan koneksi telah tiba, menunggu konfirmasi SYN_SENT: Aplikasi telah dimulai, membuka koneksi ESTABLISHED: Status transfer data normal FIN_WAIT1: Aplikasi mengatakan Selesai FIN_WAIT2: Sisi lain telah setuju untuk melepaskan ITMED_WAIT: Tunggu hingga semua paket mati CLOSING: Kedua belah pihak mencoba menutup pada saat yang sama TIME_WAIT: Sisi lain telah menginisialisasi rilis LAST_ACK: Tunggu hingga semua paket mati