memory_get_peak_usage与实际php进程的内存使用量之间的差异

时间:2011-09-01 16:40:26

标签: memory-management php

为什么php memory_get_peak_usage的结果与在Linux中使用'top'或'ps'命令时显示为已分配给进程的内存大小有很大差异?

我在php.ini中设置了2 Mb的memory_limit 我的单字符串php脚本

echo memory_get_peak_usage(true);

表示正在使用786432字节(768 Kb)

如果我尝试询问系统当前的php进程

echo shell_exec('ps -p '.getmypid().' -Fl');

它给了我

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
5 S www-data 14599 14593  0  80   0 - 51322 pipe_w  6976   2 18:53 ?        00:00:00 php-fpm: pool www                                      

RSS param是6976,因此内存使用量为6976 * 4096 = 28573696 = ~28 Mb

那28 Mb来自哪里,有没有办法减少php-fpm进程使用的内存大小?

3 个答案:

答案 0 :(得分:5)

内存大小主要由PHP进程本身使用。 memory_get_peak_usage()返回特定脚本使用的内存。减少内存开销的方法是删除扩展的数量,静态编译PHP等。但是不要忘记php-fpm(应该)fork和PHP进程之间的大量内存使用情况没有区别事实分享(直到它改变)。

答案 1 :(得分:1)

PHP本身可能只设置为2meg限制,但它在Apache子进程中运行,并且该进程将具有更高的内存占用量。

如果您是从命令行运行脚本,那么您将获得PHP的内存使用,因为它不包含在Apache中并且独立运行。

答案 2 :(得分:0)

峰值内存使用量仅适用于当前脚本。