Виникли проблеми з httpd
( Apache/2.2.29
) використанням пам'яті.
З часом використання пам'яті в httpd
процесах повзає, поки в кінцевому підсумку не стане 100%.
Востаннє я перезавантажувався httpd
близько 24 годин тому. Вихід з free -m
:
[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
Щоб довести, що це точно httpd
, я перезапустив httpd
і побіг free -m
знову:
[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
Отже, перезапуск Apache займає вільну пам'ять від 239 Мб до 894 Мб - це здається великим стрибком.
Я переглядав список ввімкнених на даний момент модулів Apache (їх досить багато), відключений / видалений mod_wsgi
і mod_perl
(жоден з них не потрібен для цього сервера, на якому працює веб-додаток на базі PHP - Magento, зокрема).
На основі https://servercheck.in/blog/3-small-tweaks-make-apache-fly , я запустив ps aux | grep 'httpd' | awk '{print $6/1024 " MB";}'
та отримав такий вихід:
[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
Запуск іншого запропонованого інструменту діагностики, для MaxClients
якого ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
повертає наступне:
[root@www ~]# ps aux | grep 'httpd' | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
110.212 MB
Цей сервер ( m1.small
екземпляр Amazon AWS ) має 1.7 Gb
оперативну пам'ять. Отже, отже:
Будь-які подальші вказівки / пропозиції щодо того, як найкраще налаштувати httpd
налаштування або як діагностувати, що саме може бути причиною цього?
nginx
тому, можливо, саме час ми спробуємо, але, чесно кажучи, я використовую Apache роками і ніколи не мав великих проблем. Magento справді жує пам’ять.
grep httpd
-процесу (принаймні, для мене). Щоб виправити це, я рекомендую виключити цей рядок із розрахунку, як це:ps aux | grep 'httpd' | grep -v grep | awk '{print $6/1024;}' | awk '{avg += ($1 - avg) / NR;} END {print avg " MB";}'
-/+ buffers/cache
рядок; однак у цьому випадку зміна є порівнянною. Залежно від налаштування apache, він може розпочатися лише з декількох процесів, готових до обробки запитів; після періоду багатьох одночасних запитів, ймовірно, буде більше процесів, розроблених для обробки навантаження. Кількість непрацюючих процесів також можна настроїти. Тож якщо apache зростає, використовуючи занадто багато пам’яті, вам потрібно зробити певну настройку.