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 httpd
quy 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 httpd
là khoảng 24 giờ trước. Đầu ra từ free -m
là:
[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 httpd
và chạy free -m
lạ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_wsgi
và mod_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.small
ví dụ Amazon AWS ) có 1.7 Gb
RAM. 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 httpd
cà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?
nginx
có 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ù.
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";}'
-/+ buffers/cache
dò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.