2009-07-18 1 views
0

Проще говоря, я довольно новый PHP-кодер, и мне было интересно, сможет ли кто-нибудь направить меня к лучшим способам повышения производительности в коде, а также к прекращению этих досадных утечек памяти, мой хост является одним из тех, у которого нет APC или тому подобного, поэтому все они должны быть закодированы вручную. -_-Рекомендации по прекращению утечек памяти и повышению производительности

ответ

2

Я не думаю, что обычные утечки памяти (например, забывают уничтожать объекты или строки) распространены в PHP, но утечки ресурсов в целом. У меня были проблемы с:

соединения с базой данных
  • - вы должны действительно назвать pg_close/mysql_close/и т.д.. когда вы закончите соединение. Хотя я думаю, что пул соединений PHPs смягчает это (но может иметь проблемы самостоятельно).

  • Изображения. Если вы используете расширение gd2 для открытия или создания изображений, вам необходимо указать image_destroy, потому что в противном случае они будут занимать память навсегда. И изображения имеют тенденцию быть большими с точки зрения размера данных.

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

0

В общем, php-скрипты не могут просачиваться в память. Время выполнения php управляет всей памятью для своих скриптов. Сам сценарий может пропустить память, но это будет исправлено, когда процесс php завершится. Поскольку php в основном используется для обработки http-запросов, и они обычно выполняются в течение очень короткого времени, это делает его недействительным, если вы пропустите немного памяти. Таким образом, утечки памяти должны вас действительно беспокоить, если вы используете php для задач, отличных от http. Производительность должна быть для вас более серьезной проблемой, чем использование памяти. Используйте инструмент, например xdebug, чтобы оформить свой код.

+0

столько, сколько я хотел бы использовать xdebug, я упомянул, что мой хост не позволяет устанавливать дополнительные, но спасибо :) –

+1

Я бы не установил xdebug в производственной среде. Установите его на машину разработчика. – troelskn

+0

Я наблюдаю утечку в моем процессе, когда память не возвращается после выхода сценария. PHP, конечно, скорее всего виноват. –