Необычное PHP Потребление памяти - PullRequest
0 голосов
/ 20 марта 2020

У меня 3 сервера Apache / PHP7, работающих за балансировщиком нагрузки. 2 из 3 серверов работают без проблем уже несколько лет. Третий сервер (самый новый сервер), однако, имеет проблему потребления памяти PHP.

Во время мониторинга серверов в режиме реального времени, я заметил, что тот же вызов (пример: / user / login) будет для третьего сервера требуется в 10 раз больше памяти, чем для другого 2. Пример: 18% MEM против 1,2% MEM

В настоящее время все 3 сервера построены и управляются ansible, поэтому все 3 конфигурации должны быть в точности одинаковыми. , Однако 2 сервера, которые работают должным образом, существовали до того, как я начал использовать ansible, поэтому вполне возможно, что на этих серверах установлен набор настроек (или конфигураций), который не управляется ansible.

Все 3 сервера работают с одинаковой кодовой базой. Все 3 сервера в настоящее время работают в рабочем состоянии.

3-й сервер несколько раз перестраивался (полностью новая виртуальная машина), но всегда имеет ту же проблему, что и раньше.

У меня закончилось идеи, и я был бы признателен за любую помощь.

Примечание: я пробовал инструменты трассировки памяти, но мне было трудно их запустить и запустить в производство, поскольку они относительно агрессивны.

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Похоже, проблема была в конфигурации php на 3-м сервере. По-видимому, третий сервер был настроен на использование модуля событий MPM, в то время как другие 2 сервера были настроены на использование MPM Prefork. Когда я изменил 3-й сервер на использование MPM Prefork, я увидел, что потребление памяти go снизилось до уровня другого 2.

Я планирую разобраться в проблеме дальше и выяснить, почему другой MPM модуль имел такое необычное потребление памяти.

Обратите внимание, конфигурация mpm находится здесь: /etc/httpd/conf.modules.d/00-mpm.conf

0 голосов
/ 20 марта 2020

, поэтому вполне возможно, что на тех серверах установлен набор настроек (или конфигураций), который не управляется ansible.

Начните с этого места.

Соберите информацию о:

  • PHP версия
    • и конфигурации
  • Linux ядро ​​
    • и конфигурации ( например, swappiness)
  • lib c версия
  • версия веб-сервера
    • и конфигурация

Если предположить, что три сервера имеют одинаковый объем памяти и запущены одинаковые процессы, любое различие может быть связано только с этими параметрами.

Вы также можете попробовать выполнить пример сценария командной строки, чтобы увидеть, является ли аномалия выделения памяти появляется там тоже. Что бы это ни происходило, вы чему-то учитесь; и если он появится в скрипте, будет проще запустить один экземпляр двоичного файла PHP через strace или Valgrind один раз.

...