AB 壓力測試

Ubuntu 安裝AB

apapt-get install apache2-utilsphp

使用AB 壓力測試

-c 併發數 -n請求總數 ab -c 3000 -n 10000 http://localhost/test/index.php AB只能測試localhosthtml

返回結果nginx

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        nginx
Server Hostname:        localhost
Server Port:            80

Document Path:          /test/index.php
Document Length:        25 bytes

Concurrency Level:      2900 當前併發數
Time taken for tests:   1.772 seconds 測試使用是回見
Complete requests:      10000 完成請求個數
Failed requests:        0 失敗請求個數
Non-2xx responses:      10000
Total transferred:      1850000 bytes 數據總大小
HTML transferred:       250000 bytes 	html大小
Requests per second:    5643.61 [#/sec] (mean) 吞吐率,計算公式:Complete requests/Time taken for tests
Time per request:       513.856 [ms] (mean)用戶平均請求等待時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)。
Time per request:       0.177 [ms] (mean, across all concurrent requests) 服務器平均請求等待時間,計算公式:Time taken for tests/Complete requests,正好是吞吐率的倒數。也能夠這麼統計:Time per request/Concurrency Level。
Transfer rate:          1019.60 [Kbytes/sec] received  表示這些請求在單位時間內從服務器獲取的數據長度,計算公式:Total trnasferred/ Time taken for tests,這個統計很好的說明服務器的處理能力達到極限時,其出口寬帶的需求量。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   23  36.8      0      98
Processing:    58  433 121.4    477     598
Waiting:       55  433 121.5    477     598
Total:        154  456 103.6    494     661

Percentage of the requests served within a certain time (ms)
  50%    494
  66%    532
  75%    539
  80%    550
  90%    555
  95%    573
  98%    608
  99%    628
 100%    661 (longest request)
使用AB 遇到問題

執行操做必定條數,或連續執行該命令會出現以下問題:apache

apr_socket_recv: Connection timed out (110)

查看系統日誌:vim

dmesg

顯示大量下面錯誤服務器

nf_conntrack: table full, dropping packet.

緣由: 服務器訪問量大,內核netfilter模塊conntrack相關參數配置不合理,致使新鏈接被drop掉。網絡

詳細 nf_conntrack模塊在kernel 2.6.15(2006-01-03發佈) 被引入,支持ipv4和ipv6,取代只支持ipv4的ip_connktrack,用於跟蹤鏈接的狀態,供其餘模塊使用。 最多見的使用場景是 iptables 的 nat 和 state 模塊: 1.nat 根據轉發規則修改IP包的源/目標地址,靠nf_conntrack的記錄才能讓返回的包能路由到發請求的機器。 2.state 直接用 nf_conntrack 記錄的鏈接狀態(NEW/ESTABLISHED/RELATED/INVALID)來匹配防火牆過濾規則。 3.nf_conntrack用1個哈希表記錄已創建的鏈接,包括其餘機器到本機、本機到其餘機器、本機到本機(例如 ping 127.0.0.1 也會被跟蹤)。 4.若是鏈接進來比釋放的快,把哈希表塞滿了,新鏈接的數據包會被丟掉,此時netfilter變成了一個黑洞,致使拒絕服務。 這發生在3層(網絡層),應用程序毫無辦法。併發

解決與調優

A. 調整內核參數 若是不能關掉防火牆,基本思路就是上面說的,調大nf_conntrack_buckets和nf_conntrack_max,調小超時時間。socket

# net.netfilter.nf_conntrack_buckets 不能直接改(報錯)
# 須要修改模塊的設置:
echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
# 若是不是root:
echo 262144 | sudo tee /sys/module/nf_conntrack/parameters/hashsize

# 再查看,bucket已經變成設置的大小
sudo sysctl net.netfilter.nf_conntrack_buckets

# max設爲桶的4倍
sudo sysctl -w net.netfilter.nf_conntrack_max=1048576
suod sysctl -w net.nf_conntrack_max=1048576
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_close_wait=15

sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=300

若是測試過沒問題,能夠編輯/etc/sysctl.d/下的配置文件(舊系統是/etc/sysctl.conf),系統啓動時會加載裏面的設置。tcp

sudo vim /etc/sysctl.d/90-conntrack.conf

# 格式:<參數>=<值>,等號兩邊能夠空格,支持 # 註釋
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576
net.netfilter.nf_conntrack_tcp_timeout_fin_wait=30
net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
net.netfilter.nf_conntrack_tcp_timeout_close_wait=15
net.netfilter.nf_conntrack_tcp_timeout_established=300
# 若是要立刻應用配置文件裏的設置:
sudo sysctl -p /etc/sysctl.d/90-conntrack.conf
# 不傳配置文件路徑默認加載 /etc/sysctl.conf

B. 關閉防火牆 C. 設置不跟蹤鏈接的規則(不推薦) D. 禁用相關模塊(不推薦)

外鏈nf_conntrack說明

相關文章
相關標籤/搜索