PHP 7.4 老站迁到 8.2,先别急着改代码,我把函数签名扫了一遍
上个月接了个本地小厂的活:一台跑了五年的下单站,PHP 7.4 + MySQL 5.7,代码没有框架,全是手写 include。客户说主机商要停 7.4,让我直接升 8.2。你先别急,我第一件事不是改代码,是扫签名。
上个月接了个本地小厂的活:一台跑了五年的下单站,PHP 7.4 + MySQL 5.7,代码没有框架,全是手写 include。客户说主机商要停 7.4,让我直接升 8.2。你先别急,我第一件事不是改代码,是扫签名。
环境是这样:PHP 8.2.13,php-fpm 8 个 worker,Nginx 反代,代码量不大,一个手作工作室的展示站加下单,路由和模板加起来 60 多个文件。现象是每天第一次访问首页 TTFB 380ms 左右,之后稳定在 110ms。用户不多,但早上第一个访客的体验我知道自己受不了。
PHP 8.1.2,CLI 模式,跑一个批量消费队列的脚本。数据量不大,单次处理 500 条左右,但脚本常驻,每 10 秒拉一次。跑着跑着内存就上去了,从 30M 涨到 200M 只用了半小时,最后被 OOM 杀掉。
线上是 PHP 8.1 + PHP-FPM,前面挂 nginx,机器 8C16G,接口 QPS 峰值大概 300,单次响应 P99 在 800ms 左右。有天开始零星出现 502,频率不高,一天十几次,nginx error log 里是 upstream timed out。先去看 FPM 的 slowlog,request_slowlog_timeout 设的 5s,结果抓到的堆栈全是 `[p
店里那台专门跑后台的旧机器,Win7 装的 PHP 8.1.27,内存 4G,Composer 2.7。给客户的小商城项目装依赖,`composer install` 一到 `Unzipping archive` 就卡住,进度条不动,短则两分钟,长则直接超时退出。vendor 目录只解出一半,autoload 文件都是残缺的。项目不大,`composer.lock` 里四十多个包,压缩包总共一百多
项目用 PHP 8.3 + Composer 2.7,跑一次 `composer test` 从 12 秒降到 3 秒,改动只在一个 `composer.json` 的 scripts 段。
我的小工作室接了个订单系统的活,客户的数据量不大,但有个「导出全部订单」的功能,跑着跑着内存就飙到 512M 上限,直接白屏。环境是 PHP 8.2.10(cli 和 fpm 都试了),MySQL 8.0,数据大概 12 万条订单,每单平均 8 个商品明细。现象很奇怪:在本地 M1 Mac 上跑没事,一到客户的阿里云 ECS(2 核 4G)上就必崩,错误日志里是 `Allowed memory s