Apache线程模式下RewriteMap prg的PHP脚本内存占用问题
关于Apache线程模式下PRG类型PHP脚本的内存占用问题
先直接给你明确结论:你的PHP脚本会以单实例运行,只会占用一份200MB内存,不会在每个Apache线程中重复加载导致内存叠加。
结合Apache官方文档里PRG程序的特性,具体原因可以拆成这几点来看:
PRG程序的独立性决定了单实例运行
Apache的PRG类型程序是在服务器启动阶段由父进程初始化启动的,它是一个完全独立于Apache工作进程/线程的外部进程。不管Apache用的是prefork(多进程)还是worker/event(线程模式),这个PRG脚本只会被启动一次,拥有自己独立的内存空间,和Apache的工作线程之间是进程间通信的关系,不是线程内部的代码执行逻辑。线程模式的工作逻辑不影响PRG的实例数
Apache的线程模式(worker/event)是在子进程里创建多个线程处理请求,但这些线程属于Apache的工作进程范畴,而你的PRG脚本是在Apache启动时就已经跑起来的独立进程,它的生命周期和Apache父进程绑定,不会跟着工作线程的创建被重复启动或加载。脚本里的while循环让它持续运行,内存里的SQLite内存数据库自然也只会保留一份。和普通PHP脚本运行的区别
这里要区分开普通PHP脚本的运行逻辑:如果你的脚本是通过mod_php在线程模式下处理请求,那每个线程首次处理请求时可能会加载相关代码,但你的场景是PRG类型——这种模式下脚本是作为持久化的独立服务存在,而非随请求启动的临时处理脚本,完全不存在多线程重复占用内存的问题。
内容的提问来源于stack exchange,提问作者voldomazta
相关产品推荐
相关产品推荐

