---
# System prepended metadata

title: ab
tags: [Unix-like]

---

---
tags: Unix-like
---
[]

# ab

ApacheBench，測試網站效能的指令。

```shell
$ ab <URL>
```

 * `-n` ：Request 總數量
 * `-c` ：Concurrency 同時間的數量

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

Benchmarking www.google.com (be patient).....done


Server Software:        gws
Server Hostname:        www.google.com
Server Port:            443
SSL/TLS Protocol:       TLSv1.2,ECDHE-ECDSA-CHACHA20-POLY1305,256,256
TLS Server Name:        www.google.com

Document Path:          /
Document Length:        12314 bytes

Concurrency Level:      1
Time taken for tests:   0.139 seconds
Complete requests:      1
Failed requests:        0
Total transferred:      13151 bytes
HTML transferred:       12314 bytes
Requests per second:    7.18 [#/sec] (mean)
Time per request:       139.370 [ms] (mean)
Time per request:       139.370 [ms] (mean, across all concurrent requests)
Transfer rate:          92.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       99   99   0.0     99      99  # 從 ab 發出 TCP 要求到 Web 主機所花費的建立時間
Processing:    40   40   0.0     40      40  # 從 TCP 連線建立後，直到 HTTP 回應 Response 的資料全部都收到所花的時間
Waiting:       37   37   0.0     37      37  # 從發送 HTTP 要求完後，到 HTTP 回應 Response 第一個 Byte 所等待的時間
Total:        139  139   0.0    139     139  # Connect + Processing
```

## 壓力測試

 * **排除頻寬的限制**
   做壓力測試通常不會考量「頻寬的限制」，所以一般來說不會將測試的主機擺在遠端機房、然後測試程式擺在公司內部的主機，而是會將壓力測試的 Client 跟 Web 主機擺在同一個網段下進行壓力測試。
因為「頻寬」只要花錢就會有了，但是主機的承載量卻是有限的，從遠端進行壓力測試主要的限制是在「頻寬」而非「效能」，所以從遠端單點進行壓力測試毫無任何意義可言，這樣是測不出主機的效能極限的。
如果你有能力與資源進行大規模（多點）壓力測試的話，透過遠端進行壓力測試才有意義。

 * **壓力要循序漸進**
   不要一下子就執行同時連線數 100 人，而是要循序漸進的慢慢加同時連線數上去，才不會讓 Web Application 一下字承受過大的負載而導致效能的數據不正確。

 * **大量時採用多台測試**
   需要測試大量或超大量的要求數時，建議是採用多部電腦來同時使用 ab 指令要求，否則，只用一台的情況下，很可能因為機器本身的效能問題，而無法真正的送出預期的要求數量而造成測試失真。