Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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脚本使httpd.exe使用大量内存_Php_Apache_Memory Leaks_Imap - Fatal编程技术网

长时间运行的PHP脚本使httpd.exe使用大量内存

长时间运行的PHP脚本使httpd.exe使用大量内存,php,apache,memory-leaks,imap,Php,Apache,Memory Leaks,Imap,我已经编写了一个连接到邮件服务器的脚本,用于下载所有附件并将其存储在数据库中 由于邮箱非常大,邮件服务器非常慢,因此需要几个小时才能完成 在处理了大约10.000条消息(消息计数不准确,且各不相同)后,脚本死亡并出现错误:“PHP致命错误:内存不足(已分配7077888)(试图分配2815819字节)” 我检查了任务管理器,httpd.exe进程的内存使用量逐渐上升到1.5GB(脚本运行1个半小时后),尽管循环中的内存使用量()不断报告351.33kB,但这并没有让我觉得脚本中有漏洞。即使有泄漏

我已经编写了一个连接到邮件服务器的脚本,用于下载所有附件并将其存储在数据库中

由于邮箱非常大,邮件服务器非常慢,因此需要几个小时才能完成

在处理了大约10.000条消息(消息计数不准确,且各不相同)后,脚本死亡并出现错误:“PHP致命错误:内存不足(已分配7077888)(试图分配2815819字节)”

我检查了任务管理器,httpd.exe进程的内存使用量逐渐上升到1.5GB(脚本运行1个半小时后),尽管循环中的内存使用量()不断报告351.33kB,但这并没有让我觉得脚本中有漏洞。即使有泄漏,我该怎么检查

我在WindowsServer2008R2上使用PHP/5.4.16(SAPI)运行Apache/2.2.17(Win32)

我的循环包括使用imap函数读取电子邮件内容,并将附件内容逐个存储在数据库中


我已经切换到memory_get_usage(true),wich几乎经常报告1.25MB

首先为什么要在Web服务器SAPI中运行此功能:如果运行时间太长,您应该将其作为来自命令的后台任务运行line@MarkBaker我同意。完成后,它将在CLI上运行。但这能解决问题吗?我还可以每隔50条左右重新启动一次进程(我会跟踪最后一条消息,所以重新启动不会有问题)。这将使内存使用率非常低,但我仍然不知道问题的原因。不,这不会解决问题,但由于我们不知道您的代码是如何编写的,因此除了不要在内存中保存大量数据外,我们无法提出其他建议。有人试图一次性获取一大块内存(2815819字节,近3MB),可能是一个很大的附件。。。。但是您的php.ini内存设置是什么?@MarkBaker在获取附件时,它应该尝试获取一些MB。但当服务器内存满时,就会发生致命错误。回答你的问题,我正在使用内存限制:256M。该限制没有达到,因为错误将是“致命错误:允许的内存大小为xxx字节已用尽”。另外,这也证明了PHP并没有将我的脚本分配的1,5GB计算在内,而事实上,这可能只是间接的