关于访问 PHP 页面时使用的内存疑问

2014-08-26 10:15:52 +08:00
 kmvan
例如 a.php 被访问时,脚本执行时间为 1 秒,共占用了 10MB 内存,而我的机器只有 100M 内存,那么是不是意味着,在 1 秒内,最多只能够容纳 10 个人同时访问(不考虑虚拟内存)?
2985 次点击
所在节点    程序员
10 条回复
towser
2014-08-26 10:23:02 +08:00
差不多可以这么说。
Lucius
2014-08-26 10:37:32 +08:00
理论上好像是这样,PHP并发请求之间的内存是完全隔离的。

没有实际测试过~
lujjjh
2014-08-26 10:50:53 +08:00
FastCGI 也是支持多线程的,这也就意味着同一个进程可以同时处理多个请求。所以,要看你说的 10M 的内存是怎么算的了。

如果单纯地脚本就会消耗 10M 的内存(通常来说不太可能),并且还不开虚拟内存的话,那么确实是的,考虑上 Web 容器的话可能还不能容纳 10 个人同时访问。如果是算上 php-cgi 一共占了 10M,那倒是没关系。

当然,还是有可能属于前一种情况的,那就要优化一下代码了。比如一次性从别的地方下载 10M 的文件放到内存中,可能就符合「执行时间为 1 秒,共占用了 10MB 内存」了,这种耗时操作应该异步处理,在内存不充裕的情况下就用硬盘缓存吧。
kmvan
2014-08-26 11:11:55 +08:00
@lujjjh 如果是这样,那 wordpress 不就很坑爹吗,他加载一次,内存使用 20MB ,那么在 256M 的vps,顶多就 10个 并发就 gg 了?
lujjjh
2014-08-26 11:41:06 +08:00
@kmvan WordPress 是出了名的臃肿,不过我不清楚是不是真的如你所说加载一次就消耗 20M 的内存……不如用 ab 之类的做一下压力测试看看。访问量真的那么大的话(1 秒内有 10 个并发,PV 起码上万了吧),这配置是有些寒碜。起码给 WordPress 加一层缓存吧,或者就用更轻量级的博客系统。
seki
2014-08-26 11:47:35 +08:00
@kmvan 我很好奇 20MB 是实测值?
系统内部有内存分配资源调度,还有虚拟内存,不至于 10 个并发就 gg 吧

我没学过操作系统,单纯探讨一下
kmvan
2014-08-26 13:10:52 +08:00
@lujjjh pv W级别的wp挺多的,缓存的话我是用memcached,可能是因为这个缓存会导致内存增加量比较大?我几乎把所有sql result都放到memcached里面了。

@seki 20MB 是个初始+主题消耗的内存值(x64下的php),一般情况,wp在主题不加载内容的时候,初始值为 16MB 左右,算上主题调用的资源,20MB 吧。虚拟内存真心没啥好考虑的,那速度……
hjc4869
2014-08-26 13:16:57 +08:00
@kmvan WordPress可以用缓存插件,或者干脆怒了直接上HHVM,WordPress在HHVM上性能优异,内存占用特别稳定。
lujjjh
2014-08-26 13:24:55 +08:00
@kmvan 所以还是得回归原先的问题。20M 是单纯脚本消耗的吗?Memcached 本来就是很吃内存的,在内存不充裕的情况下就不要用本机搭 Memcached 了。至于别的缓存方法,也只能是在硬盘里缓存了,如果很在意硬盘的速度,那也只有提升配置了。还是做下压测看看吧,用数据说话。
mengzhuo
2014-08-26 13:53:19 +08:00
不到10个,到8个左右的时候你的服务器
因为各种资源抢占和内核回收资源互相争夺,磁盘IO直线上升,WAIT越来越长
----> 就挂了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129913

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX