IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:HHVM

共 2 篇相关文章

IT 累计浏览 4,048

多线程下的fork及写时复制导致的性能问题

这篇讲的是贴吧在将服务从PHP-FPM迁移到HHVM(多线程模型)后,遭遇CPU使用率异常飙升的故障排查过程。问题的根源在于,程序中某个基础库调用exec执行shell命令时,会先fork进程。由于HHVM是多线程架构,其他线程在fork期间的内存写入,会频繁触发Linux内核的“写时复制”机制,导致大量不必要的内存拷贝,从而耗尽CPU资源。 作者详细剖析了写时复制的工作原理,指出在单进程模型(如PHP-FPM)下,fork后立刻exec的场景几乎不会触发复制,效率很高。但在多线程环境中,共享的地址空间让这一优化失效,成为了性能杀手。 为了解决这个问题,HHVM采用了一个巧妙的方案:提前创建一个代理进程池。当需要执行外部命令时,主线程通过管道将任务分派给处于单线程环境的代理进程,由后者去完成fork/exec操作。这样就将可能引发写时复制的操作,安全地隔离在了独立进程中,从根本上规避了性能陷阱。文章从实战故障出发,清晰揭示了多线程与操作系统机制交互时容易被忽视的深水区问题。

IT 累计浏览 3,929

PHP7 VS HHVM (WordPress)

这篇文章从PHP7与HHVM的性能争议出发,在WordPress站点上进行了一场直接的压测对比。作者使用ab工具,对两套环境(PHP7-FPM与Nginx+HHVM-3.2.0)分别进行了预热后100并发、1万次请求的测试。 结果显示,PHP7达到了258.22 QPS,略高于HHVM-3.2.0的230.97 QPS。作者据此指出,在真实Web场景下,PHP7的性能已与HHVM相当,甚至在某些情况下有所超越。更关键的是,文章深入分析了HHVM在运维层面的潜在风险:其多线程模型意味着单个线程崩溃可能导致整个服务宕机,且依赖JIT编译,在服务重启后需要预热,冷启动性能较差,调试也更为复杂。 作者最终抛出一个核心问题:当PHP7性能已然足够,且更稳定、易于维护时,我们是否还有充分的理由选择HHVM?文章同时回应了此前一些针对HHVM的性能对比案例,认为其对比方法存在缺陷,结论缺乏普适性。