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的快速回收