memory_get_peak_usage与实际php process的差异'内存使用情况


Difference between memory_get_peak_usage and actual php process' memory usage

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

我在php.ini中设置了2mb的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参数是6976,所以内存使用量是6976 * 4096 = 28573696 = ~ 28mb

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

内存大小主要由PHP进程本身使用。memory_get_peak_usage()返回特定脚本使用的内存。减少内存开销的方法是移除扩展的数量,静态编译PHP等。但是不要忘记PHP -fpm(应该)分叉,并且许多PHP进程之间没有区别的内存使用实际上是共享的(直到它发生变化)。

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

如果您从命令行运行脚本,您将获得PHP本身的内存使用情况,因为它没有包装在Apache中,而是自己运行。

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

相关文章: