У меня есть приложение PHP с помощью этих компонентов:
Я заметил, что, когда я запускаю Apache, я в конечном счете заканчиваю 10 дочерних процессов. Со временем каждый процесс вырастет в памяти, пока каждый не приблизится к 10% доступной памяти, которая начинает замедлять сервер к проверке с тех пор вместе, они растут для приведения в рабочее состояние 100% памяти.
Вот снимок моего главного вывода:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1471 apache 16 0 626m 201m 18m S 0.0 10.2 1:11.02 httpd
1470 apache 16 0 622m 198m 18m S 0.0 10.1 1:14.49 httpd
1469 apache 16 0 619m 197m 18m S 0.0 10.0 1:11.98 httpd
1462 apache 18 0 622m 197m 18m S 0.0 10.0 1:11.27 httpd
1460 apache 15 0 622m 195m 18m S 0.0 10.0 1:12.73 httpd
1459 apache 16 0 618m 191m 18m S 0.0 9.7 1:13.00 httpd
1461 apache 18 0 616m 190m 18m S 0.0 9.7 1:14.09 httpd
1468 apache 18 0 613m 190m 18m S 0.0 9.7 1:12.67 httpd
7919 apache 18 0 116m 75m 15m S 0.0 3.8 0:19.86 httpd
9486 apache 16 0 97.7m 56m 14m S 0.0 2.9 0:13.51 httpd
У меня нет продолжительных сценариев (они все завершают в конечном счете, самое длинное существо, возможно, 2 минуты длиной), и я работаю под предположением, что, после того как каждый сценарий завершается, память, которую он использует, освобождена. (Возможно, кто-то может исправить меня на этом).
Моя догадка - то, что это мог быть APC, так как это хранит данные между запросами, но в то же время кажется странным, что это хранило бы данные в процессе httpd.
Как я могу разыскать, какая часть моего приложения, вызывающего, является утечкой памяти?
Какие инструменты я могу использовать, чтобы видеть, как использование памяти растет в процессе httpd и что способствует ему?