- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
关闭。这个问题是off-topic .它目前不接受答案。
想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。
9年前关闭。
Improve this question
给出一些上下文:
最近我和一位同事讨论了在 PHP 中使用 Autoloaders 的问题。我赞成他们,他反对。
我的观点是 Autoloaders 可以帮助您最大程度地减少手动源依赖项,这反过来又可以帮助您减少在包含大量您可能不需要的大文件时消耗的内存量。
他的回答是,包含您不需要的文件并不是一个大问题,因为一旦文件被包含在 Apache 子进程的内存中,这部分内存将可用于后续请求。他认为您不应该担心包含文件的数量,因为很快它们就会全部加载到内存中并从内存中按需使用。因此,内存不是问题,尝试在文件系统上查找所需文件的开销更值得关注。
他是一个聪明的人,往往知道他在说什么。但是,我一直认为 Apache 和 PHP 使用的内存特定于正在处理的特定请求。
每个请求都分配了一个内存量等于 memory_limit PHP 选项,并且任何源代码编译和处理仅在请求的生命周期内有效。
即使使用诸如 APC 之类的操作码缓存,我认为单个请求仍然需要将每个文件加载到它自己的内存部分中,而 APC 只是为响应进程预编译它的快捷方式。
我一直在寻找有关此的一些文档,但到目前为止还没有找到任何东西。如果有人可以向我指出有关此主题的任何有用文档,我将不胜感激。
更新:
只是为了澄清,自动加载器讨论部分更多的是上下文:)。
可能不清楚,但我的主要问题是 Apache 是否会将其资源集中在一起以响应多个请求(尤其是包含文件使用的内存),或者每个请求是否需要检索满足执行路径所需的代码与从同一进程处理的其他请求隔离。
例如。:
文件 1、2、3 和 4 的大小相同,均为 100KB。
请求 A 包括文件 1、2 和 3。
请求 B 包括文件 1、2、3 和 4。
在他的脑海中,他认为请求 A 将在整个执行过程中消耗 300 KB,而请求 B 只会再消耗 100 KB,因为文件 1,2 和 3 已经在内存中。
在我看来,它是 300KB 和 400KB,因为它们都是独立处理的(如果由同一进程)。
这让他回到了他的论点,即“只包括因为你无论如何都会使用它的批次”而不是我的“只包括你需要的东西来保持请求大小”。
这对于我构建 PHP 网站的方式来说是相当重要的,所以我很想知道我是否在这里不合时宜。
我也一直认为,对于大型网站来说,内存是最宝贵的资源,而且比文件系统检查自动加载器的文件系统检查更重要,而自动加载器可能无论如何都被内核缓存了。
你是对的,是时候进行基准测试了!
最佳答案
以下是您赢得争论的方法:运行实际的基准测试,并站在数字的右侧。
我也有过同样的讨论,所以我尝试了一个实验。使用 APC,我尝试了一个带有单个整体包含(包含所有 Kohana)以及标准自动加载器的 Kohana 应用程序。最终结果是,单个包含以统计上无关的速率(小于 1%)更快,但使用的内存稍多(根据 PHP 的内存功能)。在没有 APC(或 XCache 等)的情况下运行测试毫无意义,所以我没有打扰。
所以我的结论是继续使用自动加载,因为它使用起来要简单得多。用你的应用试试同样的方法,然后把结果展示给你的 friend 。
现在您无需猜测。
免责声明:我没有使用 Apache。我怎么强调都不能在你自己的应用程序上在你自己的硬件上运行你自己的基准测试。不要相信我的经验会是你的。
关于php - apache PHP 内存使用如何真正起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11471959/
缓冲区溢出问题是众所周知的。因此,我们有幸使用标准库函数,例如 wcscat_s()。 Microsoft 的好心人已经创建了类似的安全字符串函数,例如 StringCbCat()。 但是我遇到了一个
HTTP缓存相关的问题好像是前端面试中比较常见的问题了,上来就会问什么cache-control字段有哪些,有啥区别啥的。嗯……说实话,我觉得至少在本篇来说,HTTP缓存还算不上复杂,只是字段稍
代理,其实全称应该叫做代理服务器,它是客户端与服务器之间得中间层,本质上来说代理就是一个服务器,在HTTP的链路中插入的一个中间环节,就是代理服务器啦。所谓的代理服务就是指:服务本身不生产内容,
我们在前两篇的内容中分别学习了缓存和代理,大致了解了缓存有哪些头字段,代理是如何服务于服务器和客户端的,那么把两者结合起来,代理缓存,也就是说代理服务器也可以缓存,当客户端请求数据的时候,未必一
在前面的章节,我们把HTTP/1.1的大部分核心内容都过了一遍,并且给出了基于Node环境的一部分示例代码,想必大家对HTTP/1.1已经不再陌生,那么HTTP/1.1的学习基本上就结束了。这两
我们前一篇学习了HTTP/2,相比于HTTP/1,HTTP/2在性能上有了大幅的改进,但是HTTP/2因为底层还是基于TCP协议的,虽然HTTP/2在应用层引入了流的概念,利用多路复用解决了队头
前面我们花了很大的篇幅来讲HTTP在性能上的改进,从1.0到1.1,再到2.0、3.0,HTTP通过替换底层协议,解决了一直阻塞性能提升的队头阻塞问题,在性能上达到了极致。 那么,接下
上一篇噢,我们搞明白了什么是安全的通信,这个很重要,特别重要,敲黑板!! 然后,我们还学了HTTPS到底是什么,以及HTTPS真正的核心SSL/TLS是什么。最后我们还聊了聊TLS的实
经过前两章的学习,我们知道了通信安全的定义以及TLS对其的实现~有了这些知识作为基础,我们现在可以正式的开始研究HTTPS和TLS协议了。嗯……现在才真正开始。 我记得之前大概聊过,当
这一篇文章,我们核心要聊的事情就是HTTP的对头阻塞问题,因为HTTP的核心改进其实就是在解决HTTP的队头阻塞。所以,我们会讲的理论多一些,而实践其实很少,要学习的头字段也只有一个,我会在最开始
我们在之前的文章中介绍HTTP特性的时候聊过,HTTP是无状态的,每次聊起HTTP特性的时候,我都会回忆一下从前辉煌的日子,也就是互联网变革的初期,那时候其实HTTP不需要有状态,就是个浏览页面
前面几篇文章,我从纵向的空间到横向的时间,再到一个具体的小栗子,可以说是全方位,无死角的覆盖了HTTP的大部分基本框架,但是我聊的都太宽泛了,很多内容都是一笔带过,再加上一句后面再说就草草结束了。
我的问题确实很简单,是否应该对适配器(设计模式)类进行单元测试,以及如何进行测试? 例子: 我想用PHP创建一个ClientSocket类,它是fsockopen,fread,fwrite的适配器。
目前,我在 PHP 脚本中使用此查询: SELECT * FROM `ebooks` WHERE `id`!=$ebook[id] ORDER BY RAND() LIMIT 125; 数据库最多大约
我们都知道可以使用 GetCustomAttributes 方法查询程序集的属性。我想用它来识别我的应用程序的扩展模块。但是,为了避免加载每个程序集,我更喜欢防御性方法: 使用 Assembly.Re
我正在移植一个非常大的代码库,我在处理旧代码时遇到了更多困难。 例如,这会导致编译器错误: inline CP_M_ReferenceCounted * FrAssignRef(CP_M_Refere
[关于此主题还有其他类似的问题,但是它们都没有回答我在这里提出的问题,即AFAICT。 (即,我已经阅读了所有答案,解释了为什么特定构造无法与发问者尝试进行的操作,在某些情况下,它们提供了获得所需结果
嗨 我想为需要全屏运行的网络艺术应用程序构建一个控制面板,因此所有控制颜色和速度值等内容的面板都必须位于不同的窗口中。 我的想法是建立一个数据库来存储所有这些值,当我在控制面板窗口中进行更改时,应用程
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this qu
假设我想实现一个分布式数据库(每个节点都是其他节点的副本);我听说 cdb 能够轻松地在两个节点之间进行同步,并且至少支持某种形式的冲突解决。 不幸的是我不知道 couchdb 因此我不得不问:节点“
我是一名优秀的程序员,十分优秀!