Php

Apache Benchmark Keep-Alive

  • January 18, 2015

我有一個在 Apache 2.2(幾乎是預設配置)上執行的簡單 PHP 腳本。當執行ab -n 1 <address>地址是本地 IP 或域名的命令時,在第一秒左右接收到所有數據後,我收到了大約 15 秒的套接字保持打開視窗。

使用瀏覽器訪問同一頁面時,我得到的響應不到 100 毫秒。我知道大多數現代瀏覽器都支持 Keep-Alive 標頭並使用某種 TTL 計時器儲存持久連接。因此,當我執行ab -kn <whatever>命令時,我開始通過瀏覽器獲得更接近我預期的結果。

這是正常行為嗎?我的伺服器配置有問題嗎?

$$ EDIT $$

ab再次使用-v 2標誌執行,這是輸出:

Benchmarking localhost (be patient)...INFO: POST header == 

---
GET <PATH> HTTP/1.0
Host: localhost
User-Agent: ApacheBench/2.3
Accept: */*

---
LOG: header received:
HTTP/1.1 200 OK
Date: Sat, 02 Apr 2011 05:09:42 GMT
Server: Apache/2.2.16 (Ubuntu)
Vary: Accept-Encoding
Content-Length: 86
Content-Type: text/html

<html><head><title>Dynamic</title><body><h1>This is another action!</h1></body></html>
..done


Server Software:        Apache/2.2.16
Server Hostname:        localhost
Server Port:            80

Document Path:          <PATH>
Document Length:        86 bytes

Concurrency Level:      1
Time taken for tests:   15.076 seconds
Complete requests:      1
Failed requests:        0
Write errors:           0
Total transferred:      242 bytes
   HTML transferred:       86 bytes
Requests per second:    0.07 [#/sec] (mean)
Time per request:       15075.916 [ms] (mean)
Time per request:       15075.916 [ms] (mean, across all concurrent requests)
Transfer rate:          0.02 [Kbytes/sec] received

然而,瀏覽器也接受來自 php 的 zlib 壓縮的 a和97Content-Encoding: gzip的內容長度- 並且可能是 Apache 2.2 的 deflate 功能。15 秒的暫停發生在發送整個正文之後,之前。 ..done

我想您是在問,“ab -n 1即使伺服器立即發送您的所有數據,在返回之前等待連接斷開(15 秒)是否正常?”

這不正常。

以 verbosity = 2 ( ab -v 2 <url>) 執行,並檢查返回的標頭。伺服器是否發送連接:關閉?它是否發送了不正確的內容長度?

$$ EDIT $$ 我現在看到你的身體是一條線,所以也許 ab 對在實體身體之後沒有得到 CR LF 感到不高興。我無法使用 apache 和文本文件重現那種輸出—— apache 在正文後添加 CR LF,ab 立即返回。你是如何產生這個輸出的?

引用自:https://serverfault.com/questions/254765