【发布时间】:2020-04-07 13:04:59
【问题描述】:
我开发了一个 Web 应用程序,它使用 phpSpreadSheet 生成一些文件,并且我在 Ubuntu 服务器中有这个应用程序。 phpSpreadSheet 使用服务器的内存来生成这些文件,但是当我生成 10 次这样的文件时,我得到了这个错误:
Fatal error: Out of memory (allocated 72355840) (tried to allocate 20480 bytes) in /var/www/html/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Collection/Cells.php on line 159
我发现这是因为在生成文件后,服务器的内存仍然是满的 (image example)。有没有办法用 PHP 清理这个内存?
编辑:我发现如果我重新启动 Apache2 内存被清理,Ubuntu 有没有办法在内存已满时重新启动服务器?
【问题讨论】:
-
查看内存使用情况时,使用“free -m”命令。在 linux 中,由于内核缓存,“可用”内存非常低是正常的。您的应用程序在内存使用方面似乎非常低效。修复您的应用程序或寻找另一个处理文件生成的包可能是值得做的事情。
-
@Dimi 问题是当它执行完生成文件的方法时,内存没有被清理。因此,当我多次执行它时,内存已满。每次执行后有什么方法可以清理它吗?
-
您可以先尝试优化您的 PHP,使其使用更少的内存。您还可以了解垃圾收集:php.net/manual/en/features.gc.performance-considerations.php
-
我会仔细查看您的代码,在这里分享它可能会有所帮助,因为它可能会导致您的问题。在创建多个文件时,您通常不会看到这样的问题,并且您不必添加内容来“修复”问题。
标签: php ubuntu memory ubuntu-server phpspreadsheet