CentOS Apache连接数限制
导读:CentOS 下 Apache 连接数限制与优化 一 核心概念与生效位置 Apache 的连接处理能力由 MPM(多处理模块) 决定,常见有 prefork、worker、event。不同 MPM 的可调参数不同,但都围绕“进程/线程数量...
CentOS 下 Apache 连接数限制与优化
一 核心概念与生效位置
- Apache 的连接处理能力由 MPM(多处理模块) 决定,常见有 prefork、worker、event。不同 MPM 的可调参数不同,但都围绕“进程/线程数量、空闲进程/线程、最大客户端连接”等展开。
- 配置路径通常为 /etc/httpd/conf/httpd.conf,MPM 参数段一般位于 /etc/httpd/conf/extra/httpd-mpm.conf(或主配置中对应的 IfModule 段)。修改后需重启 httpd 生效:
systemctl restart httpd。 - 术语变化:在 Apache 2.4+ 中,prefork 的 MaxClients 更名为 MaxRequestWorkers(很多发行版仍兼容旧名),其他 MPM 也有相应命名调整,建议以实际运行的 Apache 版本为准。
二 调整最大连接数的做法
- 步骤
- 确认 MPM:执行
httpd -l,输出中包含 mpm_prefork.c / mpm_worker.c / mpm_event.c 其一即为当前模块。 - 编辑配置:在 httpd.conf 中确保包含 MPM 配置文件(如
Include conf/extra/httpd-mpm.conf),然后在对应 IfModule 段内调整参数。 - 重启服务:
systemctl restart httpd。 - 验证:观察日志与监控指标,确认新连接数上限已生效且无异常报错。
- 确认 MPM:执行
- 关键参数与示例(按 MPM)
- prefork(进程模型,最通用)
- 关键指令:StartServers、MinSpareServers、MaxSpareServers、MaxRequestWorkers(2.4+)/MaxClients(≤2.2)、MaxRequestsPerChild、ServerLimit。
- 示例(适度提升并发,需结合内存评估):
< IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 1000 MaxRequestWorkers 500 MaxRequestsPerChild 10000 < /IfModule> - 要点:增大 MaxRequestWorkers 通常需要同步增大 ServerLimit;prefork 下每个进程大致占用若干 MB 内存,设置过高会导致内存耗尽。
- worker/event(线程/事件模型,高并发更友好)
- 关键指令:StartServers、MinSpareThreads、MaxSpareThreads、ThreadsPerChild、ThreadLimit、MaxRequestWorkers(总并发线程数)。
- 关系与示例:最大并发 ≈ ThreadsPerChild × 子进程数;例如:
< IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadsPerChild 50 ThreadLimit 64 MaxRequestWorkers 300 MaxConnectionsPerChild 0 < /IfModule> - 要点:优先调整 ThreadsPerChild 与子进程相关参数,使 MaxRequestWorkers 与服务器 CPU/内存 匹配。
- prefork(进程模型,最通用)
三 按 IP 或目录进行并发连接数限制
- 使用第三方模块 mod_limitipconn 可按 IP 或 目录/文件类型 限制并发连接数(适合下载类、爬虫等场景)。
- 安装与启用(示例)
- 编译安装模块(以 mod_limitipconn-0.24 为例):
wget http://dominia.org/djao/limit/mod_limitipconn-0.24.tar.bz2 tar jxvf mod_limitipconn-0.24.tar.bz2 cd mod_limitipconn-0.24 make & & make install # 或 /usr/local/apache2/bin/apxs -c -i mod_limitipconn.c - 在 httpd.conf 中加载模块并配置:
LoadModule limitipconn_module modules/mod_limitipconn.so ExtendedStatus On < Location /> MaxConnPerIP 6 NoIPLimit image/* < /Location> < Location /mp3> MaxConnPerIP 1 < /Location> - 说明:MaxConnPerIP 限制每 IP 并发连接;NoIPLimit 可排除特定资源(如图片)不受限制。按虚拟主机限制时,将对应 IfModule 段放入 VirtualHost 配置中。
- 编译安装模块(以 mod_limitipconn-0.24 为例):
四 相关网络与内核参数建议
- 合理设置 KeepAlive 可降低握手开销:
KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 5 - 适度调整 Timeout(默认常见为 300 秒,过长会占用连接资源):
Timeout 60 - 系统层面关注 文件描述符限制(ulimit -n)、端口范围 与 内核网络参数(如 somaxconn、tcp_tw_reuse 等),避免成为连接瓶颈。
五 监控与验证
- 配置生效与压力测试
- 重启后在
httpd.conf中开启状态页(示例):
访问 http://服务器IP/server-status?auto 查看当前连接与状态。LoadModule status_module modules/mod_status.so ExtendedStatus On < Location /server-status> SetHandler server-status Require local < /Location> - 使用 ab 进行基准测试(示例):
ab -n 10000 -c 200 http://你的站点/
- 重启后在
- 运行时观测
- 进程/连接数:
ps -ef | grep httpd | wc -l、netstat -an | grep :80 | wc -l、netstat -n | awk '/^tcp/ { ++S[$NF]} END { for(a in S) print a, S[a]} ' - 资源监控:
top/htop、sar -n DEV 1等,结合业务峰值与错误日志综合评估是否需要继续调优。
- 进程/连接数:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Apache连接数限制
本文地址: https://pptw.com/jishu/774487.html
