apache ab 性能测试 timeout 解决方案

当使用ab或webbench进行压力测试时,遇到并发数达到1000时测试无法完成。针对此问题,可以尝试修改Linux的网络参数,如增加ip_conntrack_max值和调整tcp_timeout_established时间。对于kernel2.6之前,需要添加特定配置到/etc/sysctl.conf,然后执行sysctl -p加载配置。如果出现错误,可能需要载入ip_conntrack模块。另一种解决方案是修改Apache源码目录下的ab.c文件并重新编译安装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

网上流传方法一:

使用ab或者webbench做压力测试,如果并发数开到1000的时候,无法完成测试。到晚上查看资料发现是linux网络参数设置。

[longhao@longhao etc]# vi /etc/sysctl.conf
在kernel2.6之前的添加项:
net.ipv4.netfilter.ip_conntrack_max = 655360
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180 

kernel2.6之后的添加项:
net.nf_conntrack_max = 655360  # net.nf_conntrack_max = 655360 也可以
net.netfilter.nf_conntrack_tcp_timeout_established = 1200

[longhao@longhao etc]# sysctl -p /etc/sysctl.conf

如果报错:error: "net.nf_conntrack_max" is an unknown key 则需要使用modprobe载入ip_conntrack模块,lsmod查看模块已载入。
[longhao@longhao etc]# modprobe  ip_conntrack

 

网上流传方法二:

按如下修改 Apache 源码目录下 support/ab.c 文件,重新编译安装。

 

         elseif(status != APR_SUCCESS) {
             err_recv++;
             if(recverrok) {
                 bad++;
                 close_connection(c);
                 if(verbosity >= 1) {
                     charbuf[120];
                     fprintf(stderr,"%s: %s (%d)\n", "apr_socket_recv", apr_strerror(status, buf, sizeofbuf), status);
                }
                 return;
            } else{
                 bad++;                                 //添加
                 close_connection(c);                   //添加
                 //apr_err("apr_socket_recv", status);  //注释
                return;    //添加
             }
         }
 源:http://blog.youkuaiyun.com/garn_hsia/article/details/12997477
************************************************************************************************************************************
其他 设置方法:
查看
ulimit -n 
修改服务器上最大进程数设置
vi /etc/security/limits.conf
# End of file
*                soft   nofile          65535
*                hard   nofile          65535
*                soft   nproc           16384
*                hard   nproc           32768
*                soft   nproc           16384
*                hard   nproc           32768
*                soft   nofile          1024000
*                hard   nofile          1024000
*                soft   core            1024000
---------------------
源:http://blog.sina.com.cn/s/blog_3dbab2840100dzbg.html
---------------------
设置打开文件数
 vi /proc/sys/fs/file-max
6553600
按照网上修改了这么多设置,还是发现一个问题,访问比较复杂页面(内容比较多,页面交大---其实也不一定是这个原因导致)并发200 -300就timeout的问题还是没有解决,测试页面为简单的hellowords 就没有问题,能支持1000并发
**********************************************************************************

 

<think>嗯,用户询问的是Apache服务器性能调优的最佳实践。这是一个关于Web服务器性能优化的技术问题,需要结合服务器配置、硬件资源和应用场景来综合考虑。 用户可能是一个系统管理员或网站开发者,正在面临Apache服务器性能瓶颈的问题。从问题表述来看,用户需要的是实用、可操作的调优建议,而不是理论性的说明。 首先需要分析影响Apache性能的关键因素。根据引用资料[2],内存管理是核心问题,服务器交换(swap)会显著增加延迟。引用[5]提到了不同运行模式(prefork/worker/event)的选择策略,这对并发处理能力至关重要。引用[3]则强调了动态内容处理的优化空间。 考虑从这几个维度构建回答框架:硬件资源配置、运行模式选择、模块优化和连接管理。每个部分都需要给出具体可执行的配置建议,比如计算MaxRequestWorkers的公式,这是引用[2]提到的重要方法。 对于动态内容优化,准备引用[3]提到的mod_perl案例,但会扩展到更通用的PHP-FPM方案。另外,缓存机制应该单独作为一大类,因为这对性能提升最显著。 注意到引用[5]特别比较了worker和event模式的区别,这个信息很关键。考虑在回答中明确建议新版本Apache优先使用event模式,并说明其优势。 最后需要提醒性能调优的步骤:基准测试->调整参数->监控->迭代优化。这样用户能形成系统化的调优思路,而不是零散的配置修改。</think>以下是根据Apache官方文档及行业实践总结的性能调优最佳方案,按优先级排序: --- ### **一、核心配置优化** 1. **选择合适MPM模式** - **Event MPM**(Apache 2.4+):高并发场景首选,通过异步处理解决Keep-Alive连接占用线程问题[^5] ```apache # httpd.conf <IfModule mpm_event_module> StartServers 3 MinSpareThreads 75 MaxSpareThreads 250 ThreadsPerChild 25 MaxRequestWorkers 400 # 关键参数:最大并发处理数 MaxConnectionsPerChild 10000 # 避免内存泄漏 </IfModule> ``` - **Worker MPM**(兼容旧模块): ```apache <IfModule mpm_worker_module> ServerLimit 16 StartServers 2 MaxRequestWorkers 150 MinSpareThreads 25 MaxSpareThreads 75 </IfModule> ``` 2. **精准计算`MaxRequestWorkers`** **公式**:`MaxRequestWorkers = (可用内存 - 系统预留) / 单进程内存` - 通过`ps -ylC httpd --sort:rss`获取进程内存(RSS列) - 示例:32GB内存服务器,单进程300MB,预留4GB: `(32-4)*1024/300 ≈ 93` → 建议值`90` --- ### **二、连接与超时控制** ```apache # 缩短KeepAlive超时,减少资源占用 KeepAlive On KeepAliveTimeout 2 # 秒(默认5) MaxKeepAliveRequests 100 # 加快连接回收 Timeout 30 # 请求超时(默认60) ``` --- ### **三、模块精简与静态资源优化** 1. **禁用非必要模块** ```bash # 查看已加载模块 httpd -M # 禁用示例 LoadModule auth_basic_module modules/mod_auth_basic.so # ← 注释此行 ``` **建议禁用**:`mod_autoindex`(目录浏览)、`mod_cgi`(改用FastCGI)、`mod_status`(仅调试时用) 2. **启用静态缓存** ```apache # 利用mod_expires缓存静态资源 <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpeg "access plus 1 year" ExpiresByType text/css "access plus 1 month" </IfModule> ``` --- ### **四、动态内容加速方案** | 技术 | 适用场景 | 配置要点 | |---------------|-----------------------|-----------------------------------| | **PHP-FPM** | PHP应用 | 使用`proxy_fcgi`替代`mod_php` | | **mod_proxy** | 反向代理Tomcat等 | 关闭KeepAlive避免连接池耗尽 | | **OPcache** | PHP字节码缓存 | 减少脚本编译开销 | ```apache # PHP-FPM配置示例 <FilesMatch "\.php$"> SetHandler "proxy:unix:/run/php-fpm.sock|fcgi://localhost" </FilesMatch> ``` --- ### **五、操作系统级调优** 1. **内核参数优化**(`/etc/sysctl.conf`) ```conf # 增大TCP连接队列 net.core.somaxconn = 65535 # 加快TIME-WAIT回收 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 ``` 2. **文件句柄限制**(`/etc/security/limits.conf`) ```conf apache soft nofile 65535 apache hard nofile 65535 ``` --- ### **六、验证与监控** 1. **压测工具** ```bash ab -n 10000 -c 500 http://yourserver/test.html ``` 2. **实时监控指标** - **内存**:`free -m` → 确保`Swap`使用率为0%[^2] - **连接数**:`ss -s | grep "TCP:"` - **线程状态**:`top -p $(pgrep -d',' httpd)` > ⚠️ **调优原则**:每次只改一个参数 → 压测对比 → 监控稳定性。推荐使用配置管理工具(如Ansible)记录变更。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值