老项目性能排查应聚焦执行时间、数据库、内存和外部依赖四方面:用xdebug/blackfire定位耗时函数与sql占比,开启慢查询日志查n+1、缺索引、select *、隐式转换等问题,启用并调优opcache与业务缓存,检查资源滥用及废弃函数。

直接上手排查,别猜。老项目性能问题往往藏在“习以为常”的地方,重点看执行时间、数据库、内存和外部依赖这四块。
先定位慢在哪:用工具抓真实数据
不靠感觉,用数据说话。开发环境开 Xdebug 生成 profile 文件,生产环境用 Blackfire 或 Tideways(轻量、低侵入)。它们能告诉你:
- 哪个函数耗时最长、调用次数最多
- 数据库查询占了总耗时的百分之几
- 内存峰值出现在哪段逻辑里
- 是否有重复加载、反复计算、循环内查库
启动前加一句 php-fpm -t 验证配置,避免因 php-fpm.conf 错误导致服务起不来,误判成“应用慢”。
重点盯数据库:老项目90%的慢都出在这
打开慢查询日志(MySQL 的 slow_query_log=ON + long_query_time=1),再配合 PHP 日志里的 SQL 打点。常见坑有:
- N+1 查询:比如遍历用户列表,每个用户再查一次头像、权限、订单数
- 没索引还
ORDER BY:WHERE status=1 ORDER BY created_at DESC却只给status建了单列索引 -
SELECT *+ 大字段:一次查出 TEXT、JSON 字段,拖慢网络和内存 - 隐式类型转换:
WHERE user_id = '123'(字符串)查 INT 主键,索引直接失效
上线前必做:对所有新改 SQL 跑一遍 EXPLAIN,确认 type 是 ref/range,不是 ALL。
检查缓存是否形同虚设
Opcache 是 PHP 7.2 的标配加速器,但很多老项目没开或配错:
- 确认
opcache.enable=1且opcache.validate_timestamps=0(生产环境关时间戳校验) -
opcache.memory_consumption至少设为 128M,max_accelerated_files不低于 10000 - 检查是否用了
apcu或Redis缓存业务数据——比如用户资料、菜单树、配置项,而不是每次请求都查库
注意:缓存键要带版本号(如 config:site:v2),不然改了配置却刷不出新值。
看资源是否被悄悄吃光
PHP 7.2 自身更省资源,但老代码可能埋雷:
- 循环里
file_get_contents()读本地文件,或curl_exec()调外部接口没设超时 -
json_decode($huge_json, true)解析几百 MB JSON,爆内存 - 使用了已废弃的
mysql_*函数(PHP 7.2 已移除),导致报错或降级兼容逻辑
用 memory_get_peak_usage() 在关键位置打点,看哪段逻辑内存突增;用 getrusage() 查系统调用开销。
基本上就这些。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











