要让 CodeIgniter(CI) 实现每秒 3000+ RPS(Requests Per Second)的高并发处理能力,需要从 框架优化、服务器配置、代码设计 等多方面入手。尽管 CI 本身是一个轻量级框架,但其默认配置和传统 PHP-FPM 模式的性能天花板较低(通常 RPS 在 500-800 左右),需通过以下优化策略突破性能瓶颈:
一、核心优化方向
1. 升级 PHP 版本与启用 OPcache
PHP 8+:使用 PHP 8.0 及以上版本,其 JIT(Just-In-Time)编译器可显著提升执行效率。
OPcache 配置:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0 # 生产环境关闭文件变更检测
2. 服务器架构优化
Web 服务器:使用 Nginx 替代 Apache,配置高效事件驱动模型:
events {
worker_connections 10240;
use epoll; # Linux 下高性能事件模型
}
http {
gzip off; # 高并发下关闭压缩减少 CPU 开销
access_log off; # 关闭访问日志
}
PHP-FPM 调优:
pm = static
pm.max_children = 100 # 根据内存调整(每个进程约占用 20-50MB)
pm.max_requests = 1000 # 防止内存泄漏
3. 框架层优化
禁用 CI 非必要组件:
关闭 hooks
、libraries
、helpers
的自动加载。
移除未使用的路由、中间件和过滤器。
缓存路由与配置:
// 生产环境生成缓存文件
$route['default_controller'] = 'welcome';
$this->config->set_item('cache_routes', TRUE);
- 简化 Session 处理:
使用 Redis 替代文件存储 Session:
$config['sess_driver'] = 'redis';
$config['sess_save_path'] = 'tcp://127.0.0.1:6379';
4. 数据库优化
连接池与持久化:
使用 MySQLi 持久连接(
mysqli_pconnect
)或集成 Swoole MySQL 协程连接池。配置数据库连接复用,避免频繁建立连接。
查询优化:
为高频查询添加缓存(Redis/Memcached),缓存时间根据业务调整。
使用 EXPLAIN 分析慢查询,优化索引设计。
读写分离:
主库处理写操作,从库处理读操作,通过 CI 扩展实现自动路由。
5. 代码级优化
减少类加载开销:
手动加载必要类库,避免
autoload
配置过多文件。使用
require_once
替代动态加载。
输出缓冲与压缩:
禁用 CI 的
output compression
,由 Nginx 统一处理。直接输出 HTML/JSON,避免多次拼接字符串。
避免复杂逻辑:
将耗时操作(如文件处理、第三方 API 调用)异步化(通过队列或 Swoole Task)。
二、进阶优化方案
1. 引入 Swoole 协程(突破 PHP-FPM 瓶颈)
Swoole HTTP Server:替代 PHP-FPM,实现常驻内存和协程调度:
$http = new Swoole\Http\Server('0.0.0.0', 9501);
$http->on('request', function ($request, $response) {
// 在此处调用 CI 核心逻辑(需适配 CI 入口)
$response->end('Hello CI with Swoole!');
});
$http->start();
协程化 MySQL/Redis:使用 Swoole 提供的协程客户端,减少 I/O 阻塞。
2. 静态资源分离
CDN 加速:将 CSS/JS/图片等静态资源托管至 CDN,减少服务器负载。
Nginx 直接处理静态文件:
location ~* \.(jpg|css|js)$ {
root /path/to/static;
expires 365d;
access_log off;
}
3. 负载均衡与水平扩展
多节点部署:通过 Nginx 反向代理将请求分发到多个 CI 服务实例。
容器化:使用 Docker + Kubernetes 实现自动扩缩容。
三、性能测试与监控
1. 压测工具
wrk/ab:模拟高并发请求,测试 RPS 极限。
wrk -t12 -c1000 -d30s http://your-ci-app.com
Siege:验证长时间高负载下的稳定性。
2. 监控指标
服务器资源:CPU、内存、磁盘 I/O、网络带宽。
PHP-FPM/Swoole:活跃进程数、请求耗时、队列堆积。
数据库:连接数、慢查询、缓存命中率。
四、性能天花板与替代方案
CI 的极限:即使经过上述优化,传统 CI + PHP-FPM 的 RPS 可能仍难以突破 2000。若需更高性能:
迁移到高性能框架:如 Hyperf(协程,RPS 3000+)、YAF(C 扩展,RPS 5000+)。
混合架构:核心接口用 Hyperf/YAF,边缘业务保留 CI。
五、总结
通过 PHP 8 + OPcache、Nginx 调优、Swoole 协程化、数据库连接池、代码精简,CI 的 RPS 可显著提升至 1000-2000。但要达到 3000+ RPS,需彻底突破 PHP-FPM 模式,采用 Swoole 常驻内存或迁移至 高性能框架(如 Hyperf)。优化过程中需结合业务场景权衡开发成本与性能收益。