Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的作品经常面临内存不足的问题_Php_Laravel_Apache_Amazon Ec2_Server - Fatal编程技术网

Php 我的作品经常面临内存不足的问题

Php 我的作品经常面临内存不足的问题,php,laravel,apache,amazon-ec2,server,Php,Laravel,Apache,Amazon Ec2,Server,在我的生产服务器上,我经常遇到内存问题。apache错误日志经常记录此错误 856685.751702] Out of memory: Kill process 29946 (httpd) score 12 or sacrifice child [856685.757737] Killed process 29946 (httpd) total-vm:585720kB, anon-rss:25324kB, file-rss:0kB, shmem-rss:72kB 在Laravel日志文件中,我

在我的生产服务器上,我经常遇到内存问题。apache错误日志经常记录此错误

856685.751702] Out of memory: Kill process 29946 (httpd) score 12 or sacrifice child
[856685.757737] Killed process 29946 (httpd) total-vm:585720kB, anon-rss:25324kB, file-rss:0kB, shmem-rss:72kB
在Laravel日志文件中,我经常记录此错误

[2021-01-29 07:10:45] local.ERROR: Symfony\Component\Debug\Exception\FatalErrorException: Out of memory (allocated 14680064) (tried to allocate 1052672 bytes) in /var/www/html/instacutportal/vendor/guzzlehttp/psr7/src/Stream.php:228
Stack trace:
我有一些问题

  • 假设有人正在使用这个系统,他们正在登录并做一些事情。完成后,将关闭浏览器选项卡而不注销。服务器如何响应和释放资源?拉威尔能自己处理吗

  • 我有一个文件上传功能,用户可以上传200多张图片,我将其存储在S3存储桶中。图像将通过应用程序服务器传递。上传过程中是否有某个阶段的图像或(至少部分图像)保留在应用程序服务器内存中。这似乎与内存不足错误有关。简言之,它是否首先在本地存储


  • 请仔细查看错误消息:

    在/var/www/html/instacutportal/vendor/guzzlehttp/psr7/src/Stream.php:228中内存不足(已分配1468064)(试图分配1052672字节)

    PHP试图在文件/var/www/html/instacutportal/vendor/guzzlehttp/psr7/src/Stream.PHP的第228行分配1052672字节的内存,这超出了允许分配的范围

    此文件是guzzle库的一部分。在应用程序的某个地方,您与guzzle的交互方式超过了PHP内存限制设置。错误中的完整堆栈跟踪应该包含发生错误的文件和行,但这可能与第二个问题有关。根据您上载图像的方式,它可能会在上载图像之前将图像全部加载到本地内存中

    有几种方法可以解决这个问题

  • 增加php内存限制设置
  • 当您从用户提交中读取数据时,查看数据块
  • 将ui更改为一次上载一个图像并完全处理这些图像

  • laravel进程将杀死您可以在此处检查的每个请求1。内存限制设置为256M,我认为这足够了。2.我不明白这一点,你能简单地给我解释一下吗?3.在图像上载过程中,用户可以选择多个图像,但不是每个图像都将同时上载。上载图像API将为每个图像调用,因此一次只处理一个图像。我还必须提到,在上传图像之前,我正在减小图像的大小,但这种大小调整过程发生在角度侧(FE侧),它会影响服务器吗?当用户上传文件时,laravel应用程序会将文件加载到内存中以便处理它。这意味着内存限制有效地限制了文件大小。分块上传图像可能是最好的解决方案。这意味着您的角度前端将需要处理图像,并将其分解为预定义大小的块/块,然后一次将每个块/块发送到服务器。然后服务器需要一次处理一个,并将它们附加到正在写入的文件中。在laravel和angular中,可能有第三方软件包可以提供帮助。分块是一种常见的做法,尤其是在处理视频文件时。值得在谷歌上搜索更多关于您正在使用的技术和用例的信息和想法。谢谢,詹姆斯,现在我明白您的意思了。您所谈论的概念类似于流和缓冲区概念。