如何确定并发用户的内存使用量和限制

我需要消除对 php memory_limit 的好奇心


memory.php我在我的文件中包含了一个文件index.php下面是我使用的脚本 memory.php,用于获取页面的内存使用情况。


<?php function formatBytes($bytes, $precision = 2) {

 $units = array("b", "kb", "mb", "gb", "tb");

 $bytes = max($bytes, 0);

 $pow = floor(($bytes ? log($bytes) : 0) / log(1024)); 

 $pow = min($pow, count($units) - 1); 

 $bytes /= (1 << (10 * $pow));

 return round($bytes, $precision) . " " . $units[$pow];

 } 


print formatBytes(memory_get_peak_usage());

?>

我的index.php 使用500KB内存。


在我的.htaccess文件中我添加了这一行


php_value memory_limit 2M


我好奇的是我读到了用户concurrent在页面上的操作。

我的问题是:

  1. 例如,如果 5 个用户同时打开我的 index.php,那么内存使用量合计是 5x500KB=2.5MB 还是每个用户 500KB 内存,即使 10 个用户同时打开我的 index.php 也没关系

  2. 如果合并所有用户的内存使用情况,我仍然需要将内存更改.htaccess为更大的内存限制。

Helenr
浏览 113回答 2
2回答

繁星coding

每个传入的请求都由您的 Web 服务器(例如 Apache)处理。现在,根据网络服务器的配置方式,它会为每个请求创建一个新进程。php_value内存限制2M读取和处理 PHP 脚本的单个进程最多允许消耗 2mb。PHP memory_limit 是针对每个脚本的,就像高速公路的速度限制是针对每辆车一样。例如,尽管 PHP 的内存限制可能设置为高至 1GB,但这并不意味着脚本会堆积起来以使用该 1GB。因此,举个例子,如果 10 个用户同时访问/index.php,您的 Web 服务器将总共使用 10x 500kb (5mb) 内存,但这样也没有问题,因为每个用户之前都允许达到 2mb并抛出错误。例如,如果 5 个用户同时打开我的 index.php,那么内存使用量合计是 5x500KB=2.5MB 还是每个用户 500KB 内存,即使 10 个用户同时打开我的 index.php 也没关系这个问题的措辞有点奇怪,但不,PHP 的内存限制是每个进程/请求,所以你会没事的。每个人最多可以消耗 2mb 的内存。如果合并所有用户的内存使用情况,我仍然需要将 .htaccess 更改为更大的内存限制。它没有合并。最后,PHP 的默认内存限制(128mb)适合大多数应用程序。我的建议是保留它,除非您有充分的理由更改它。

喵喔喔

PHP手册的描述是memory_limit这样的:这设置允许脚本分配的最大内存量(以字节为单位)。当这里说“脚本”时,它并不是指磁盘上的特定 URL 或文件,而是指该脚本的特定执行- 最常见的是对 Web 服务器的特定请求。因此,如果您有多个用户请求同一页面,他们每个人都会获得 2 MB 的“限额”(这对于现代服务器来说是一个非常低的限制!)。请注意,这并不意味着为每个请求预先分配 2 MB。这意味着,如果 PHP 决定需要更多,它将立即停止处理页面,给用户留下一个纯白色的页面,并在日志中显示错误。
打开App,查看更多内容
随时随地看视频慕课网APP