nginx代理测试

今天主要是还原一个线上的问题,自己搞了几个机器配置了一下nginx模拟做代理时后端服务器速度跟不上的问题。基本的结构如下

client —->nginx(proxy)—nginx server(limit rps 400/s)

因为我总的就3个机器,所以后端的nginx server里面配置的是

limit_conn_zone  $binary_remote_addr  zone=connzone:10m;  
limit_req_zone  $binary_remote_addr  zone=reqzone:10m   rate=400r/s;  
server {  
listen      1081;  
server_name  localhost;  
keepalive_requests 1000;
location / {  
root    /var/www/httpdtest;  
index  index.html index.htm;  

limit_req zone=reqzone burst=50; #限制单个IP的 RPS不超过 400,允许有多余的50个处于等待状态
limit_conn connzone 400; #限制单个IP的并发数不超过400

limit_req_log_level info;  
limit_conn_log_level info;  

}

location /status {  
stub_status on;  
access_log   off;  

}

简单的对比测试了一下后端限速和不限速的情况。
当后端不限速的时候压测时代理proxy 的load非常高,单个核的机器CPU使用率能到100%,usr,sys,soft各占了30%左右,但是后端服务器的load比较低,只有20%左右。
当后端机器限速的时候proxy上会出现大量的503,并且load还是很高,基本和前面的相同,但是后端的服务器load也会比较高,在30%–80%间波动。
检查后端服务器的日志可以发现很多健康检测的请求被置为了503,也就是存在服务器被踢掉的情况。

另外顺便测试了一下apache的配置,之前的woker的配置

  
Timeout 180  
KeepAlive On  
MaxKeepAliveRequests 100  
KeepAliveTimeout 360

<IfModule worker.c>  
StartServers         10  
ServerLimit          50  
MaxClients           1500  
MinSpareThreads      50  
MaxSpareThreads      200  
ThreadsPerChild      50  
MaxRequestsPerChild  10000  
</IfModule>  

这个其实一看会觉得很多不合理的配置。之前测的结果是RPS开keepalive只能到1700/s,不开的keepalive只有1500-1600/s。
后来尝试把并发数量调整的比较大后测试了一下性能测增加很有限,也就到1800/s左右,基本没有啥变化。