同样php代码不同服务器执行消耗内存不一致

消耗内存大的服务器配置为:1cpu 2G内存
消耗内存小的服务器配置为:1cpu 1G内存
都是nginx 1.10
php7.0
图片描述

图片描述

阅读 2.7k
2 个回答

PHP代码里可以用memory_get_usage/memory_get_peak_usage获取内存使用情况,用getrusage获取CPU使用情况.注意,memory_get_usage不包括PHP进程本身占用的内存.

要看PHP进程本身占用的内存,可以用top或者ps aux|head -n1 && ps aux|grep php-fpm:

  PID USER      PPID  NI    RES S  %CPU %MEM     TIME+ nTH P COMMAND
 6152 root      1865   0  10.8m S   0.0  0.1   1:51.03   1 0 php-fpm: master process (/opt/php/5.4/etc/php-fpm.conf)                                            +
16523 png       6152   0  32.0m S   0.0  0.4   0:15.39   1 0 php-fpm: pool www

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      6152  0.0  0.1 329392 11108 ?        Ss    2月12   1:51 php-fpm: master process (/opt/php/5.4/etc/php-fpm.conf)                                                                  
png      16523  0.0  0.4 426180 32732 ?        S     2月25   0:15 php-fpm: pool www                                               

里面的RES和RSS表示的就是PHP-FPM进程占用的物理内存,大小具体跟实际情况有关,如果opcache缓存了很多PHP脚本,内存占用则会大些,如果PHP加载了很多PECL扩展,内存也会大些.

如果你的PHP-FPM工作进程数量配置得很多,那么PHP整体占用得内存就会更大.对于非阻塞场景,PHP-FPM进程数配置为2倍CPU核心数足够,千万不要动不动就根据内存大小配置几百个进程,那会得不偿失.

如果存在阻塞脚本,那可以配置单独的动态PHP-FPM进程池来处理,把阻塞分离出来,具体可以看这里.

介个,这样比较没意义吧,一个脚本不可能放在什么地方都是一样的状态吧,这个跟环境相关,而不是一个普通的静态文本的理解。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题