標籤:dcl name osi longest length ken erro 最佳化 命令
當你使用PHP(或其他程式設計語言)完成一個web程式的開發,並且web程式在Apache伺服器上正常啟動並執行時候,你有沒有考慮過對你的Apache伺服器及部署在其上的web程式進行一些壓力測試呢?畢竟,真金不怕火煉,只要配置最佳化合理、程式碼運行效能良好、硬體撐得住,通過壓力測試我們就能看到一個喜人的成績。話又說回來,即使測試結果差強人意或者糟糕透了,我們也可以好好反思並找到「問題出在哪裡」。說了這麼多廢話,其實就是想告訴你一句:對伺服器以及網站程式進行壓力測試還是很有必要的。
要對Apache及其上的web程式進行壓力測試其實非常簡單,我們也不用再額外下載安裝什麼測試載入器,因為Apache HTTP Server已經給我們準備了一個壓力測試工具——ab。
ab,即Apache Benchmark,只要我們安裝了Apache,就能夠在Apache的安裝目錄中找到它。它的居住地址是Apache安裝目錄/bin/ab.exe
。現在,我們就來看看如何使用ab.exe來進行壓力測試。
在使用之前我們先來學習一下ab的用法。首先,我們輸入cmd開啟DOS視窗,然後將更改當前工作目錄為:Apache安裝目錄/bin/
。然後鍵入協助命令ab -help
(或者ab /?
、ab -h
),我們就可以看到如下的用法介紹介面。
常用命令 : ab -n 1000 -c 10 127.0.0.1/index.php //使用絕對路徑! 1000次訪問並發量為 10
ab的用法介紹
通過上面的用法介紹可以得知,ab的使用方法就是輸入如下DOS命令:
ab [可選的參數選項] 需要進行壓力測試的url
此外,我們再根據上面的用法介紹介面來詳細瞭解每個參數選項的作用。
-
-n
-
即requests,用於指定壓力測試總共的執行次數。
-
-c
-
即concurrency,用於指定壓力測試的並發數。
-
-t
-
即timelimit,等待響應的最大時間(單位:秒)。
-
-b
-
即windowsize,TCP發送/接收的緩衝大小(單位:位元組)。
-
-p
-
即postfile,發送POST請求時需要上傳的檔案,此外還必須設定
-T
參數。
-
-u
-
即putfile,發送PUT請求時需要上傳的檔案,此外還必須設定
-T
參數。
-
-T
-
即content-type,用於設定Content-Type要求標頭資訊,例如:
application/x-www-form-urlencoded
,預設值為
text/plain
。
-
-v
-
即verbosity,指定列印協助資訊的冗餘層級。
-
-w
-
以HTML表格形式列印結果。
-
-i
-
使用HEAD請求代替GET請求。
-
-x
-
插入字串作為table標籤的屬性。
-
-y
-
插入字串作為tr標籤的屬性。
-
-z
-
插入字串作為td標籤的屬性。
-
-C
-
添加cookie資訊,例如:"Apache=1234"(可以重複該參數選項以添加多個)。
-
-H
-
添加任意的要求標頭,例如:"Accept-Encoding: gzip",要求標頭將會添加在現有的多個要求標頭之後(可以重複該參數選項以添加多個)。
-
-A
-
添加一個基本的網路認證資訊,使用者名稱和密碼之間用英文冒號隔開。
-
-P
-
添加一個基本的代理認證資訊,使用者名稱和密碼之間用英文冒號隔開。
-
-X
-
指定使用的Proxy 伺服器和連接埠號碼,例如:"126.10.10.3:88"。
-
-V
-
列印版本號碼並退出。
-
-k
-
使用HTTP的KeepAlive特性。
-
-k
-
使用HTTP的KeepAlive特性。
-
-d
-
不顯示百分比。
-
-S
-
不顯示預估和警告資訊。
-
-g
-
輸出結果資訊到gnuplot格式的檔案中。
-
-e
-
輸出結果資訊到CSV格式的檔案中。
-
-r
-
指定接收到錯誤資訊時不退出程式。
-
-h
-
顯示用法資訊,其實就是
ab -help
。
雖然ab可以配置的參數選項比較多,但是,一般情況下我們只需要使用形如ab -n 數字 -c 數字 url路徑
的命令即可。譬如,我們對位於本地Apache伺服器上、URL為localhost/index.php的頁面進行壓力測試。測試總次數為1000,並發數為100(相當於100個使用者同時訪問,他們總共訪問1000次)。我們輸入DOS命令ab -n 1000 -c 100 localhost/index.php
,列印結果如下:
F:\Apache2.2\bin>ab -n 1000 -c 100 localhost/index.phpThis is ApacheBench, Version 2.3 <$Revision: 655654 $>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 100 requestsCompleted 200 requestsCompleted 300 requestsCompleted 400 requestsCompleted 500 requestsCompleted 600 requestsCompleted 700 requestsCompleted 800 requestsCompleted 900 requestsCompleted 1000 requestsFinished 1000 requestsServer Software: Apache/2.2.25 (伺服器軟體名稱及版本資訊)Server Hostname: localhost (伺服器主機名稱)Server Port: 80 (伺服器連接埠)Document Path: /index.php (供測試的URL路徑)Document Length: 10 bytes (供測試的URL返回的文檔大小)Concurrency Level: 100 (並發數)Time taken for tests: 0.247 seconds (壓力測試消耗的總時間)Complete requests: 1000 (壓力測試的總次數)Failed requests: 0 (失敗的請求數)Write errors: 0 (網路連接寫入錯誤數)Total transferred: 198000 bytes (傳輸的總資料量)HTML transferred: 10000 bytes (HTML文檔的總資料量)Requests per second: 4048.34 [#/sec] (mean) (平均每秒的請求數)Time per request: 24.701 [ms] (mean) (所有並發使用者(這裡是100)都請求一次的平均時間)Time per request: 0.247 [ms] (mean, across all concurrent requests) (單個使用者請求一次的平均時間)Transfer rate: 782.78 [Kbytes/sec] received (傳輸速率,單位:KB/s)Connection Times (ms) min mean[+/-sd] median maxConnect: 0 0 0.3 0 1Processing: 6 23 4.2 24 30Waiting: 5 20 5.3 21 29Total: 6 23 4.2 24 30Percentage of the requests served within a certain time (ms) 50% 24 66% 25 75% 26 80% 26 90% 27 95% 27 98% 28 99% 29 100% 30 (longest request)
在上面的測試中,我們設定的壓力測試總次數以及並發數並沒有讓伺服器感覺到什麼「壓力」,現在我們再來看一個「壓力山大」的執行命令:ab -n 100000 -c 1000 localhost/index.php
,這個時候apache就直接罷工——拒絕訪問了:
F:\Apache2.2\bin>ab -n 100000 -c 1000 localhost/index.phpThis is ApacheBench, Version 2.3 <$Revision: 655654 $>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) Test aborted after 10 failuresapr_socket_connect(): 由於目標電腦積極拒絕,無法串連。 (730061)
注意:在上面的壓力測試中,Apache使用的是預設配置,並沒有經過任何最佳化措施處理。實際上,Apache在經過配置最佳化後,只要伺服器硬體夠用,Apache伺服器是能夠撐起1000的並發量的。
測試 redis 的並發
<?php $redis = new redis(); $redis->connect(‘127.0.0.1‘, 6379); $time = date("Ymd H:i:s"); $redis->rpush(‘list1‘, $time); echo "隊列總長度:".$redis->lLen(‘list1‘); echo "<br/>"; /* while (true) { //出對 $get = $redis->lpop(‘list‘); if ($get) { echo ‘出隊列--‘ . $get; echo ‘<br/>‘; } else { echo ‘出隊完成‘; return false; } }*/
摘自:http://www.cnblogs.com/wtcl/p/6795740.html
Apache ab 壓力並發測試載入器