2013-08-07 3 views
4

Мое приложение PHP работает немного медленно, и на данный момент оно не очень эффективно. Весь мой сервер идет очень часто, и я думаю, что это приложение виновато. Я думал, что контролировать использование памяти и проверить, сколько у меня есть как предел:PHP memory_get_usage больше, чем memory_limit

echo 'Memory in use: ' . memory_get_usage() . ' ('. memory_get_usage()/1024 .'M) <br>'; 
echo 'Peak usage: ' . memory_get_peak_usage() . ' ('. memory_get_peak_usage()/1024 .'M) <br>'; 
echo 'Memory limit: ' . ini_get('memory_limit') . '<br>'; 

Это показывает следующее:

Memory in use: 629632 (614.921875M) 
Peak usage: 635696 (620.796875M) 
Memory limit: 128M 

Как это могло быть? Используемая память WAY больше, чем ограничение памяти? Либо что-то действительно сломано, либо я совсем не понимаю, как работает memory_limit (или memory_get_usage())

Спасибо всем.

+1

[memory_get_usage] (http://php.net/manual/en/function.memory-get-usage.php) возвращает его в байтах, что вы вычисляете есть на самом деле в 'kB'. Разделите его на '1024', чтобы он был в' MB' – AmazingDreams

+2

Ваша математика отключена на порядок. Разделите его на другой 1024, чтобы получить мегабайты. – datasage

ответ

7

memory_get_usage возвращает его в байтах, что вы рассчитываете, фактически находится в kB. Разделите его на 1024 снова, чтобы иметь его в MB

То же самое относится и к memory_get_peak_usage

например

echo 'Memory in use: ' . memory_get_usage() . ' ('. ((memory_get_usage()/1024)/1024) .'M) <br>'; 
+5

Я должен уйти с работы: | – Nahuel

+2

Может случиться с лучшими из нас;) – AmazingDreams