Điều chỉnh Apache2 prefork MaxCl Client ServerLimit


22

Tôi có một máy có 128 GB Ram đang sử dụng Apache2 làm Máy chủ web (trong máy này không có Máy chủ cơ sở dữ liệu, Máy cơ sở dữ liệu là máy Ram 64 GB có thể xử lý 2000 kết nối tối đa). Tôi thấy với một công cụ giám sát hiện tại có khoảng 44 công nhân bận rộn và 12 công nhân nhàn rỗi, giá trị lý thuyết tốt nhất cho mô đun prefork của tôi là gì?

tôi có các trang trống đôi khi tải trang web vào giờ tải cao và gặp lỗi này trong nhật ký lỗi apache của tôi:

[thông báo] con pid 13595 tín hiệu thoát Lỗi phân đoạn (11)

Làm thế nào có thể giải quyết vấn đề này quá?

Cấu hình Mô đun Prefork Apache2 của tôi:

StartServers          3
MinSpareServers       3
MaxSpareServers       5
ServerLimit           3200
MaxClients            3100
MaxRequestsPerChild   0

Miễn phí -h trên Máy www :

tổng cộng: 128 G miễn phí: 97GB (với apache2 đang chạy) được chia sẻ bộ đệm 0b 1.9G cache 23G

Ram được sử dụng bởi Apache2 và các chương trình khác:

Private  +   Shared  =  RAM used    Program

 96.0 KiB +  61.0 KiB = 157.0 KiB   sh
176.0 KiB +  26.0 KiB = 202.0 KiB   atd
176.0 KiB +  35.5 KiB = 211.5 KiB   acpid
208.0 KiB +  19.5 KiB = 227.5 KiB   mdadm
204.0 KiB +  30.0 KiB = 234.0 KiB   init
248.0 KiB +  62.0 KiB = 310.0 KiB   sendmail
376.0 KiB +  36.0 KiB = 412.0 KiB   dbus-daemon
388.0 KiB + 285.5 KiB = 673.5 KiB   cron (2)
820.0 KiB +  42.0 KiB = 862.0 KiB   gam_server
920.0 KiB + 108.0 KiB =   1.0 MiB   ntpd
968.0 KiB + 243.0 KiB =   1.2 MiB   getty (6)
  1.3 MiB + 351.5 KiB =   1.6 MiB   udevd (3)
  1.5 MiB + 343.0 KiB =   1.8 MiB   sendmail-msp
  2.0 MiB + 910.0 KiB =   2.9 MiB   plugin-localresources2
  3.4 MiB +  50.0 KiB =   3.4 MiB   rsyslogd
  3.6 MiB +  68.5 KiB =   3.7 MiB   bash
  1.9 MiB +   2.1 MiB =   4.0 MiB   sendmail-mta (4)
  3.8 MiB + 556.0 KiB =   4.3 MiB   sshd (2)
  3.7 MiB +   1.2 MiB =   4.8 MiB   plugin-apache2
  5.1 MiB +   1.2 MiB =   6.3 MiB   agent-service
  7.0 MiB + 654.0 KiB =   7.6 MiB   fail2ban-server
  9.6 MiB +   2.6 MiB =  12.2 MiB   proftpd (8)
 59.2 MiB +  70.0 KiB =  59.3 MiB   miniserv.pl
 96.8 MiB +   3.6 MiB = 100.4 MiB   php5-cgi (2)
196.4 MiB +  35.9 MiB = 232.3 MiB   apache2 (40)
---------------------------------
                     tot 450.0 MiB

2
Mã ứng dụng nào đang chạy trong máy chủ web? Đó rất có thể là thủ phạm.
Shane Madden

xin vui lòng gửi một vài mẫu trạng thái apache2ctl; Có gì trong error_log không?
Hrvoje Špoljar

Câu trả lời:


63

Cài đặt prefork Apache, hướng dẫn điều chỉnh hiệu suất apache

Trích dẫn:

The single biggest hardware issue affecting webserver performance is RAM.
A webserver should never ever have to swap, as swapping increases the latency
of each request beyond a point that users consider "fast enough". 
This causes users to hit stop and reload, further increasing the load.
You can, and should, control the MaxClients setting so that your server does
not spawn so many children it starts swapping. This procedure for doing this
is simple: determine the size of your average Apache process, by looking at
your process list via a tool such as top, and divide this into your total 
available memory, leaving some room for other processes.

bạn nên thiết lập nó như thế này dựa trên đầu vào của bạn để:

  • Tổng bộ nhớ: 128 GB
  • -10% bộ nhớ cho mọi thứ trừ apache: 115 GB
  • Bây giờ chúng ta cần tìm hiểu bao nhiêu quá trình apache đơn đang sử dụng.

Để tính toán điều này, bạn có thể sử dụng tập lệnh sau:

pgrep apache2 | xargs -n1 -I{} cat /proc/{}/smaps | \
  awk '{if ($0 ~ /stack/) {pids+=1} else if ($0 ~/^Shared_/) 
    {shared+=$2} else if ($0 ~ /^Pss:/) {priv+=$2}} END {
      printf "%.2f MB\n",(priv+shared/(pids*pids))/1024}'

Đây là ước tính tốt nhất về số lượng quá trình apache đơn đang sử dụng bộ nhớ trong khi cố gắng phân chia tỷ lệ sử dụng chung cho số lượng quy trình apache đang hoạt động và thêm nó vào đầu Pss (kích thước cài đặt tỷ lệ)

Cuối cùng, bạn chia 115 GB với con số này và bạn nhận được MaxClients/ServerLimit. Từ đây bạn có thể tính toán tương đối các số liệu khác như

  • StartServers 30% khách hàng tối đa
  • MinSpareServers 5% số khách hàng tối đa
  • MaxSpareServers 10% khách hàng tối đa
  • ServerLimit == MaxCl Client
  • MaxConnectionsPerChild 10000 (thay thế bảo thủ để giải quyết vấn đề có thể xảy ra với các ứng dụng bị rò rỉ bộ nhớ)

2
Tôi hy vọng ai đó có nhiều điểm đại diện hơn tôi sẽ cho bạn bình chọn cho câu trả lời này, cảm ơn bạn rất nhiều!
Người dùng-N

2
Tập lệnh tính toán của bạn mang lại cho tôi 842,13 MB. Đó là về một thứ tự cường độ cao hơn những gì tôi sẽ làm (apache 2.2 trên CentOS 6.7).
Quinn Comendant

1
Đó là trong chế độ prefork. Đây là đầu ra từ /server-info: i.imgur.com/SS2gIXI.png
Quinn Comendant

1
@QuinnComendant lừa độc hại tuy nhiên IfModule sẽ đúng nếu mô-đun prefork có sẵn (và thực tế), và cả hai tùy chọn đều có sẵn worker và MPM ... Tôi có mức sử dụng bộ nhớ và máy chủ giống hệt trên hệ thống của tôi cho worker là ~ 850 MB. Không có cách nào prefork có thể sử dụng cho 1 tiến trình 800 MB bộ nhớ. Bạn đã thay đổi dòng trong tập lệnh nơi nó tham chiếu quá trình tên apache2 thành httpd phải không?
Hrvoje Špoljar

1
@shawn tại sao bạn lại nói như vậy? Làm thế nào để bạn tin rằng nó nên được tính toán?
Hrvoje Špoljar
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.