Apa yang harus dilakukan setelah mencapai batas maksimum koneksi Apache 256 yang ditakuti

9

Setelah menggaruk kepala saya mencoba mencari tahu mengapa situs saya merespons dengan sangat lambat meskipun sumber daya server baik-baik saja, saya akhirnya memeriksa status Apache dan menemukan:

78 requests/sec - 0.7 MB/second - 8.5 kB/request
256 requests currently being processed, 0 idle workers

Tampaknya apache saya benar-benar maksimal dengan koneksi. Siapa pun yang mencoba mengunjungi situs saya akan dimasukkan ke dalam "daftar tunggu" sampai Apache bebas lagi.

Sepertinya saya punya dua pilihan.

A) Naikkan batas koneksi maks di atas 256. Meskipun menurut artikel ini tidak begitu mudah:

Secara default, parameter MaxClients telah dikompilasi dalam batas keras 256. Ini dapat diubah dengan mengkompilasi ulang Apache. Beberapa distribusi, atau perusahaan hosting menaikkan batas ini ke nilai yang sangat tinggi, seperti 512 atau bahkan 1024 untuk mengatasi beban besar.

B) Temukan skrip yang menghabiskan terlalu banyak waktu. Ini tampaknya jauh lebih rumit bagi saya, karena sebagian besar proses apache hanya muncul dan kemudian menghilang lagi. Juga, skrip PHP situs saya dioptimalkan dengan cukup baik ... dan sekali lagi, sumber daya server baik-baik saja:

Server load 2.69 (8 CPUs)   
Memory Used 25.33% (2,039,108 of 8,048,804) 
Swap Used   1.32% (54,156 of 4,095,992)

Opsi mana (jika salah satunya) yang harus saya pilih dan bagaimana saya harus melakukannya?

EDIT

Informasi lebih lanjut: Versi Server: Apache / 2.2.23 (Unix) mod_ssl / 2.2.23 OpenSSL / 1.0.0-fips DAV / 2 mod_auth_passthrough / 2.1 mod_bwlimited / 1.4 FrontPage / 5.0.2.2635

HTTP Conf: http://pastebin.com/yBeLt6mP

Contoh Permintaan Parital: http://pastebin.com/vzUVDMPR

Alihkan Teks-Bungkus jika nampan tempel muncul aneh.

kmoney12
sumber
Artikel yang Anda kutip berusia ~ 6 tahun. Perubahan perangkat lunak. Lihat Jawaban Shane.
Chris S
1
@ ChrisS Bahkan lebih jauh dari tanggal - batas yang dikompilasi adalah 1.x (2.0 keluar pada tahun 2002), dan artikel bahkan secara eksplisit menghubungkan ke 2.0 docs.
Shane Madden

Jawaban:

10

Artikel itu tidak akurat; MaxClientsdapat dinaikkan di atas 256 saat menggunakan MPM prefork (yang saya anggap Anda gunakan saat ini berdasarkan deskripsi masalah Anda). Dari dokumentasi :

Untuk server non-utas (yaitu, prefork), MaxClientsditerjemahkan ke dalam jumlah maksimum proses anak yang akan diluncurkan untuk melayani permintaan. Nilai standarnya adalah 256; untuk meningkatkannya, Anda juga harus menaikkan ServerLimit.

ServerLimitadalah salah satu yang memiliki batas yang sulit dikompilasi, tapi itu melewati di mana Anda harus mencapai tanpa server Anda mengalami hambatan lainnya. Dokumentasi :

Ada batas keras ServerLimit 20000dikompilasi ke server (untuk prefork MPM 200000). Ini dimaksudkan untuk menghindari efek buruk yang disebabkan oleh kesalahan ketik.

Jadi, jika Anda ingin menaikkan batas klien Anda menjadi sekitar 512, maka:

MaxClients 512
ServerLimit 512

Anda juga harus melihat MPM yang Anda gunakan, karena MPM selain prefork lebih baik untuk skala. Lihat di sini untuk informasi lebih lanjut.

Shane Madden
sumber
Saya melihat core.c dan pekerja.c dari berjalan httpd -l. Saya kira itu berarti saya menjalankan MPM pekerja?
kmoney12
@hellohellosharp Memang - dalam hal ini, Anda akan ingin menyesuaikan berpotensi Anda MaxClients, ServerLimit, ThreadsPerChild, dan ThreadLimit. Bisakah Anda memberikan konfigurasi pekerja Anda saat ini httpd.conf?
Shane Madden
Ya ... apakah ada bahaya dalam memposting ini secara publik? Semoga tidak, ini dia: pastebin.com/yBeLt6mP
kmoney12
Tidak, tidak ada masalah dalam memposting sebagian besar file httpd.conf. Pastikan Anda tidak memiliki sesuatu yang aneh seperti komentar dengan kata sandi / nama pengguna / dll. Ini kadang-kadang merayap di bagian konfigurasi proxy dan sejenisnya juga. Banyak orang suka mengedit IP dan nama Domain juga, supaya mereka tidak menarik perhatian
Chris S
1
modul status dapat menunjukkan kepada Anda detail ini.
ETL
-1

Saya menyarankan agar Anda menggunakan proxy terbalik, sesuatu seperti nginx atau lighttpd dapat menangani lebih banyak koneksi daripada apache. Bergantung pada bagaimana situs Anda menggunakan htaccess Anda juga dapat menggunakan nginx / lighttpd dengan fcgi dan hilangkan apache sepenuhnya.

Shoshomiga
sumber
4
Betulkah?? Dia perlu menambahkan dua baris konfigurasi httpd.confdan solusi Anda adalah merobek sebagian besar perangkat lunak yang telah ia jalankan dan menggantinya ?! Setiap bagian dari perangkat lunak memiliki masalahnya, tetapi penyalahgunaan yang tidak berpendidikan menyebabkan masalah yang lebih buruk.
Chris S
Pada akhirnya nginx dapat menangani koneksi yang lebih aktif, tergantung pada OP untuk memutuskan apa yang akan digunakan, saya hanya mengedepankan saran saya.
Shoshomiga