You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从EBS切换到EFS后Apache/PHP-FPM性能下降排查求助

排查方向建议

核心问题定位

当前核心矛盾是CPU负载高但使用率低+大量PHP-FPM进程处于D状态,结合EFS迁移后的表现,本质是进程在等待IO(D状态即不可中断睡眠,通常对应磁盘/网络IO等待),但EFS官方指标未触发瓶颈,需从NFS协议细节、系统内核参数、WordPress文件访问模式三个方向深挖。


一、NFS挂载与EFS配置优化排查

  • 调整NFS挂载参数
    • 当前挂载参数timeo=600(60秒超时)过大,建议改为timeo=100(10秒),减少进程等待超时的时间;同时添加async参数(仅在可接受少量数据丢失场景下使用,WordPress静态文件/插件目录可尝试),降低同步IO等待对进程的阻塞
    • 验证rsize/wsize是否匹配EFS最优值:可临时改为rsize=262144,wsize=262144(256KB)测试性能变化,部分内核版本对1MB大尺寸块的处理存在额外开销
    • 添加noatime,nodiratime参数,禁用文件/目录访问时间记录,减少EFS的元数据IO请求
  • EFS元数据性能排查
    • 查看EFS控制台的Metadata IOPS指标,WordPress插件目录有大量文件枚举操作,元数据IO是EFS常见瓶颈,即使吞吐量/IO使用率没到上限,元数据IOPS可能已饱和
    • 尝试启用EFS的Performance Mode为Max I/O,该模式专为高并发元数据访问优化,适配多站点共享插件目录场景

二、系统内核与进程调度优化

  • NFS相关内核参数调整
    • 调整net.core.rmem_max和net.core.wmem_max至4MB:echo 4194304 > /proc/sys/net/core/rmem_max、echo 4194304 > /proc/sys/net/core/wmem_max,提升NFS网络缓冲区大小,缓解大流量下的网络队列阻塞
    • 优化sunrpc.tcp_slot_table_entries参数,改为128:echo 128 > /proc/sys/sunrpc/tcp_slot_table_entries,增加RPC并发连接数,适配高并发PHP-FPM进程的NFS请求
    • 调整vm.dirty_ratio=10、vm.dirty_background_ratio=5,减少脏页回写阻塞对进程的影响
  • PHP-FPM进程调度优化
    • 当前pm.max_children=2000远超过96核的合理值(建议为CPU核心数*24,即192384),过多进程会导致上下文切换激增,同时加剧NFS请求的并发排队,先将该值下调至300测试
    • 启用PHP-FPM的pm.process_idle_timeout=10s,回收闲置进程,减少无用的NFS连接占用

三、WordPress文件访问模式优化

  • 插件目录本地缓存优化
    • 用rsync定期同步EFS插件目录到本地EBS,配合inotifywait实现实时同步,既保留EFS的集中管理,又避免高并发下的NFS访问瓶颈
    • 启用W3 Total Cache的Opcode Cache高级设置,强制缓存插件文件的字节码,减少PHP对插件文件的磁盘读取请求
  • 减少文件枚举操作
    • 检查WordPress站点是否存在大量调用scandir/glob的插件或主题,这类操作会触发大量EFS元数据请求,可通过禁用冗余插件、优化主题代码减少此类操作
    • 为插件目录添加静态资源CDN,将JS/CSS等静态文件从EFS剥离,降低NFS的访问压力

四、深层诊断工具使用

  • 用pidstat -d 1实时查看每个PHP-FPM进程的IO等待情况,定位具体进程对应的IO请求类型(读/写/元数据)
  • 用trace-cmd或perf record追踪内核级的NFS请求流程,查看是否存在内核锁或RPC调用阻塞
  • 启用EFS的访问日志,筛选插件目录的请求频率和延迟,确认是否存在高频元数据请求

内容的提问来源于stack exchange,提问作者Gnosis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 16:44:54