TYPO3 10.4偶发页面渲染耗时达20秒问题求助
运行环境
- TYPO3: 10.4.22
- PHP: 7.4.30
- Apache 2.4.46
- Windows Server 2019 X64
故障特征
- 简易页面正常渲染耗时约200ms,约每10次加载出现1次异常慢请求,耗时可达20秒级
- Admin Panel TS-Tree统计显示:慢请求中
Script Start项数值异常偏高,21s左右的慢请求中该项数值为+21075,正常205ms请求中该项数值仅为+235 - 服务器CPU、内存、网络指标无异常,内网单用户测试仍可复现,慢加载后立即刷新即可恢复正常响应速度
根因分析与修复方案
Script Start统计的是从请求进入服务到TYPO3核心正式开始执行渲染逻辑的耗时,高耗时说明问题出在PHP初始化、TYPO3核心前置加载、系统级缓存校验阶段,和页面本身的渲染逻辑无关,结合故障概率、刷新即恢复的特征,常见原因如下:
- PHP缓存周期性重校验
Windows平台下PHP默认配置的realpath_cache_size仅16K~1M,realpath_cache_ttl仅120s,OPcache默认每2s就会校验所有加载过的PHP文件修改时间。当命中校验周期时,NTFS文件系统的权限遍历、大量文件元数据读取会产生极高IO耗时,校验完成后后续请求直接读取内存缓存,速度就会恢复,和故障特征完全匹配。
调整方式:修改php.ini配置realpath_cache_size=4M realpath_cache_ttl=600 opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=256 opcache.max_accelerated_files=60000 ; 生产环境可关闭时间戳校验,发布代码时重启Apache重载缓存即可 opcache.validate_timestamps=0 ; 若需要保留自动校验,可将校验间隔调整为60s以上 ; opcache.validate_timestamps=1 ; opcache.revalidate_freq=60 - TYPO3自动垃圾回收触发
TYPO3 10.4版本默认按1/10的概率在前端请求中触发缓存垃圾回收,清理过期的缓存条目、临时文件,和“每10次出现1次慢请求”的概率完全吻合。Windows下NTFS删除大量小文件的IO开销极高,垃圾回收执行完成后后续请求直接命中有效缓存,速度就会恢复正常。
调整方式:在typo3conf/LocalConfiguration.php中添加配置,关闭前端触发的垃圾回收,改用系统计划任务定时执行:
若使用文件缓存,可将核心缓存调整为数据库缓存,减少文件IO开销。'SYS' => [ 'garbageCollection' => [ 'frontendTrigger' => false, ], ] - Apache PHP进程频繁回收
Windows下Apache的mpm_winnt模块搭配FastCGI运行PHP时,默认会在进程处理少量请求后、或短时间空闲时回收PHP进程,新请求需要重新初始化PHP进程、加载所有扩展,初始化耗时可达十几秒,进程启动完成后后续请求复用进程即可恢复正常速度。
调整方式:修改Apache的FastCGI配置,将PHP进程的instanceMaxRequests调整为10000以上,idleTimeout调整为300以上,降低进程回收频率。 - 第三方扩展偶发初始化逻辑
若上述配置调整后仍有问题,可开启PHP慢日志,记录慢请求的调用栈,定位是否有第三方扩展在初始化阶段执行文件扫描、服务探测、日志归档类高耗时逻辑。
内容的提问来源于stack exchange,提问作者Christian Ehret
相关产品推荐
相关产品推荐

