精确的RAM脚本使用多次同时运行?

时间:2015-09-08 02:35:10

标签: php

这是我的代码:

echo memory_get_usage() . "\n"; 
// My PHP code is here.
echo memory_get_usage() . "\n"; 

第一行总是echos 125800和第二行echos在129448附近变量。那么,这是否意味着我的所有PHP脚本至少会使用125800字节的RAM并根据需要它可以根据需要增加?

**更新 - **

我读了this question。以下是接受回答的引用

  

在查看内存使用情况时,您还必须查看解释器正在使用的内存。看看大局。 memory_get_usage()给你的数字是正确的数字。

我的问题是,如果多次运行相同的脚本,为每个脚本分配的内存是129448字节,还是解释器只占用125800的一次内存,并且脚本的更多实例运行在129448 - 125800字节的内存上。

1 个答案:

答案 0 :(得分:1)

我猜你担心脚本在Web服务器环境中的内存使用情况。

根据您的Web服务器和php配置,Web服务器可能会为每个请求生成一个单独的进程和解释器实例,或者生成使用解释器的公共实例的线程。对于Apache httpd,请参阅this。另外,对于php,请参阅第4段here(SAPI和CGI部分)。

因此,分配的总内存取决于您的配置。

除此之外,我猜你可以通过以下方式很好地估计你的php脚本的内存使用情况:

$initial_mem = memory_get_usage();
// php code
echo memory_get_usage()-$initial_mem." bytes";

这并没有考虑解释者分配的内存。

如果您运行脚本n次来回答您的问题,那么解释程序将k次运行k <= nk取决于您的配置。这意味着您将完全使用k * interpreter_memory + n * scipt_memory

如果您对脚本的内存消耗感到满意但想要实现整体内存消耗较低,那么我建议监控服务器中所有php实例的总内存使用情况(在linux中使用top,或者任务Windows中的管理器或类似的东西),同时使用Apache abApache JMeter等工具产生高流量。然后尝试不同的配置以获得更好的整体性能。