Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Измерение памяти и времени в PHP [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: А также измерение по любой пользователькой функции
EuGen Администратор
Отправлено: 15 Ноября, 2013 - 18:06:18
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Hapson пишет:
http://clip2net[dot]com/s/6blBgF

Даже на Вашем примере видно, что память (поле Memory) измеряется некорректно. Она не может составлять менее 4*10.000 байт, Ваш же результат - 0.18Kb (=180 байт). И это понятно, почему - см. второй пункт в моём предыдущем сообщении.
Насчёт максимальной памяти - см. третий пункт, почему нельзя использовать memory_get_peak_usage() для определения этого (а так же код в моём примере)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Hapson
Отправлено: 15 Ноября, 2013 - 18:13:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


EuGen пишет:
Hapson пишет:
http://clip2net[dot]com/s/6blBgF

Даже на Вашем примере видно, что память (поле Memory) измеряется некорректно. Она не может составлять менее 4*10.000 байт, Ваш же результат - 0.18Kb (=180 байт). И это понятно, почему - см. второй пункт в моём предыдущем сообщении.
Насчёт максимальной памяти - см. третий пункт, почему нельзя использовать memory_get_peak_usage() для определения этого (а так же код в моём примере)

То есть если я этим кодом обернул сайт, то в итоге получаю погодные виджеты? Ну со временем проще, если мерить загрузку сайта в целом, то от истины недалеко.
А как тогда быть с памятью, если нужно измерить потребление целого скрипта? Измерить потребление памяти сайтом.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
EuGen Администратор
Отправлено: 15 Ноября, 2013 - 18:20:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Hapson пишет:
То есть если я этим кодом обернул сайт, то в итоге получаю погодные виджеты?

Не понял, о чём Вы
Hapson пишет:
А как тогда быть с памятью, если нужно измерить потребление целого скрипта

Для измерения памяти, которая была потреблена всем скриптом, целиком - вполне подойдёт memory_get_peak_usage(). Для измерения того, сколько памяти потребила конкретная функция - нет. Подумайте, зачем это нужно? А именно:

- Измерили память, потреблённую всем скриптом. Оказалось, что слишком много
- Что делать дальше? Измерять, сколько памяти потребляет конкретный участок кода (будь то функция или что-либо ещё). И вот здесь уже не помогут ни memory_get_usage() ни memory_get_peak_usage()
- Разумной альтернативой будет использовать профилировщик (и для задачи, которую Вы озвучили, это - наиболее правильное решение, поскольку только профилировщик предоставит точные данные)

Это то, что касается того, где может пригодиться возможность измерения памяти, потреблённой конкретным участком кода. Класс в данной теме предназначен для сравнительного анализа, его нельзя использовать для точных измерений, поскольку есть определённые ресурсы, которые он потребит для служебных целей. Однако, тем не менее, используя его, можно вполне достоверно узнать, что "функция X потребила на Z% больше/меньше памяти, чем функция Y" - а так же оценить порядок потребления памяти (но не абсолютно точное значение)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Hapson
Отправлено: 15 Ноября, 2013 - 18:25:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


EuGen пишет:
То есть если я этим кодом обернул сайт, то в итоге получаю погодные виджеты?

Не понял, о чём Вы

Я имел ввиду свой код. У меня в самом начале index.php определены стартовые переменные времени и памяти.
А в конце шаблона - то есть конец работы скрипта и загрузки html я вывожу значения.
Вот, это начало
http://clip2net[dot]com/s/6bmoaS
а это конец
http://clip2net[dot]com/s/6bmqeJ

(Отредактировано автором: 15 Ноября, 2013 - 18:27:09)



-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
EuGen Администратор
Отправлено: 15 Ноября, 2013 - 18:28:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Hapson пишет:
Я имел ввиду свой код. У меня в самом начале index.php определены стартовые переменные времени и памяти

Время определять так не стоит - потому что даже для всего скрипта оно будет незначащим, ведь однократное применение не даёт верного значения (тем более если речь идёт о веб-сайте, где приложение работает со многими сторонними ресурсами, порождая случайные сетевые задержки, например).
Память (Memory) - не имеет смысла, поскольку не отразит того, что делается уровнем ниже глобального.
Только "максимальная память" (Max Memory) имеет некий смысл, так как отразит максимально потреблённую память. Однако для полной картины это нужно собирать в статистических таблицах, поскольку если веб-сайт, например, работает с БД, то результат может быть разным в зависимости от её выборки и т.п.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Hapson
Отправлено: 15 Ноября, 2013 - 18:37:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


EuGen пишет:
Hapson пишет:
Я имел ввиду свой код. У меня в самом начале index.php определены стартовые переменные времени и памяти

Время определять так не стоит - потому что даже для всего скрипта оно будет незначащим, ведь однократное применение не даёт верного значения (тем более если речь идёт о веб-сайте, где приложение работает со многими сторонними ресурсами, порождая случайные сетевые задержки, например).
Память (Memory) - не имеет смысла, поскольку не отразит того, что делается уровнем ниже глобального.
Только "максимальная память" (Max Memory) имеет некий смысл, так как отразит максимально потреблённую память. Однако для полной картины это нужно собирать в статистических таблицах, поскольку если веб-сайт, например, работает с БД, то результат может быть разным в зависимости от её выборки и т.п.

Ясно.
Ну время да - погоду показывает, а не время. Значения скачут сильно.
Max memory показывает вроде как правильно.
А вот Memory... что-то я сомневаюсь, что она врет. Здесь подсчитывается, сколько памяти было выделено во время выполнения скрипта. И в эту обертку попадают как все телодвижения, так и все определения функций, классов и прочее.


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
EuGen Администратор
Отправлено: 15 Ноября, 2013 - 18:39:28
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Hapson пишет:
А вот Memory... что-то я сомневаюсь, что она врет. Здесь подсчитывается, сколько памяти было выделено во время выполнения скрипта. И в эту обертку попадают как все телодвижения, так и все определения функций, классов и прочее.

Нет, это не так - и Вы видели это на примере, который сами же и привели. Такой способ не учтёт ничего, что определено внутри окружения функций/методов


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Hapson
Отправлено: 15 Ноября, 2013 - 18:45:50
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


EuGen пишет:
Hapson пишет:
А вот Memory... что-то я сомневаюсь, что она врет. Здесь подсчитывается, сколько памяти было выделено во время выполнения скрипта. И в эту обертку попадают как все телодвижения, так и все определения функций, классов и прочее.

Нет, это не так - и Вы видели это на примере, который сами же и привели. Такой способ не учтёт ничего, что определено внутри окружения функций/методов

Ну тогда я не понимаю, откуда берется эта цифра
http://clip2net[dot]com/s/6bn1FT
У меня все действия происходят до подключения шаблона. Все происходит внутри функций. Наружу выходят только те переменные, которые нужно вывести в шаблоне.
Неужто 300 кБ используется для нескольких переменных и штук 10 подключенных черех include файлов?


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Ch_chov
Отправлено: 15 Ноября, 2013 - 18:48:04
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


Помог: 90 раз(а)




Hapson, в время работы скрипта функции берут память и освобождают её. Всю эту динамику вы этим кодом не сможете отследить. Да и не требуется это в вашем случае. Обычно всех интересует время генерации страницы и максимальный объём памяти, который выделялся для скрипта. Для этих целей ваш способ вполне подойдет.
 
 Top
Hapson
Отправлено: 15 Ноября, 2013 - 18:51:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 356
Дата рег-ции: Июнь 2013  
Откуда: Ставропольский край


Помог: 10 раз(а)

[+]


Ch_chov пишет:
Hapson, в время работы скрипта функции берут память и освобождают её. Всю эту динамику вы этим кодом не сможете отследить. Да и не требуется это в вашем случае. Обычно всех интересует время генерации страницы и максимальный объём памяти, который выделялся для скрипта. Для этих целей ваш способ вполне подойдет.

Да, теперь понял. Функция сожрала, функция освободила.
Сейчас проверил. Добавлял внутрь функции переменную и запускал функцию в цикле.
С одной и с двумя переменными Memory не меняется, а Max Memory увеличивается.
Значит действительно, memory_get_usage бесполезна


-----
ПЫХ тут - ходи туда, прежде чем писать сюда (толку больше будет)
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB