Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Скрипт ведет себя локально нормально |
Автор: V0fka 11.7.2013, 22:04 |
Привет! Есть скрипт. Запускаю его на локальной машине, где стоит Windows 7 + Denwer - скрипт в свои пики съедает ~11 Мб оперативной памяти. Динамика работы скрипта такая (в Мб): ![]() Запускаю его на сервере хостинга, где Линуксовый сервер. Параметры сейчас не скажу, но если для решения проблемы нужно какие-то параметры озвучить - говорите. Так вот, на сервере стоит ограничение на выполнение скрипта в 64 Мб и скрипту их не хватает. Стартует скрипт где-то с 8 Мб и на каждом шаге прибавляет к занимаемой памяти 4-5 Мб. Динамика работы такая (в Мб): ![]() Почему скрипт ведет себя на столько по разному? Как побороть эту беду? |
Автор: Рыжий 11.7.2013, 22:54 |
V0fka, Так а какая задача этого скрипта? Какой участок кода съедает столько памяти? Ты не дал никаких деталей, под такое поведение подходит много разных ответов... |
Автор: MoLeX 12.7.2013, 06:18 |
профилирование на каждом этапе. может он у тебя протоколы использует которые на сервере криво работают, мы же нечего не знаем об этом скрипте. |
Автор: ksnk 12.7.2013, 07:57 |
V0fka, вывести phpinfo в каждом случае и внимательно рассмотреть разницу. На Денвере запуск скрипта идет как модуль апача, он после выполнения аккуратно чистит кучки, оставшиеся от скрипта, а на сервере? Не FastCGI, случайно? Или картинки - это трекинг одного запуска скрипта? |
Автор: ksnk 12.7.2013, 14:12 |
версии php и апача, способ запуска (SERVER_SOFTWARE), ограничения на память (memory_limit). Все это внимательно обдумать и поставить memory limit побольше. ![]() |
Автор: bars80080 13.7.2013, 18:41 | ||
а в каком, к примеру, случае fastCGI не будет убирать мусор в отличие от модуля? чисто интересно, так как у меня много чего пришлось на фаст перевести |
Автор: ksnk 13.7.2013, 19:51 | ||
У меня остались какие-то смутные воспоминания про проблемы с памятью, при отладке сокет-сервера. Но это было еще на 4-ке, причем каких то ранних версий, так что сейчас уже не воспроизводится. Вероятно сейчас разницы в этом уже нет. |
Автор: V0fka 14.7.2013, 13:41 |
Локально: PHP Version 5.3.3 На сервере: PHP Version 5.2.17 Локально: Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3. И эта строка находится в группе Apache Environment. А на сервере даже такой группы нету. Локально: 128 Мб На сервере: 64 Мб Но, честно говоря, я не понимаю как именно этот показатель влияет на то, что скрипт более или менее прожорливый, ведь локально и ~11 Мб хватает. Такого я сделать не могу, т.к. этим управляет хостер. |
Автор: Fortop 14.7.2013, 14:21 |
Почитайте http://php.net/manual/en/migration53.new-features.php И это тоже http://www.php.net/manual/ru/features.gc.performance-considerations.php Советую обратить внимание на график Добавлено через 19 секунд ![]() |
Автор: V0fka 15.7.2013, 20:20 |
Fortop, а как же выйти из положения на PHP 5.2? |
Автор: Arantir 15.7.2013, 20:33 |
Если скрипт нормально работает на 5.3, то почему не обновить сервер? Если это хостинг - там точно должна быть переключалка на 5.3. Иначе не знаю, как может хватить совести у хостера не дать альтернативы на такое старье как 5.2. В 5.3 этим занимается сборщик мусора. Выйти из проблемы на 5.2 - это вручную делать unset чуть ли не в любом месте, где переменная больше не нужна. Возможно, она у Вас там такая только одна, которая память жрет. Но если их много, то будет слишком долгно все пересматривать и переписывать. |
Автор: umren 16.7.2013, 09:30 |
в PHP начиная с версии 5.3 появился GC, в 5.2 его нет. вот вам и ответ - вы не чистите память после каждой итерации вашего скрипта. |
Автор: V0fka 17.7.2013, 21:37 |
В общем, буду решать вопросы с хостером. Всем спасибо за участие в этой теме! Отдельное спасибо Fortop-у! |