我有一个小问题,当我们为PHP设置memory_limit时,我明白它将使用该整数作为脚本使用的最大内存。
这是否意味着如果我将最大值设置为64MB并且我的脚本只需要12MB就可以使用完整的64MB只是因为它允许?
我问,因为我注意到我的一些脚本虽然使用了12MB(使用get_memory_usage发现)但是httpd进程本身接近64MB标记,即使这是唯一运行的脚本!顺便说一句,我没有内存泄漏问题。
是否还会产生其他进程,即CMD会被添加到httpd进程的整体内存使用情况?
感谢大家帮忙解决这个问题。
答案 0 :(得分:5)
PHP的memory_limit仅考虑由Zend Engine的内存管理器处理的内存(请参阅Zend/zend_alloc.c),并且此管理器不会“抢先”分配通过memory_limit设置的数量(尽管它分配了新的内存)段)。并非所有“内部”PHP都由内存管理器处理,但大多数是。您的php实例生成的其他进程不会“继承”内存管理器。因此,它们的内存消耗不计入memory_limit。
您在任务管理器中看到的(很可能是)httpd进程的working set。如果它是作为apache模块安装的,那么包括由php分配的内存(由内存管理器处理或不由内存管理器处理)。还有当前在物理内存中的httpd的任何其他内容。但它不包括由生成的进程分配的内存量。