使用 ab 对 Apache 进行基准测试

Zam*_*ues 5 linux security sysctl benchmark apache-bench

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

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

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

May 13 14:21:15 www kernel: possible SYN flooding on port 80. Sending cookies.
Run Code Online (Sandbox Code Playgroud)

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

# echo "1024" > /proc/sys/net/core/somaxconn 
# echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog 
Run Code Online (Sandbox Code Playgroud)

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

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

Pas*_*iel 3

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

echo 0 > /proc/sys/net/ipv4/tcp_syncookies
Run Code Online (Sandbox Code Playgroud)

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

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