使用 ab 对 Apache 进行基准测试

使用 ab 对 Apache 进行基准测试

我正在使用 ab 对 Apache 进行一些性能测试。在我们的例子中,Apache 仅充当负载平衡器,平衡两个 Liferay 服务器之间的负载。

最初,我对 1000 个请求和 100 个并发请求进行了测试。测试进行得很顺利。

但是,当我对 500 个并发用户和 1000 个请求执行测试时,测试失败了。

$ ab -c 500 -n 1000 http://103.X.X.X/web/guest/statistics 
This is ApacheBench, Version 2.3 <$Revision: 655654 $> 
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ 
Licensed to The Apache Software Foundation,   

Benchmarking  (be patient)

Completed 100 requests
Completed 200 requests
Completed 300 requests

apr_socket_recv: Connection timed out (110)

Total of 386 requests completed

在Kernel中可以看到如下信息。

May 13 14:21:15 www kernel: possible SYN flooding on port 80. Sending cookies.

我尝试增加以下两个参数的值,但测试仍然失败,并且在系统日志文件中可以看到相同的错误。

# echo "1024" > /proc/sys/net/core/somaxconn 
# echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog 

我们即将开展一项活动,预计我们的服务器将受到大量点击。由于测试失败,我们有点担心我们的服务器是否能够承担负载。我们预计活动期间单日并发请求数约为 500-700 个。

请建议如何提高我们的服务器性能以承受负载。

答案1

为了进行基准测试,您应该禁用 syn_cookies:

echo 0 > /proc/sys/net/ipv4/tcp_syncookies

但如果完成后请重新启用它们!

如果服务器无法承受负载,您必须优化您的网络应用程序、调整您的配置、使用某种缓存或使用负载均衡器前端的多个服务器。我无法透露更多细节,因为这很大程度上取决于您的应用程序和您期望的工作负载。也许你应该看看 nginx 或 varnish 等项目。你们的后台有数据库吗?也许这也可能是一个瓶颈......

相关内容