繁体   English   中英

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

[英]How is memory usage and limit determined for concurrent users

我需要在 php memory_limit 上清除我的好奇心

我在我的index.php文件中包含了一个文件memory.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更改为更大的内存限制。

我在 stackoverflow 上搜索过类似的问题,但我需要外行的解释。

传入的每个请求都由您的 Web 服务器(例如 Apache)处理。 现在,根据网络服务器的配置方式,它为每个请求派生一个新进程

php_value memory_limit 2M

读取和处理 PHP 脚本的单个进程最多可以使用 2mb。

这是一个体面的写作。 https://haydenjames.io/understanding-php-memory_limit/

PHP memory_limit 是每个脚本的,就像高速公路的速度限制是每个车辆一样。 例如,尽管 PHP 的内存限制可能设置为 1GB,但这并不意味着脚本会堆积使用这 1GB。

因此,举个例子,如果 10 个用户同时访问 /index.php ,您的 Web 服务器总共将使用 10x 500kb (5mb) 的内存,但这会很好,因为每个用户之前都可以达到 2mb并抛出错误。

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

这个问题的措辞有点奇怪,但不,PHP 的内存限制是每个进程/请求,所以你会没事的。 每个人最多可以使用 2mb 的内存。

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

它没有合并。

最后,PHP 的默认内存限制 (128mb) 适合大多数应用程序。 我的建议是离开它,除非你有充分的理由改变它。

memory_limitPHP 手册说明说:

这设置了允许脚本分配的最大内存量(以字节为单位)。

当它说“脚本”时,它不是指磁盘上的特定 URL 或文件,而是指该脚本的特定执行- 最常见的是对您的 Web 服务器的特定请求。

因此,如果您有多个用户请求同一页面,他们每个人都会获得 2 兆字节的“限额”(这在现代服务器上是一个非常低的限制!)。

请注意,这并不意味着,2兆字节的预分配给每个请求。 这意味着如果 PHP 决定它需要更多,它将立即停止处理页面,给用户留下一个纯白色页面,并且您的日志中会出现错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM