php实现常驻内存
PHP 实现常驻内存的方法
PHP 默认是脚本语言,每次请求结束后会释放内存。要实现常驻内存,可以采用以下几种方法:
使用 Swoole 扩展
Swoole 是一个高性能的 PHP 协程框架,支持常驻内存运行。
$server = new Swoole\Http\Server("0.0.0.0", 9501);
$server->on("request", function ($request, $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello World\n");
});
$server->start();
Swoole 启动后会一直运行在内存中,处理多个请求时不会重复初始化。
使用 PHP-PM
PHP-PM 是一个 PHP 进程管理器,通过预先加载应用实现常驻内存。
安装 PHP-PM:
composer require php-pm/php-pm
启动应用:
php vendor/bin/ppm start --bootstrap=symfony --app-env=prod --workers=8
PHP-PM 会保持多个 worker 进程常驻内存,大幅提升性能。

使用 RoadRunner
RoadRunner 是用 Go 编写的高性能 PHP 应用服务器。
安装 RoadRunner:
composer require spiral/roadrunner
创建配置文件 .rr.yaml:
http:
address: 0.0.0.0:8080
workers:
command: "php worker.php"
pool:
numWorkers: 4
启动服务:

./rr serve
使用 OpenSwoole
OpenSwoole 是 Swoole 的一个分支,同样支持常驻内存。
$http = new OpenSwoole\Http\Server("0.0.0.0", 9501);
$http->on("start", function ($server) {
echo "Server started at http://0.0.0.0:9501\n";
});
$http->on("request", function ($request, $response) {
$response->end("Hello World");
});
$http->start();
使用 PHP-FPM 配合 OPcache
虽然不是完全的常驻内存,但可以通过 OPcache 缓存编译后的脚本:
在 php.ini 中配置:
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.save_comments=1
这种方法可以减少脚本重复编译的开销,但不能保持应用状态。
注意事项
- 常驻内存应用需要注意内存泄漏问题
- 长时间运行的应用需要处理连接池和资源回收
- 需要特别处理信号和进程管理
- 开发环境和生产环境配置可能不同
以上方法可以根据具体需求选择,Swoole 和 RoadRunner 适合高性能应用,PHP-PM 适合传统框架的优化,OPcache 则是最简单的性能提升方案。






