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 hitsAvailability: 100.00 %Elapsed time: 13.49 secsData transferred: 526.14 MBResponse time: 0.02 secsTransaction rate: 4447.74 trans/secThroughput: 39.00 MB/secConcurrency: 97.43Successful transactions: 60000Failed transactions: 0Longest transaction: 3.02Shortest transaction: 0.00此时后端的服务器CPU 占了80%以上 在上了varnish之后 ** SIEGE 2.72** Preparing 100 concurrent users for battle.The server is now under siege.. done.Transactions: 60000 hitsAvailability: 100.00 %Elapsed time: 12.13 secsData transferred: 526.14 MBResponse time: 0.02 secsTransaction rate: 4946.41 trans/secThroughput: 43.38 MB/secConcurrency: 77.76Successful transactions: 60000Failed transactions: 0Longest transaction: 3.04Shortest 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的快速回收 |