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.
sumber
Jawaban:
Artikel itu tidak akurat;
MaxClients
dapat dinaikkan di atas 256 saat menggunakan MPM prefork (yang saya anggap Anda gunakan saat ini berdasarkan deskripsi masalah Anda). Dari dokumentasi :ServerLimit
adalah salah satu yang memiliki batas yang sulit dikompilasi, tapi itu melewati di mana Anda harus mencapai tanpa server Anda mengalami hambatan lainnya. Dokumentasi :Jadi, jika Anda ingin menaikkan batas klien Anda menjadi sekitar 512, maka:
Anda juga harus melihat MPM yang Anda gunakan, karena MPM selain prefork lebih baik untuk skala. Lihat di sini untuk informasi lebih lanjut.
sumber
httpd -l
. Saya kira itu berarti saya menjalankan MPM pekerja?MaxClients
,ServerLimit
,ThreadsPerChild
, danThreadLimit
. Bisakah Anda memberikan konfigurasi pekerja Anda saat inihttpd.conf
?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.
sumber
httpd.conf
dan 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.