1

CherryPy メーリング リストからの相互投稿。

こんにちは、みんな、

私はチェリーピーが初めてで、この次の簡単なベンチマークの結果を理解しようとしています。この "hello world" アプリの場合:

import cherrypy

class Hello:
    @cherrypy.expose
    def index(self):
        return 'hello'

cherrypy.server.thread_pool = 50
cherrypy.quickstart(Hello())

実行するab -c 10 -n 1000と、次の結果が得られます。

This 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 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        CherryPy/3.2.4
Server Hostname:        localhost
Server Port:            8080

Document Path:          /
Document Length:        5 bytes

Concurrency Level:      10
Time taken for tests:   4.494 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      143000 bytes
HTML transferred:       5000 bytes
Requests per second:    222.53 [#/sec] (mean)
Time per request:       44.938 [ms] (mean)
Time per request:       4.494 [ms] (mean, across all concurrent requests)
Transfer rate:          31.08 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1  31.6      0     998
Processing:     2   16 183.1      5    4493
Waiting:        1   15 183.1      5    4492
Total:          2   17 185.7      5    4493

Percentage of the requests served within a certain time (ms)
  50%      5
  66%      7
  75%     11
  80%     13
  90%     18
  95%     21
  98%     24
  99%     25
 100%   4493 (longest request)

最長のリクエストは完了するまでに 4 秒以上かかることに注意してください。アプリでスレッド数を 50 に設定し、ab が 10 個の同時要求を使用することを考えると、cherrypy はそれを簡単に処理できると期待できます。私は何が欠けていますか?さまざまな #threads と同時リクエストを試してみましたが、同様の結果が得られました。私はCherryPy v.3.2.4を使用しています

助けてくれてありがとう、L.

4

1 に答える 1

0

まず、サーバー (localhost) と同じマシンで ApacheBench を実行しています。したがって、ApacheBench はテストしている同じマシンのリソースを消費しているため、正確なベンチマークではありません。

サーバーの CPU バウンドはありますか? CPU バウンドの場合、GIL (Global Interpreter Lock) があなたを噛んでいる可能性があります (CherrPy はマルチプロセッシングではなくマルチスレッドを使用しています)。これにより、一度に 1 つの CPU コアしか使用できなくなり、異常値が発生する可能性があります。

ベンチマークを実行するときは、テスト対象のサーバーと負荷を生成するマシンの両方でリソース (CPU、ネットワーク、ディスクなど) を常に確認してください。

より良いベンチマークは次のようになります:abサーバーへの高速ネットワーク接続を備えたリモート マシンから実行します (マシンが同じ LAN 上にあることを確認して、ネットワーク I/O があまり考慮されないようにし、1000 を超えるリクエストに対して実行して、 5 秒を超えるテストで、監視する時間が与えられます。

于 2013-10-07T21:01:14.893 に答える