这是我的代码:
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字节的内存上。
答案 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 <= n
。 k
取决于您的配置。这意味着您将完全使用k * interpreter_memory + n * scipt_memory
。
如果您对脚本的内存消耗感到满意但想要实现整体内存消耗较低,那么我建议监控服务器中所有php实例的总内存使用情况(在linux中使用top,或者任务Windows中的管理器或类似的东西),同时使用Apache ab或Apache JMeter等工具产生高流量。然后尝试不同的配置以获得更好的整体性能。