Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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 会话_start()-原因E_错误-允许的内存大小134217728字节已用尽_Php_Session_Memory_Memory Leaks_Out Of Memory - Fatal编程技术网

Php 会话_start()-原因E_错误-允许的内存大小134217728字节已用尽

Php 会话_start()-原因E_错误-允许的内存大小134217728字节已用尽,php,session,memory,memory-leaks,out-of-memory,Php,Session,Memory,Memory Leaks,Out Of Memory,在我维护的一个应用程序(基于PHP)中,我得到了连接到内存的E_错误——“允许内存大小为134217728字节…” 我熟悉临时解决方案,如为脚本设置更高的内存量等。但这只是临时解决方案,在这里我需要从根本上解决它 我已经检查了脚本中每一部分代码之后使用的内存量,只需将其写入日志文件,如: addMsg('1 - Memory Usage: ' . (memory_get_usage()/1048576) . ' MB \n'); 通过这种方法,我发现只有一行简单的代码会大幅增加内存使用量,这就

在我维护的一个应用程序(基于PHP)中,我得到了连接到内存的E_错误——“允许内存大小为134217728字节…”

我熟悉临时解决方案,如为脚本设置更高的内存量等。但这只是临时解决方案,在这里我需要从根本上解决它

我已经检查了脚本中每一部分代码之后使用的内存量,只需将其写入日志文件,如:

addMsg('1 - Memory Usage: ' . (memory_get_usage()/1048576) . ' MB \n');
通过这种方法,我发现只有一行简单的代码会大幅增加内存使用量,这就是:
session\u start()
函数,它会导致此错误

有趣的是,并不是每次加载脚本时都会发生此错误。它不时发生(根据该应用程序的高流量,每隔几分钟就会发生一次)。此外,我还从用于监视的New Relic和日志中发现了此错误。虽然,我从未经历过自己

有没有人从理论上知道这个简单的函数是如何导致内存使用导致E_错误的

此外,我所有的错误都是这样的:

Allowed memory size of 134217728 bytes exhausted (tried to allocate 10556354 bytes) in Unknown on line 0
Allowed memory size of 134217728 bytes exhausted (tried to allocate 10399243 bytes) in Unknown on line 0
Allowed memory size of 134217728 bytes exhausted (tried to allocate 8112988 bytes) in Unknown on line 0

从我的观点来看,似乎脚本想要分配的空间比允许的少,甚至出现了错误。我说得对吗?还是有其他事情在进行?

我要尝试的第一件事是增加最大内存-可能是256M我这样做是为了让应用程序运行,但它无法解决问题。这只是暂时的解决办法。如果它再次上升,我很害怕,因此增加内存不是长期解决方案session_start()可能需要大量内存,因为有大量会话数据(或者由于会话未序列化而自动实例化某些类而创建了大量数据)。检查您在会话中存储的内容。我觉得“第0行中的未知内容”很奇怪。我会检查上面的php。PHP是一个很好的Garabge集合吗?可能您的内存已经很高,您需要检查内存泄漏。你有什么架子吗,可能想看看garabge集合,但我肯定认为您需要检查代码是否存在泄漏。处理完变量后,尝试在全局范围内取消设置变量。Unset是一个很小的函数开销,用于交换一些内存。get_defined_vars()将为您提供仍然存储在内存中的所有变量。