Saya ingin memahami beberapa masalah kinerja server yang saya lihat dengan server web (untuk kami) yang sarat muatan. Lingkungan adalah sebagai berikut:
- Debian Lenny (semua paket stabil + di-patch ke pembaruan keamanan)
- Apache 2.2.9
- PHP 5.2.6
- Amazon EC2 contoh besar
Perilaku yang kami lihat adalah bahwa web biasanya merasa responsif, tetapi dengan sedikit keterlambatan untuk mulai menangani permintaan - terkadang sepersekian detik, kadang-kadang 2-3 detik pada waktu penggunaan puncak kami. Beban aktual di server dilaporkan sangat tinggi - sering 10.xx atau 20.xx seperti yang dilaporkan oleh top
. Lebih jauh lagi, menjalankan hal-hal lain di server selama waktu ini (bahkan vi
) sangat lambat, sehingga bebannya pasti ada di sana. Anehnya Apache tetap sangat responsif, selain itu keterlambatan awal.
Kami telah mengkonfigurasi Apache sebagai berikut, menggunakan prefork:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
Dan KeepAlive sebagai:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Melihat halaman status server, bahkan pada saat-saat beban berat ini kita jarang memukul batas klien, biasanya melayani antara 80-100 permintaan dan banyak dari mereka dalam keadaan keepalive. Itu memberitahu saya untuk mengesampingkan kelambatan permintaan awal sebagai "menunggu penangan" tapi saya mungkin salah.
Pemantauan CloudWatch Amazon memberi tahu saya bahwa bahkan ketika OS kami melaporkan beban> 15, utilisasi CPU kami antara 75-80%.
Contoh output dari top
:
top - 15:47:06 up 31 days, 1:38, 8 users, load average: 11.46, 7.10, 6.56
Tasks: 221 total, 28 running, 193 sleeping, 0 stopped, 0 zombie
Cpu(s): 66.9%us, 22.1%sy, 0.0%ni, 2.6%id, 3.1%wa, 0.0%hi, 0.7%si, 4.5%st
Mem: 7871900k total, 7850624k used, 21276k free, 68728k buffers
Swap: 0k total, 0k used, 0k free, 3750664k cached
Sebagian besar prosesnya terlihat seperti:
24720 www-data 15 0 202m 26m 4412 S 9 0.3 0:02.97 apache2
24530 www-data 15 0 212m 35m 4544 S 7 0.5 0:03.05 apache2
24846 www-data 15 0 209m 33m 4420 S 7 0.4 0:01.03 apache2
24083 www-data 15 0 211m 35m 4484 S 7 0.5 0:07.14 apache2
24615 www-data 15 0 212m 35m 4404 S 7 0.5 0:02.89 apache2
Contoh output dari vmstat
pada saat yang sama seperti di atas:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
8 0 0 215084 68908 3774864 0 0 154 228 5 7 32 12 42 9
6 21 0 198948 68936 3775740 0 0 676 2363 4022 1047 56 16 9 15
23 0 0 169460 68936 3776356 0 0 432 1372 3762 835 76 21 0 0
23 1 0 140412 68936 3776648 0 0 280 0 3157 827 70 25 0 0
20 1 0 115892 68936 3776792 0 0 188 8 2802 532 68 24 0 0
6 1 0 133368 68936 3777780 0 0 752 71 3501 878 67 29 0 1
0 1 0 146656 68944 3778064 0 0 308 2052 3312 850 38 17 19 24
2 0 0 202104 68952 3778140 0 0 28 90 2617 700 44 13 33 5
9 0 0 188960 68956 3778200 0 0 8 0 2226 475 59 17 6 2
3 0 0 166364 68956 3778252 0 0 0 21 2288 386 65 19 1 0
Dan akhirnya, output dari Apache server-status
:
Server uptime: 31 days 2 hours 18 minutes 31 seconds
Total accesses: 60102946 - Total Traffic: 974.5 GB
CPU Usage: u209.62 s75.19 cu0 cs0 - .0106% CPU load
22.4 requests/sec - 380.3 kB/second - 17.0 kB/request
107 requests currently being processed, 6 idle workers
C.KKKW..KWWKKWKW.KKKCKK..KKK.KKKK.KK._WK.K.K.KKKKK.K.R.KK..C.C.K
K.C.K..WK_K..KKW_CK.WK..W.KKKWKCKCKW.W_KKKKK.KKWKKKW._KKK.CKK...
KK_KWKKKWKCKCWKK.KKKCK..........................................
................................................................
Dari pengalaman saya yang terbatas, saya menarik kesimpulan / pertanyaan berikut:
Kami mungkin mengizinkan terlalu banyak
KeepAlive
permintaanSaya melihat beberapa waktu yang dihabiskan menunggu IO di vmstat walaupun tidak konsisten dan tidak banyak (saya pikir?) Jadi saya tidak yakin ini adalah masalah besar atau tidak, saya kurang berpengalaman dengan vmstat
Juga di vmstat, saya melihat di beberapa iterations sejumlah proses menunggu untuk dilayani, yang saya maksudkan dengan keterlambatan pemuatan halaman awal pada server web kami, mungkin secara keliru
Kami menyajikan campuran konten statis (75% atau lebih tinggi) dan konten skrip, dan konten skrip sering kali cukup intensif prosesor, sehingga menemukan keseimbangan yang tepat antara keduanya adalah penting; jangka panjang kami ingin memindahkan statika di tempat lain untuk mengoptimalkan kedua server tetapi perangkat lunak kami belum siap untuk itu hari ini
Saya senang memberikan informasi tambahan jika ada yang punya ide, catatan lainnya adalah ini adalah instalasi produksi ketersediaan tinggi jadi saya khawatir membuat tweak setelah tweak, dan itulah sebabnya saya belum bermain dengan hal-hal seperti KeepAlive
nilai sendiri namun.