Tôi đang tìm hiểu một số vấn đề về hiệu suất máy chủ mà tôi đang gặp phải với một máy chủ web tải nặng (đối với chúng tôi). Môi trường như sau:
- Debian Lenny (tất cả các gói ổn định + được vá vào các bản cập nhật bảo mật)
- Apache 2.2.9
- PHP 5.2.6
- Ví dụ lớn về Amazon EC2
Hành vi chúng ta đang thấy là web thường cảm thấy phản hồi, nhưng với một chút chậm trễ để bắt đầu xử lý yêu cầu - đôi khi chỉ là một phần của giây, đôi khi là 2-3 giây trong thời gian sử dụng cao nhất của chúng tôi. Tải thực tế trên máy chủ đang được báo cáo là rất cao - thường là 10.xx hoặc 20.xx như được báo cáo bởi top
. Hơn nữa, chạy những thứ khác trên máy chủ trong những khoảng thời gian này (thậm chí vi
) là rất chậm, vì vậy tải chắc chắn là ở đó. Thật kỳ lạ, Apache vẫn rất nhạy, ngoài sự chậm trễ ban đầu đó.
Chúng tôi đã cấu hình Apache như sau, sử dụng prefork:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
Và KeepAlive như:
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
Nhìn vào trang trạng thái máy chủ, ngay cả tại những thời điểm tải nặng này, chúng tôi hiếm khi đạt đến giới hạn máy khách, thường phục vụ từ 80 đến 100 yêu cầu và nhiều trong số đó ở trạng thái giữ. Điều đó bảo tôi loại trừ yêu cầu ban đầu chậm chạp là "chờ xử lý" nhưng tôi có thể sai.
Giám sát CloudWatch của Amazon cho tôi biết rằng ngay cả khi HĐH của chúng tôi báo cáo tải> 15, mức sử dụng CPU cá thể của chúng tôi nằm trong khoảng 75-80%.
Ví dụ đầu ra từ 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
Phần lớn các quy trình trông giống như:
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
Ví dụ đầu ra từ vmstat
cùng lúc với ở trên:
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
Và cuối cùng, đầu ra từ 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..........................................
................................................................
Từ kinh nghiệm hạn chế của mình, tôi rút ra kết luận / câu hỏi sau:
Chúng tôi có thể cho phép quá nhiều
KeepAlive
yêu cầuTôi thấy có một khoảng thời gian chờ đợi IO trong vmstat mặc dù không nhất quán và không nhiều (tôi nghĩ vậy?) Nên tôi không chắc đây có phải là mối quan tâm lớn hay không, tôi ít kinh nghiệm với vmstat
Cũng trong vmstat, tôi thấy trong một số lần lặp, một số quy trình đang chờ được phục vụ, đó là điều tôi cho là sự chậm trễ tải trang ban đầu trên máy chủ web của chúng tôi, có thể là do nhầm lẫn
Chúng tôi phục vụ hỗn hợp nội dung tĩnh (75% trở lên) và nội dung tập lệnh và nội dung tập lệnh thường khá chuyên sâu về bộ xử lý, vì vậy việc tìm sự cân bằng phù hợp giữa hai nội dung là rất quan trọng; Về lâu dài, chúng tôi muốn chuyển trạng thái sang nơi khác để tối ưu hóa cả hai máy chủ nhưng phần mềm của chúng tôi chưa sẵn sàng cho điều đó ngày hôm nay
Tôi rất vui khi cung cấp thêm thông tin nếu có ai có ý tưởng nào, lưu ý khác là đây là bản cài đặt sản xuất có tính sẵn sàng cao nên tôi cảnh giác thực hiện chỉnh sửa sau khi chỉnh sửa và đó là lý do tại sao tôi không chơi với những thứ như KeepAlive
giá trị bản thân chưa.