V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kmvan
V2EX  ›  程序员

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

  •  
  •   kmvan · 2014-08-26 10:15:52 +08:00 · 2975 次点击
    这是一个创建于 3752 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如 a.php 被访问时,脚本执行时间为 1 秒,共占用了 10MB 内存,而我的机器只有 100M 内存,那么是不是意味着,在 1 秒内,最多只能够容纳 10 个人同时访问(不考虑虚拟内存)?
    10 条回复    2014-08-26 13:53:19 +08:00
    towser
        1
    towser  
       2014-08-26 10:23:02 +08:00   ❤️ 1
    差不多可以这么说。
    Lucius
        2
    Lucius  
       2014-08-26 10:37:32 +08:00   ❤️ 1
    理论上好像是这样,PHP并发请求之间的内存是完全隔离的。

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

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

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

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

    @seki 20MB 是个初始+主题消耗的内存值(x64下的php),一般情况,wp在主题不加载内容的时候,初始值为 16MB 左右,算上主题调用的资源,20MB 吧。虚拟内存真心没啥好考虑的,那速度……
    hjc4869
        8
    hjc4869  
       2014-08-26 13:16:57 +08:00
    @kmvan WordPress可以用缓存插件,或者干脆怒了直接上HHVM,WordPress在HHVM上性能优异,内存占用特别稳定。
    lujjjh
        9
    lujjjh  
       2014-08-26 13:24:55 +08:00
    @kmvan 所以还是得回归原先的问题。20M 是单纯脚本消耗的吗?Memcached 本来就是很吃内存的,在内存不充裕的情况下就不要用本机搭 Memcached 了。至于别的缓存方法,也只能是在硬盘里缓存了,如果很在意硬盘的速度,那也只有提升配置了。还是做下压测看看吧,用数据说话。
    mengzhuo
        10
    mengzhuo  
       2014-08-26 13:53:19 +08:00
    不到10个,到8个左右的时候你的服务器
    因为各种资源抢占和内核回收资源互相争夺,磁盘IO直线上升,WAIT越来越长
    ----> 就挂了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1016 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 20:50 · PVG 04:50 · LAX 12:50 · JFK 15:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.