apache benchmark(ab)对Nodejs服压测POST请求时出现: apr_poll: The timeout specified has expired (70007) 问题的解决办法

本文解决了使用ab工具进行高并发测试时遇到的问题,通过调整HTTP头部设置成功避免了因Nodejs关闭连接而导致的测试失败。

网上找了很多帖子说在参数中加-k (keep-alive) 但都没有用,有一个帖子说这是因为ab对HTTP1.1支持不够好,发送的是1.0的请求,以至于让Nodejs关闭了连接。(说是Nodejs的bug)
具体原因还有待考究,但问题已经解决。
解决办法:
例如原本请求:
ab -c 10000 -n 10000 -p ~/ReaT_Data.json -T ‘application/json’ http://—-:80/post
换成:
ab -c 10000 -n 10000 -p ~/ReaT_Data.json -H ‘Content-Type:application/json’ http://—-:80/post
即可。

原因可能是因为ab组织POST的头部的时候出现问题?

<think>嗯,用户问的是关于benchmark::benchmark_main的问题,我需要先理解这个是什么。看起来这是GoogleBenchmark库中的一个主函数,用于运行基准试。用户可能想了解如何在C++中使用这个库来创建和运行基准试。首先,我需要解释benchmark_main的作用,然后给出一个具体的例子,包括如何定义基准试用例,编译代码,最后运行。同,可能还需要说明一些常用的宏和参数,比如BENCHMARK_MAIN()的作用,以及如何传递命令行参数来过滤试用例。然后,用户可能会有后续问题,比如如何传递参数到基准试函数,或者如何比较不同算法的性能,所以需要预先准备好这些相关的问题。确保代码示例正确,并且解释清楚每个部分的作用,比如BENCHMARK宏和RegisterBenchmark的区别,以及基准试函数中循环的设置。另外,可能还需要提醒用户注意编译的链接选项,比如-lbenchmark和可能的-pthread选项。最后,相关问题的部分需要涵盖用户可能进一步想了解的内容,比如自定义试参数、不同试用例的比较、结果分析工具以及与其他框架的区别。</think>在C++性能试领域,`benchmark::benchmark_main`是Google Benchmark库提供的主函数入口,用于自动发现并运行所有已注册的基准试。以下是典型的使用示例: ```cpp #include <benchmark/benchmark.h> static void BM_StringCreation(benchmark::State& state) { for (auto _ : state) { std::string empty_string; benchmark::DoNotOptimize(empty_string); } } BENCHMARK(BM_StringCreation); static void BM_StringCopy(benchmark::State& state) { std::string x = "hello"; for (auto _ : state) { std::string copy(x); benchmark::DoNotOptimize(copy); } } BENCHMARK(BM_StringCopy); BENCHMARK_MAIN(); // 等效于默认的main函数实现 ``` 代码解释: 1. `BENCHMARK`宏用于注册基准试 2. `benchmark::State&`参数控制试循环 3. `benchmark::DoNotOptimize`阻止编译器优化掉被代码 4. `BENCHMARK_MAIN()`自动生成main函数实现 编译命令示例: ```bash g++ benchmark_example.cpp -lbenchmark -lpthread -o mybenchmark ``` 运行可用的参数: ```bash ./mybenchmark --benchmark_filter=BM_String.* # 过滤试用例 ./mybenchmark --benchmark_counters_tabular=true # 表格输出 ./mybenchmark --benchmark_repetitions=5 # 重复试次数 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值