性能与运维
缓存、OPcache、连接池、php-fpm。
30 分钟
性能与运维
PHP 请求模型是短生命周期,优化重点在 缓存、OPcache 与 php-fpm 进程管理。前置 php-essentials;路径 /roadmaps/php。
学习目标
- 用 OPcache 与对象缓存减少重复计算
- 理解 php-fpm 进程池与连接管理
- 建立基本性能排查思路
OPcache
php.ini 中启用:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
OPcache 把编译后的字节码缓存在内存,避免每次请求重新解析 PHP 文件。部署后若代码不更新,可关闭 opcache.validate_timestamps 进一步提升性能。
应用层缓存
<?php
declare(strict_types=1);
function getTrackStats(PDO $pdo, Redis $redis, string $slug): array {
$key = "track:stats:$slug";
$cached = $redis->get($key);
if ($cached !== false) {
return json_decode($cached, true);
}
$stmt = $pdo->prepare('SELECT COUNT(*) AS cnt FROM lessons WHERE track_slug = ?');
$stmt->execute([$slug]);
$stats = $stmt->fetch(PDO::FETCH_ASSOC);
$redis->setex($key, 300, json_encode($stats));
return $stats;
}
热点查询用 Redis / Memcached;设置合理 TTL,更新数据时主动失效。
php-fpm
; www.conf
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php-fpm 管理 PHP 工作进程;max_children 过大耗尽内存,过小排队延迟。监控 slowlog 定位慢请求。
连接池注意
PHP 传统模型无跨请求连接池;每个请求打开 PDO 连接,请求结束关闭。高并发时用 ProxySQL 或持久连接(PDO::ATTR_PERSISTENT,慎用)。
练习
- 确认 OPcache 已启用:
php -i | findstr opcache - 给 track 统计加 Redis 缓存,更新课时时清除 key
- 阅读 php-fpm slowlog 配置并模拟一条慢查询
小结
OPcache 加速解释、Redis 缓存热点、php-fpm 管进程。 下一课测试与静态分析。
加载本节练习…