Các giá trị tối ưu cho các chỉ thị ServerLimit, MaxCl Client, MaxRequestsPerChild


29

Tôi đang điều hành một trang web có lưu lượng truy cập lớn, nhiều nội dung động, chủ yếu do người dùng tạo.

Máy chủ này là một máy chủ chuyên dụng và có tổng cộng 4 bộ điều khiển CPU Xe32 (R) CPU X3210 @ 2.13GHz. Tôi cần biết các giá trị tối ưu cho các chỉ thị của apache ServerLimit và MaxClents, xem xét rằng máy chủ có 4GB RAM và cơ sở dữ liệu MySQL chạy trên một máy chủ riêng biệt. Bảng điều khiển là DirectAdmin với CentOS.

Dưới đây là các chỉ thị hiện tại của tôi, nhưng trong giờ cao điểm với hơn 5 nghìn người dùng, độ trễ quan trọng được nhận thấy - và đó không phải là toàn bộ lỗi của MySQL, vì các trang dường như được tạo ra nhanh chóng (tôi đã triển khai bộ đếm thời gian tạo trang), nhưng có một thời gian dài độ trễ kết nối cho đến khi trang bắt đầu phản hồi và được gửi đến trình duyệt.

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

Tôi nên đề cập rằng giám sát máy chủ bằng lệnh cao nhất, việc sử dụng CPU không bao giờ vượt quá 20% ~ 30% vào giờ cao điểm. Máy chủ MySQL cũng có mức sử dụng 30 ~ 50% tại thời điểm đó và tôi liên tục làm việc để sửa các truy vấn chậm, nhưng đó là một vấn đề khác. Tôi biết đó không phải là nút cổ chai DB vì các trang tĩnh cũng mất nhiều thời gian để tải vào giờ cao điểm.

Bất kỳ lời khuyên để tối ưu hóa các giá trị này sẽ được đánh giá rất cao, cảm ơn.

Câu trả lời:


24

MaxCl Client của bạn là CÁCH CÁCH quá cao. Kích thước hiện tại của quá trình apache của bạn là gì? Nhân số đó với x 900. Có lớn hơn 4GB không? Nếu vậy, máy có khả năng sẽ được trao đổi. Tôi thường bắt đầu với MaxCl Client = 2x vCPUs trong hộp (bộ xử lý grep -c / Proc / cpuinfo). Trong trường hợp này sẽ là khoảng 8. Sau đó, hãy đảm bảo rằng kích thước quá trình apache của MaxCl Client x không quá 4GB.

Bạn có thể tăng MaxCl Client của mình từ đó, tùy thuộc vào loại kết nối mà khách hàng của bạn có. (Người dùng quay số cần được gõ thìa, v.v.) Nhưng hãy chắc chắn rằng bạn không bao giờ rơi vào tình huống tráo đổi.

Sau đó đặt máy chủ Min, Max và Start của bạn thành MaxCl Client. Không có nhu cầu thực sự để chúng khác nhau trong một môi trường máy chủ chuyên dụng.

Sau đó làm một số thử nghiệm với ab (như ghi chú ngỗng.)


Vì một số lý do, có vẻ như tôi đã xác định kích thước quy trình sai ... bây giờ tôi thấy trong lệnh trên cùng rằng quy trình apache RESIDENT SIZE có phạm vi từ 10 đến 15MB. Tôi đọc được ở đâu đó vì các thư viện dùng chung được bao gồm trong số này, kích thước "thực" là một nửa kích thước đó. Xem xét điều này tôi nên tính toán rằng tôi có thể chứa được 570 quy trình với kích thước 7 MB mỗi quy trình, bạn có nghĩ rằng điều này là chính xác?
andreszs

Tôi khuyên bạn nên sử dụng 15 MB cho các tính toán và sau đó bắt đầu kiểm tra các số liệu: # http process so với sử dụng bộ nhớ. Điều này sẽ cung cấp cho bạn ý tưởng tốt hơn về số lượng
MaxCl Client

1
Tôi hạ nó xuống 400 và thậm chí trước giờ cao điểm, kết quả có tác dụng ngược lại so với mong muốn: Bất kỳ giá trị nào thấp hơn giá trị ban đầu đều tạo ra thời gian chờ và độ trễ dài. Thực tế bây giờ tôi đã tăng nó lên 1500 máy khách và mức sử dụng bộ nhớ hiện chỉ còn 3 GB trong khi mức sử dụng CPU trung bình là 8%. Tất nhiên bây giờ có nhiều tải hơn trên máy chủ SQL và tôi sẽ phải làm việc trong đó.
andreszs

Đây là lệnh htop của tôi bây giờ, 1500 quy trình apache và gần 100 quy trình hệ thống. Điều này với 75% sử dụng RAM. a.imagehost.org/0011/htop.png Bạn có nên xem xét lại công thức của mình không? ;)
andreszs

1
Đây là lý do tại sao bạn cần phải thử nghiệm trong môi trường của riêng bạn. Chúng tôi có các máy gia tốc http ở phía trước của apache của chúng tôi để chúng không cho người dùng di động ăn bằng thìa. Ứng dụng của bạn cũng có vẻ rất nhẹ. Nếu bạn đã chuyển tải sang DB của bạn, điều đó cho tôi biết rằng nhiều quá trình apache đó thực sự đang phục vụ dữ liệu so với việc ngồi và chờ kết nối mysql. Điều đó dẫn tôi đến hỏi bạn có bao nhiêu kết nối cho phép DB của bạn? Con số đó có vượt quá MaxCl Client của bạn không? Bạn có 5.000 kết nối đồng thời? Nếu vậy, bạn có thể muốn nhìn vào một cái gì đó như perlbal ở phía trước.
topplingwagon

5

Bạn cần phải có được kích thước trung bình của quá trình apache của bạn. Với số này và tổng kích thước RAM của bạn, bạn có thể tính toán chỉ thị MaxCl Client. Hãy nhớ điều này: "Một máy chủ web không bao giờ phải trao đổi" ( Điều chỉnh hiệu suất Apache )

Theo dõi với top hoặc htop là ổn nhưng bạn cần có cái nhìn rõ hơn về tất cả các số liệu thống kê của máy chủ của bạn (cpu, ram, i / o, yêu cầu apache, truy vấn chậm mysql, v.v.) với một số công cụ giám sát như ganglia hoặc munin để tìm các nút thắt có thể.


Hiện tại tôi chỉ có các lệnh trên cùng và htop, và dù sao tôi cũng không thể hiểu tất cả thông tin của nó. Đây là hoạt động ngày hôm qua vào giờ cao điểm, dường như không có sự hoán đổi; vui lòng cho tôi biết nếu tôi sai: Nhiệm vụ: 1043 tổng, 2 chạy, 1041 ngủ, 0 dừng, 0 zombie Cpu: 13,8% chúng tôi, 1,8% sy, 0,0% ni, 82,1% id, 0,8% wa, 0.0% hi, 1,5% si, 0.0% st Mem: 4138360k tổng, 3961276k sử dụng, 177084k miễn phí, 75016k bộ đệm Trao đổi: tổng 2031608k, 1484k sử dụng, 2030124k miễn phí, 1836600k cache
andreszs

Có, máy chủ của bạn không hoán đổi. Tôi thích các số liệu thực tế nhưng nếu bạn muốn, bạn có thể sử dụng một công cụ nhấn mạnh như ab hoặc omeperf để kiểm tra xem máy chủ của bạn có thể xử lý được bao nhiêu. Đối với các thử nghiệm, hãy chăm sóc MaxCl Client và bắt đầu với số lượng thấp (dựa trên giả định 15MB).
hdanniel

4

Tôi khuyên bạn nên chơi xung quanh với công cụ điểm chuẩn (ab) của apache. Bạn có thể chơi xung quanh với các giá trị để khớp chúng với luồng lưu lượng truy cập của bạn và xem loại phản hồi bạn nhận được theo thời gian tải trung bình và tương tự. Tại thời điểm đó, bạn có thể chơi xung quanh với các cài đặt mà bạn đang nói để thử và tối ưu hóa chúng. Bạn sẽ có thể với ab để kiểm soát hiệu suất tối ưu cho từng tinh chỉnh hiệu suất.

Tôi thực sự không thận trọng khi nói về các cài đặt của mình, tuy nhiên bạn cũng cần phải tính đến RAM của mình vì có vẻ như bạn đang ăn quá nhiều RAM với các cài đặt đó. Mặc dù đó chỉ là suy đoán mà không có dữ liệu. htop cung cấp cho bạn một hình ảnh tốt đọc tài nguyên của bạn.

Ngoài ra trung bình tải của bạn có thể nói rất nhiều. Tôi nghi ngờ rằng việc sử dụng của bạn cao hơn nhiều so với tổng số lõi của bạn từ 20-30% cpu, nhưng đó là một chỉ số khác cho thấy máy chủ của bạn thực sự hoạt động mạnh như thế nào.


Vấn đề là tôi không đủ kinh nghiệm trong quản trị máy chủ nên bắt đầu chơi xung quanh với việc giải quyết và theo dõi kết quả .. Tôi không bao giờ sử dụng công cụ ab để trung thực. Ngoài ra, việc thay đổi các giá trị yêu cầu khởi động lại HTTDP, điều này gây ra sự bất tiện cho người dùng của tôi vì vậy tôi muốn tránh điều này. Hãy tưởng tượng bạn đang gửi tin nhắn cho một người dùng khác và sau khi bạn nhấp vào "Gửi", bạn sẽ gặp sự cố kết nối Máy chủ. Về việc sử dụng CPU, hãy xem thông tin từ nhận xét trước đây của tôi: nó không vượt quá 15% vào giờ cao điểm. Tôi nghĩ rằng điều đó hoàn toàn chấp nhận được khi tôi có 6000 người dùng trực tuyến ngày hôm qua.
andreszs

Chà, tôi chắc chắn sẽ không muốn bạn làm điều này trong môi trường sản xuất. Tôi khuyên bạn nên làm điều này vào thời gian lưu lượng thấp nhất của bạn nếu một máy chủ khác (với phần cứng rất giống nhau nếu không giống hệt nhau) để kiểm tra. ab khá dễ sử dụng, nhưng tôi chắc chắn nghĩ rằng topplingwagon đã đưa ra một hướng dẫn tốt về cách tính MaxCl Client của bạn. Khi bạn ngừng sử dụng không gian hoán đổi, bạn sẽ thấy một sự cải thiện rõ ràng. kiểm tra httpd.apache.org/docs/2.0/programs/ab.htmlcyberciti.biz/tips/ gợi cho AB
ngỗng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.