私は8コアec2インスタンス(ubuntu 14.04、kernel = 3.13)でトルネードhttpサーバーを実行しており、16プロセスをプリフォークしています。フロントエンドでは、竜巻サーバへのnginxプロキシ要求があります。同じソケットでリッスンするときの複数のプロセス間のCPU時間の差が大きい
1秒あたり120回の着信要求があります。
ps aux | grep python
root 5097 0.0 0.2 186224 33740 ? SNs Dec21 0:00 python src/app/server.py
root 5157 0.0 0.2 497556 37212 ? SNl Dec21 1:58 python src/app/server.py
root 5158 0.0 0.2 497808 37364 ? SNl Dec21 1:51 python src/app/server.py
root 5159 0.5 0.2 501312 41152 ? SNl Dec21 22:17 python src/app/server.py
root 5160 0.1 0.2 498876 38716 ? SNl Dec21 5:03 python src/app/server.py
root 5161 0.0 0.2 497688 37232 ? SNl Dec21 2:14 python src/app/server.py
root 5162 0.0 0.2 499104 38808 ? SNl Dec21 2:49 python src/app/server.py
root 5163 0.0 0.2 498328 38004 ? SNl Dec21 3:36 python src/app/server.py
root 5164 11.6 0.3 512692 52432 ? SNl Dec21 471:59 python src/app/server.py
root 5165 0.1 0.2 498224 37996 ? SNl Dec21 4:11 python src/app/server.py
root 5166 0.2 0.2 499700 39440 ? SNl Dec21 9:45 python src/app/server.py
root 5167 0.1 0.2 498936 38780 ? SNl Dec21 6:36 python src/app/server.py
root 5168 0.0 0.2 498364 38052 ? SNl Dec21 3:09 python src/app/server.py
root 5169 1.5 0.2 504196 44048 ? SNl Dec21 64:47 python src/app/server.py
root 5170 0.3 0.2 500492 40156 ? SNl Dec21 13:53 python src/app/server.py
root 5171 0.0 0.2 498600 38264 ? SNl Dec21 2:30 python src/app/server.py
root 5172 5.4 0.3 508692 48388 ? SNl Dec21 222:58 python src/app/server.py
が、それは私が予想よりもはるかです。
また、CPU1は、他のコアよりも常に忙しいのようだ:
%Cpu0 : 0.0 us, 0.0 sy, 0.7 ni, 99.0 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.3 us, 1.3 sy, 8.3 ni, 89.4 id, 0.0 wa, 0.0 hi, 0.7 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 3.0 ni, 97.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 0.0 us, 0.0 sy, 4.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st
%Cpu4 : 0.0 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.3 st
%Cpu5 : 0.0 us, 0.0 sy, 0.3 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 1.3 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.3 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
しかしab
を使用して、圧力テストを実行するときに、ログが要求は基本的に同じようにそれらのプロセスに配信されていることを示しています。
コード:
app = tornado.web.Application(routers)
server = tornado.httpserver.HTTPServer(app)
socks = tornado.netutil.bind_sockets(8000, '0.0.0.0')
tornado.process.fork_processes(16)
server.add_sockets(socks)
io_loop = tornado.ioloop.IOLoop.current()
io_loop.start()
ような巨大な違いの原因である可能性がありますか?
サンプルロギングでは、 '%cpu1'が最も低い値です。他のすべての人は十分に活用されているように見える。システムのどこかで輻輳が発生していないことは確かですか?ここで働く人々のための多くのコードがあります。このQはおそらく、 'tornado'特有のユーザーグループフォーラムに投稿される方が良いでしょう。がんばろう。 – shellter
実際、私はこれが、異なるアプリケーションを実行しているいくつかの竜巻サーバーで起こっているのを見ています。 SO_REUSEPORTと何か関係があるかもしれないと思っていましたが、それを有効にしても差は出ませんでした。私は竜巻のユーザーグループに投稿する必要があります。ありがとう。 – Shaung
応答待ち時間はどうですか?私は要求率が1つのコア/プロセスを十分に活用するのに十分高いとは思わない。 – georgexsh