varnish上线3天,目前运行良好。使用siege进行压测,对比有无varnish前后的区别
选择 http://site/resources/images/imglist.jpg 对一个URL进行请求
后端是一台windows的IIS服务器
在没有上varnish之前
100个并发循环600次压测结果
** SIEGE 2.72 ** Preparing 100 concurrent users for battle. The server is now under siege.. done. Transactions: 60000 hits Availability: 100.00 % Elapsed time: 13.49 secs Data transferred: 526.14 MB Response time: 0.02 secs Transaction rate: 4447.74 trans/sec Throughput: 39.00 MB/sec Concurrency: 97.43 Successful transactions: 60000 Failed transactions: 0 Longest transaction: 3.02 Shortest transaction: 0.00
此时后端的服务器CPU 占了80%以上
在上了varnish之后
** SIEGE 2.72 ** Preparing 100 concurrent users for battle. The server is now under siege.. done. Transactions: 60000 hits Availability: 100.00 % Elapsed time: 12.13 secs Data transferred: 526.14 MB Response time: 0.02 secs Transaction rate: 4946.41 trans/sec Throughput: 43.38 MB/sec Concurrency: 77.76 Successful transactions: 60000 Failed transactions: 0 Longest transaction: 3.04 Shortest transaction: 0.00
可以看到,总共执行时间减少的并不明显。但是后端CPU基本处于0状态,无任何压力。而且varnish服务器load值也基本处于0
在访问量并不大的情况下,上不上varnish并没有太大的优势体现出来。
而在大量的请求的时候,优势就很明显了
如果压测的时候出现大量的“[error] socket: 2001824064 address is unavailable.: Cannot assign requested address”
客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,所以 要改客户端机器的配置
在sysctl.conf里加:
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_timestamps=1 开启对于TCP时间戳的支持,若该项设置为0,则下面一项设置
不起作用
net.ipv4.tcp_tw_recycle=1 表示开启TCP连接中TIME-WAIT sockets的快速回收