PHP CLI命令执行异常缓慢,求故障排查方法及相关日志位置
首先从你提供的命令执行耗时数据可以判断核心问题特征:PHP进程用户态、内核态执行总耗时不足0.02s,绝大多数耗时处于阻塞等待状态,问题出在进程启动阶段的外部资源调用等待超时。
故障排查步骤
- 优先排查内置扩展问题
即使添加-n参数不加载自定义配置,PHP编译时内置的扩展仍会自动加载,执行php -n -m查看所有内置扩展,重点排查需要发起网络请求的扩展(如redis、memcached、mysqlnd、curl、openssl等),优先禁用非必要内置扩展复测速度。 - 检查域名解析与主机配置
多数启动阻塞都和网络请求超时有关,先检查/etc/hosts文件是否存在127.0.0.1 localhost、::1 localhost绑定规则,同时确认本机hostname已绑定至本地IP,临时修改/etc/resolv.conf将DNS改为公共DNS(如114.114.114.114)复测。 - 使用strace追踪系统调用定位卡点卡
执行strace -tt php -n -v打印进程启动全流程的系统调用及对应时间戳,直接查看耗时最长的系统调用即可定位阻塞源,常见阻塞场景为网络连接超时、远程文件读取失败、权限校验等待。 - 排查安全模块限制
若为RHEL/CentOS系列系统,临时执行setenforce 0关闭SELinux复测;若为Debian/Ubuntu系列系统,检查AppArmor规则是否限制了PHP进程的资源访问权限。 - 检查配置与依赖文件存储位置
执行php --ini查看PHP所有配置文件的扫描路径,确认路径不存在挂载于不可用远程存储(NFS、SMB等)的情况,同时检查PHP依赖的共享库文件是否存在损坏或存储介质故障。
可用日志位置
- PHP错误日志:路径为php.ini中
error_log配置项的值,未配置时CLI模式日志默认输出至标准错误流 - 系统日志:
/var/log/messages(RHEL/CentOS)或/var/log/syslog(Debian/Ubuntu),可查看进程相关的系统级报错 - 审计日志:若开启auditd服务,可从
/var/log/audit/audit.log中查看是否有系统对PHP进程的拦截记录
内容的提问来源于stack exchange,提问作者Mirko Druzijanic
相关产品推荐
相关产品推荐

