13

AWSインスタンスにNode.JSをスローし、リクエスト時間をテストしていたところ、いくつかの興味深い結果が得られました。

サーバーには次のものを使用しました。

var http = require('http');

http.createServer(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World');
  res.end();
}).listen(8080);

このサーバーまでの平均遅延は90ミリ秒ですが、リクエストの合計には約350ミリ秒以上かかります。明らかに、箱に多くの時間が無駄になっています。テストの前に、DNSがキャッシュされていることを確認しました。

私はサーバー上で1000の共通貨でApacheベンチを実行しました-それは4.3秒で10,000のリクエストを完了しました...これは平均4.3ミリ秒を意味します。

更新:ニヤリと言うだけで、同じマシンにApache + PHPをインストールし、単純な「Hello World」エコーを実行して、平均で92ミリ秒の応答時間を取得しました(2回のping)。

どこかに欠けている設定はありますか?

4

2 に答える 2

15

Chromeデベロッパーツールはフロントエンドのパフォーマンスを調査するための優れた方法ですが、実際のサーバーのタイミング/CPU負荷の非常に大まかな見積もりを提供します。開発ツールで合計リクエスト時間が約350ミリ秒の場合は、この数値からDNSルックアップ+接続+送信+受信を差し引き、次にラウンドトリップ時間(90ミリ秒?)を差し引いて、最初の見積もりを行います。あなたの場合、実際のリクエスト時間はミリ秒未満になると思います。サーバーで次のコードを実行してみてください。

var http = require('http');
function hrdiff(t1, t2) {
    var s = t2[0] - t1[0];
    var mms = t2[1] - t1[1];
    return s*1e9 + mms;
}
http.createServer(function(req, res) {
  var t1 = process.hrtime();
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World');
  res.end();
  var t2 = process.hrtime();
  console.log(hrdiff(t1, t2));
}).listen(8080);

結果に基づいて、ab平均送信+要求+受信時間を最大4.2ミリ秒(4200ミリ秒/ 10000要求)と見積もる必要があります(サーバーで実行しましたか?同時実行性は何ですか?)

于 2013-03-15T09:35:02.290 に答える
13

自分の質問に答えるのは絶対に嫌いですが、発見したことを将来の読者に伝えたいと思います。

tl; dr:res.write()に問題があります。express.jsまたはres.end()を使用します

たくさんのテストを行ったところです。複数のタイプのノードサーバーをセットアップし、PHPやNginxなどを組み合わせました。これが私の発見です。

前に述べたように、上記のスニペットでは、リクエストあたり約250ミリ秒を失っていましたが、Apacheベンチマークはその問題を再現しませんでした。次に、PHPテストを実行し、pingで2ミリ秒から20ミリ秒の範囲の結果が得られました...大きな違いがあります。

これはさらに調査を促し、私はNginxサーバーを起動し、それを介してノードをプロキシしました。そして、どういうわけか、pingを介して応答を250ミリ秒から15ミリ秒に魔法のように変更しました。私はそのPHPスクリプトと同等でしたが、それは本当に紛らわしい結果です。通常、追加のホップは物事を遅くします。

興味をそそられて、私はexpress.jsサーバーも作成しました-そしてさらに興味深いことが起こりました、pingはそれ自体で2ms以上でした。私はかなり長い間ソースを掘り下げて、それがコマンドを欠いていることに気づきましたres.write()、むしろ、それはまっすぐに行きましたres.end()。から「HelloWorld」を削除して別のサーバーを起動し、res.writeに追加しましたres.end。驚くべきことに、pingはpingより0msオーバーでした。

私はこれを検索し、それがよく知られた問題であるかどうかを確認したいと思い、まったく同じ問題を抱えているこのSOの質問に出くわしました。nodejsの応答速度とnginx

全体的に、興味深いもの。応答を最適化し、一度に送信するようにしてください。

皆さん、頑張ってください!

于 2013-03-22T06:47:29.547 に答える