Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация потребления памяти, Каким образом? 
V
    Опции темы
Alex13
Дата 7.12.2008, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Задача такая: есть большой скрипт (форум). Памяти он потребляет от 4 до 6 мб на страницу. Необходимо это число сократить до приемлемых размеров.

Есть ли какой-то способ определить, что именно занимает память, какие переменные или ресурсы? Пока не придумал ничего лучшего, чем с помощью get_defined_vars() получить список переменных и пересмотреть их, но особого результата это не дало - общий размер полученных таким образом переменных значительно меньше потребляемой памяти.

Пересматривать и анализировать весь код вручную тоже не представляется возможным - это там около 3 Мб.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Vreden
Дата 8.12.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Idiotic Admin
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 12.7.2006

Репутация: нет
Всего: 1



Пых файл не должен весить 3мб, макс 100кб потом дробить, код по ходу дела заведомо прожорливый, тут только оптимизация, я не представляю как можно оптимизировать файл 3мб.

Ещё вариант: ООП


--------------------
Чё? Как? ©
PM MAIL WWW   Вверх
skyboy
Дата 9.12.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(Alex13 @  7.12.2008,  17:34 Найти цитируемый пост)
что именно занимает память, какие переменные или ресурсы?

не знаю таких методов.
однако, могу предположить, что используется буфферизированные запросы к БД(mysql_query или подобные) с большим количеством выбираемых данных. Или несколько результатов запросов храняться одновременно. Также возможно создание графического ресурса с большим разрешением(впрочем, для форума - маловероятно). навряд ли можно оптимизировать без знания структуры, логики и кода самого кода.
PM MAIL   Вверх
Alex13
Дата 9.12.2008, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Vreden, 3 мб - общий вес. Файлов там не меньше полусотни.

Цитата(skyboy @  9.12.2008,  04:25 Найти цитируемый пост)

однако, могу предположить, что используется буфферизированные запросы к БД(mysql_query или подобные) с большим количеством выбираемых данных. Или несколько результатов запросов храняться одновременно.

Скорее всего, корень зла где-то здесь. Насколько я заметил, ресурсы там освобождаются далеко не всегда.
Сейчас как раз занимаюсь настройкой XDebug, чтобы как-то отследить где именно съедаются ресурсы.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Wolf1994
Дата 9.12.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Цитата(Vreden @  8.12.2008,  21:45 Найти цитируемый пост)
Пых файл не должен весить 3мб, макс 100кб потом дробить,

Это влияет на читабельность кода или на скорость его выполнения / потребляемые ресурсы? Имеет ли смысл, скажем, делить файл размером 120 кб на 2 по 60, при условии, что выполнятся при одном обращении будет только один из этих файлов (то есть либо include "1.php", либо "2.php")?

Прошу прощения за оффтоп. Просто интересует этот вопрос.
PM MAIL WWW   Вверх
Alex13
Дата 9.12.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Wolf1994, это влияет на скорость загрузки скрипта в память и его трансляции.
Думаю, в вашем случае стоит разбить файл на два.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Wolf1994
Дата 9.12.2008, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: нет
Всего: 29



Alex13, спасибо за ответ.
PM MAIL WWW   Вверх
ksnk
Дата 9.12.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Wolf1994, imho, для файлов <100кб, преимущественно на читабельность. Хотя при наличии Code Explorer'а читабельность сильно не страдает. В Eclips'е все классы выстраиваются в такое-же примерно дерево что для одного файла, что для кучки...

Ну и в конце концов есть "правила хорошего тона" - один класс в одном файле. smile 

Если файл больше 100кб  - начинают уже играть скорость трансляции и скорость чтения с диска.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
youri
Дата 12.12.2008, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



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

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

можно поставить Zend Core, Zend Platform и Zend Studio. При этом никакой цикл никуда двигать не нужно будет. При запуске через внутренний отладчик будет создаваться отдельный процесс php.exe, при удаленной отладке - расти будет один из процессов php-cgi.exe
PM   Вверх
Endeveit
Дата 12.12.2008, 06:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 2.6.2006

Репутация: 1
Всего: 7



По-поводу того стоит ли хранить код в одном файле или в нескольких сказать сразу нельзя. Тут есть множество нюансов.
А по сабжу верное решение нашел сам топикстартер – xdebug, все остальное ерунда.
Для профилирования запросов MySQL советую включить лог медленных запросов и лог запросов, не использующих индексы.
Цитата(Alex13 @  9.12.2008,  16:29 Найти цитируемый пост)
3 мб - общий вес. Файлов там не меньше полусотни.

Кстати, если не установлено никаких оптимизаторов PHP, то может иметь смысл слить всю эту кучку файлов в один, тем самым избавившись от лишних дисковых операций.
Но это, опять же, сугубо личная ситуация каждого проекта.
PM WWW   Вверх
youri
Дата 12.12.2008, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



Цитата(Endeveit @  12.12.2008,  06:10 Найти цитируемый пост)
По-поводу того стоит ли хранить код в одном файле или в нескольких сказать сразу нельзя. Тут есть множество нюансов.

хранить код надо так, чтобы его было удобно читать (Правило Экономии: Время программиста дорого; сократите его, используя машинное время., Реймонд: Искусство программирования в UNIX), экономить на количестве файлов надо в редких случаях (Пайк: Стиль программирования на C)
Цитата
А по сабжу верное решение нашел сам топикстартер – xdebug, все остальное ерунда.
Для профилирования запросов MySQL советую включить лог медленных запросов и лог запросов, не использующих индексы.

ну для начала я бы действительно поискал большой и медленный запрос (с помощью соответствующего лога)
PM   Вверх
Endeveit
Дата 12.12.2008, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 2.6.2006

Репутация: 1
Всего: 7



youri, прочитайте последние две строчки моего предыдущего сообщения.
PM WWW   Вверх
youri
Дата 12.12.2008, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



Цитата(Endeveit @  12.12.2008,  06:10 Найти цитируемый пост)
Кстати, если не установлено никаких оптимизаторов PHP, то может иметь смысл слить всю эту кучку файлов в один, тем самым избавившись от лишних дисковых операций.Но это, опять же, сугубо личная ситуация каждого проекта.

эти что ли? Я их читал уже smile Во-первых у человека проблема не со скоростью, а с объемом потребляемой памяти, во-вторых прочитайте Пайк: Стиль программирования на C
хотя, возможно, бывают проекты, которым это может помочь, но думаю это редкость

Это сообщение отредактировал(а) youri - 12.12.2008, 14:50
PM   Вверх
Endeveit
Дата 12.12.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 2.6.2006

Репутация: 1
Всего: 7



Сложно разговаривать с человеком, не умеющим читать.
Если хотите конструктивного общения, потрудитесь перечитать весь топик и все посты в нем целиком.
PM WWW   Вверх
Alex13
Дата 12.12.2008, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Что касается SQL запросов - их я оптимизировал в первую очередь. Скорость выполнения так же довел до приемлемой.
А вот потребление памяти - это проблема. Пока смог выиграть только порядка мегабайта путем отключения инклудов там, где подключаемые файлы по факту не используются, но 4,5 мб - все равно много. Так что вот сижу, анализирую трейсы xdebug и ищу врагов.


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.