如何配置Apache与MySQL支持5000+用户访问,解决Azure服务器并发问题
故障根因说明
你遇到的AH01075 proxy_fcgi错误本质是Apache作为反向代理向后端FCGI服务(通常为PHP-FPM)转发请求时,处理流程异常中断,结合800并发瓶颈、文件上传+数据库插入的业务属性,核心触发原因集中在后端服务资源不足、请求处理超时、上传请求大小超出配置限制三类。
关联错误日志:
[Wed Jul 07 22:21:33.634756 2021] [proxy_fcgi:error] [pid 5489:tid 47478298437376] (70008)Partial results are valid but processing is incomplete: AH01075: Error dispatching request to : (reading input brigade):
可落地优化方案
1. 后端FCGI服务配置调整
如果使用PHP-FPM作为FCGI后端,修改php-fpm.conf配置文件:
- 调整进程数:
pm.max_children调整为400600(按单进程占用4060M内存测算,预留10G以上内存给系统、数据库、上传缓存使用),配套调整pm.start_servers = 100、pm.min_spare_servers = 50、pm.max_spare_servers = 150 - 调整超时限制:
request_terminate_timeout = 120s,适配大文件上传+数据库插入的长耗时场景
同步修改php.ini配置:
- 上传相关限制:
upload_max_filesize、post_max_size调整为业务允许的最大上传文件大小的1.2倍以上 - 执行超时:
max_execution_time = 120、max_input_time = 120
2. Apache服务配置优化
- 切换MPM模式为event模式(比prefork模式并发处理能力高30%以上),调整event MPM参数:
<IfModule mpm_event_module> StartServers 10 MinSpareThreads 75 MaxSpareThreads 250 ThreadLimit 128 ThreadsPerChild 64 MaxRequestWorkers 2048 MaxConnectionsPerChild 10000 </IfModule> - 调整代理与请求限制:
ProxyTimeout 120、RequestReadTimeout header=30 body=120、LimitRequestBody设置为业务允许的最大上传文件大小,避免大文件上传中途被截断 - 开启Apache的gzip压缩、静态资源缓存,减少非业务请求的资源占用
3. 业务与数据库优化
- 文件上传改为分片上传模式,拆分大文件为多个小分片依次上传,降低单个请求的处理时长与资源占用,同时支持断点续传
- 数据库插入操作改为批量提交,避免单条插入频繁触发IO交互;插入频繁的表提前创建合适索引,避免插入时锁表等待
- 上传临时目录、数据库数据目录挂载Azure Premium SSD云盘,降低IO等待耗时
4. 操作系统层面优化
- 调整文件句柄限制:修改
/etc/security/limits.conf,添加如下配置,提升进程可打开的文件数上限:* soft nofile 65535 * hard nofile 65535 apache soft nofile 65535 apache hard nofile 65535 - 调整TCP内核参数:修改
/etc/sysctl.conf,开启tcp_tw_reuse = 1、tcp_fin_timeout = 30,减少TIME_WAIT连接占用,提升并发连接处理能力 - 关闭不必要的系统服务、防火墙多余规则,释放CPU与内存资源
内容的提问来源于stack exchange,提问作者BINOD DEKA
相关产品推荐
相关产品推荐

