sử dụng bộ nhớ httpd


13

Có một số vấn đề với việc sử dụng bộ nhớ httpd( Apache/2.2.29).

Theo thời gian, việc sử dụng bộ nhớ trong các httpdquy trình tăng lên cho đến khi cuối cùng là 100%.

Lần trước tôi khởi động lại httpdlà khoảng 24 giờ trước. Đầu ra từ free -mlà:

[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655       1415        239          0        202        424
-/+ buffers/cache:        788        866
Swap:         1023          4       1019

Để chứng minh rằng đó là điều chắc chắn httpd, tôi đã khởi động lại httpdvà chạy free -mlại:

[ec2-user@www ~]$ sudo service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[ec2-user@www ~]$ free -m
             total       used       free     shared    buffers     cached
Mem:          1655        760        894          0        202        360
-/+ buffers/cache:        197       1457
Swap:         1023          4       1019

Vì vậy, khởi động lại Apache mất bộ nhớ miễn phí từ 239 Mb đến 894 Mb - có vẻ như là một bước nhảy vọt lớn .

Tôi đã xem qua danh sách các mô-đun Apache hiện đang được kích hoạt (có khá nhiều) và bị vô hiệu hóa / loại bỏ mod_wsgimod_perl(không yêu cầu nào đối với máy chủ này đang chạy ứng dụng web dựa trên PHP - cụ thể là Magento).

Dựa trên https://servercheck.in/blog/3-small-tweaks-make-apache-fly , tôi đã chạy ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'và nhận được kết quả đầu ra sau:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}' 15.1328 MB 118.09 MB 127.449 MB 129.059 MB 117.734 MB 113.824 MB 125.062 MB 123.922 MB 119.855 MB 108.066 MB 136.23 MB 114.031 MB 113.27 MB 110.695 MB 102.113 MB 113.234 MB 186.816 MB 118.602 MB 0.835938 MB

Chạy công cụ chẩn đoán gợi ý khác cho MaxClientsđó là ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'lợi nhuận sau:

[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB

Máy chủ này ( m1.smallví dụ Amazon AWS ) có 1.7 GbRAM. Vì vậy, do đó:

Bất kỳ gợi ý / gợi ý nào khác về cách tốt nhất để điều chỉnh httpdcài đặt hoặc cách chẩn đoán chính xác điều gì có thể gây ra điều này?


Lưu ý rằng để kiểm tra việc sử dụng bộ nhớ theo các quy trình bạn cần xem qua -/+ buffers/cachedòng; tuy nhiên trong trường hợp này sự thay đổi là tương đương. Tùy thuộc vào cách apache đã được điều chỉnh, nó có thể bắt đầu chỉ bằng một vài quy trình sẵn sàng để xử lý các yêu cầu; sau một khoảng thời gian có nhiều yêu cầu đồng thời, có thể sẽ có nhiều quá trình rẽ nhánh hơn để xử lý tải. Số lượng quá trình nhàn rỗi cũng có thể được điều chỉnh. Vì vậy, nếu apache phát triển để sử dụng quá nhiều bộ nhớ, bạn cần thực hiện một số điều chỉnh.
wurtel 27/2/2015

Tôi ổn với cấu hình máy chủ Apache nhưng chưa thực hiện được một số lượng lớn về mặt điều chỉnh hiệu năng cho Apache trong quá khứ. Bất kỳ đề xuất về chỉ thị nào tôi nên xem hoặc hướng dẫn? Có cài đặt cấu hình nào tôi có thể kích hoạt để yêu cầu Apache tiêu diệt các tiến trình rẽ nhánh sau một khoảng thời gian nhất định không? (Có vẻ như Apache không làm điều này theo mặc định vì một số lý do.)
James Spittal

Đây là lý do chính xác tôi đã chuyển khỏi Apache ... hãy thử Nginx hoặc thậm chí Lighttpd.

Hấp dẫn. Nghe những điều tốt đẹp về nginxcó lẽ đã đến lúc chúng tôi thử, nhưng thành thật mà nói, tôi đã sử dụng Apache trong nhiều năm và không bao giờ có bất kỳ vấn đề lớn nào. Magento thực sự nhai bộ nhớ mặc dù.
James Spittal

Lưu ý rằng tập lệnh của bạn để tính toán mức sử dụng bộ nhớ trung bình bao gồm mức sử dụng bộ nhớ thấp của quy trình grep httpd(ít nhất là đối với tôi). Để khắc phục điều đó tôi khuyên bạn nên loại trừ dòng đó khỏi phép tính như thế này:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
MaPePeR

Câu trả lời:


11

Đây là những gì tôi đã làm để 'giải quyết' nó:

  1. Đặt MaxClients 7(dựa trên (1740.8Mb Memory on server - 900Mb for MySQL + other stuff) / 111Mb average usage per httpd process = 7.5747747747747747747747747747748)

Vì thế:

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients         7
MaxRequestsPerChild  4000
</IfModule>
  1. Vô hiệu hóa tất cả các module Apache trừ authz_host_module, log_config_module, expires_module, deflate_module, setenvif_module, mime_module, autoindex_module, negotiation_module, dir_module, alias_module, rewrite_module,php5_module

  2. Hủy bỏ mod_sslgói vì khách hàng không sử dụng https://bất cứ điều gì.

Tôi sẽ báo cáo lại khi cấu hình mới này đã chạy được một lúc để xem điều này có giải quyết được không.

Một số nguồn cảm hứng ở đây đã được mượn từ: http://www.activoinc.com/blog/2009/08/31/performance-optimized-httpd-conf-for-magento-ec Commerce /http://www.activoinc.com/ tải xuống / httpd.conf-magento


Cấu hình trên chắc chắn đã giúp ồ ạt.
James Spittal

1
Vài ngày sau, các vấn đề 'rò rỉ bộ nhớ' httpddường như đã biến mất hoàn toàn.
James Spittal

2

Tôi e ngại tùy chọn MaxRequestsPerChild đã giúp trong trường hợp của bạn, vì nó cho phép tái chế quy trình sau khi số lượng yêu cầu được xác định, do đó rò rỉ bộ nhớ ở đó, nhưng không thể nhìn thấy nữa.

Ngoài ra: MaxClents = ServerLimit * ThemesPerChild

Trong trường hợp của bạn, nếu bạn chỉ cần 7 người dùng đồng thời (MaxCl Client = 7) thì hoàn toàn đủ với 2 quy trình (chỉ trong trường hợp nếu một người sẽ không giảm thiểu thời gian chết), thì cấu hình có thể là:

<IfModule prefork.c>
StartServers       2
MinSpareServers    2
MaxSpareServers   20
ServerLimit        2
MaxClients         8
ThreadsPerChild    4
MaxRequestsPerChild  4000
</IfModule>

Tôi sử dụng MaxCl Client 8 , chỉ để phân phối yêu cầu bằng nhau hơn giữa 2 quy trình.

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.