it-swarm-vi.tech

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

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 chuyên dụng và có tổng cộng 4 bộ điều khiển CPU X3210 @ 2.13GHz của Intel (R) Xeon (R). Tôi cần biết các giá trị tối ưu cho các chỉ thị của ServerLimit và MaxClents của Apache, 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.

29
andreszs

MaxCl Client của bạn là CÁCH CÁCH quá cao. Kích thước hiện tại của quy 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 quy trình MaxCl Client x Apache không vượt quá 4GB.

Bạn có thể tăng MaxClents 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ự để có 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.)

24
toppledwagon

Bạn cần phải có được kích thước trung bình của quy trình Apache của bạn. Với số này và tổng kích thước của RAM, bạn có thể tính toán chỉ thị MaxClents. 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à ok 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ể.

5
hdanniel

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 mỗi hiệu suất Tweak.

Tôi thực sự không thận trọng khi nói về cài đặt của mình, tuy nhiên bạn cũng cần đưa RAM vào tài khoản vì nghe 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.

4
goose