pengembangan-web-mp-pd.com

Nilai optimal untuk arahan ServerLimit, MaxClients, MaxRequestsPerChild

Saya menjalankan situs padat lalu lintas banyak konten dinamis, sebagian besar dihasilkan oleh pengguna.

Server ini berdedikasi dan memiliki total 4 prosesor Intel (R) Xeon (R) CPU X3210 @ 2.13GHz. Saya perlu tahu nilai optimal untuk ServerLimit dan MaxClients arahan Apache, mengingat server memiliki 4GB RAM dan database MySQL berjalan pada server terpisah. Panel ini adalah DirectAdmin dengan CentOS.

Di bawah ini adalah arahan saya saat ini, tetapi selama jam sibuk dengan lebih dari 5k pengguna, ada kelambatan penting - dan ini bukan kesalahan MySQL secara keseluruhan, karena halaman tampaknya dihasilkan dengan cepat (saya menerapkan penghitung waktu pembuatan halaman), tetapi ada panjang penundaan koneksi hingga halaman mulai merespons dan dikirim ke browser.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

Saya harus menyebutkan bahwa pemantauan server menggunakan perintah teratas, penggunaan CPU tidak pernah melampaui 20% ~ 30% pada jam sibuk. Server MySQL juga memiliki penggunaan 30 ~ 50% pada waktu itu, dan saya terus berupaya memperbaiki kueri yang lambat, tapi itu masalah yang berbeda. Saya tahu ini bukan hambatan DB karena halaman statis juga butuh waktu lama untuk memuat pada jam sibuk.

Setiap tips untuk mengoptimalkan nilai-nilai ini akan sangat dihargai, terima kasih.

29
andreszs

MaxClients Anda WAY WAY WAY terlalu tinggi. Berapa ukuran proses Apache Anda saat ini? Lipat gandakan itu 900. Apakah itu lebih besar dari 4GB? Jika demikian, mesin kemungkinan akan beralih. Saya biasanya mulai dengan MaxClients = 2x vCPU di dalam kotak (prosesor grep -c/proc/cpuinfo). Yang dalam hal ini akan menjadi sekitar 8. Kemudian pastikan bahwa MaxClients x ukuran proses Apache tidak lebih dari 4GB.

Anda dapat meningkatkan MaxClients Anda dari sana, tergantung pada jenis koneksi yang dimiliki klien Anda. (Pengguna dial-up perlu ditipu, dll.) Tetapi pastikan Anda tidak pernah mendapatkan diri Anda dalam situasi pertukaran.

Kemudian atur Min, Max, dan Mulai server Anda ke MaxClients. Tidak perlu ada perbedaan di lingkungan server khusus.

Kemudian lakukan beberapa pengujian dengan ab (seperti catatan angsa.)

24
toppledwagon

Anda perlu mendapatkan ukuran rata-rata proses Apache Anda. Dengan nomor ini dan ukuran total RAM Anda dapat menghitung direktif MaxClients. Ingat ini: "Server web tidak boleh pernah bertukar" ( Tuning Kinerja Apache )

Pemantauan dengan top atau htop tidak apa-apa, tetapi Anda memerlukan tampilan yang lebih baik dari semua statistik server Anda (cpu, ram, disk i/o, permintaan Apache, permintaan lambat mysql, dll ...) dengan beberapa alat pemantauan seperti ganglia atau munin untuk temukan kemungkinan kemacetan.

5
hdanniel

Saya merekomendasikan bermain-main dengan alat benchmark (ab) Apache. Anda dapat bermain-main dengan nilai-nilai untuk mencocokkannya dengan arus lalu lintas Anda dan melihat jenis respons yang Anda dapatkan sejauh waktu buka rata-rata & sejenisnya. Pada titik itu Anda dapat bermain-main dengan pengaturan yang sedang Anda bicarakan untuk mencoba dan mengoptimalkannya. Anda harus dapat dengan ab untuk menangani kinerja optimal untuk setiap kinerja Tweak.

Itu tidak benar-benar bijaksana bagi saya untuk berbicara tentang pengaturan Anda, namun Anda juga perlu mempertimbangkan RAM Anda juga karena sepertinya Anda makan banyak RAM dengan pengaturan itu. Meskipun itu hanya spekulasi tanpa data. htop memberi Anda pembacaan visual yang baik tentang sumber daya Anda.

Rata-rata beban Anda juga bisa dikatakan banyak. Saya ragu bahwa penggunaan Anda jauh lebih tinggi dari jumlah total inti Anda dari 20-30% CPU, tetapi ini merupakan indikator seberapa keras server Anda benar-benar berfungsi.

4
goose