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

此条目发表在System, Web server分类目录。将固定链接加入收藏夹。

发表评论