2016-07-06 2 views
2

私はWebSocketとノードサーバーを使ってオンラインブラウザゲームを作っています.20-30人くらいのプレイヤーがいれば、CPUは通常約2%、RAMは10-15%です。私はちょうどそれをホストするために安価なデジタルオーシャン小滴を使用しています。ノードサーバーがランダムに100%にスパイクし、クラッシュします。どのように診断するのですか?

しかし、20〜30分ごとにサーバーのCPU使用率が10秒間に100%にスパイクしてから最終的にクラッシュするようです。その瞬間まで、CPUは通常2%前後でホバリングし、ゲームは非常にスムーズに実行されています。

ログにエラーがなく、私が見ることができるゲームで何も起こらないので、私はこのことを引き起こしていることを私に伝えることはできません。ちょうどサーバーをダウンさせるランダムなイベントのようです。

また、サーバーを停止させることはありませんが、すぐに解決するスパイクもあります。ここでは画像です:

http://i.imgur.com/EH3o8ue.png

私はどこにでもイベントループを遮断してるとは思わないと私は長い間実行されているように見える任意の実行パスを持っていません。サーバーとの間のパケットは、通常、ユーザーあたり1秒あたり2つです。したがって、帯域幅はまったく使用されません。また、サーバーはほとんどの場合、検証以外のパケットの処理をほとんど行わないリレーなので、どのようなコードパスが非常に集中的であるかわかりません。

私はこれをプロファイルし、これらのスパイクの原因を調査する方法をどこから見つけるべきですか?私は忘れてしまったいくつかのコードパスがあると思っています。負荷がかかっているうちに驚くほど遅くなっているか、それを解決するノードフラグがないかもしれませんが、わかりません。

+0

これはhttp://techblog.netflix.com/2014/11/nodejs-in-flames.htmlにチェックされていますか?またはこれはhttp://stackoverflow.com/questions/13375735/node-js-cpu-100/13376256#13376256?あなたは、負荷がノードのプロセスからトップなどを介していることを確認できますか? –

+0

@ mh-cbon:topはノードのアプリからすべてだったことを確認しました –

+0

あなたはニューレルティックを見たことがありますか? 5月も助けます。 –

答えて

1

私はそれを理解したかもしれないと思います。

私はほとんどのゲームでウェブソケットを使用していましたが、htopを実行していました。誰かが大量のパケットを送信した場合(短い時間内に大量のアクションを実行した場合)、CPUのスパイクは100%になります。なぜ帯域幅の使用を減らすためにbinary-packerを使用していたのかを思い出したのはなぜだろうかと思っていました。

私は関係なく、パケットがCPU使用率が2%の全体の時間に宿泊した方法大型の圧縮したパケットをパックしていない代わりにようJSONにパーサを変更しようとしました。

クラッシュを引き起こしていたのは、1人のプレイヤーが短時間で多くのデータを送信してしまい、サーバをすべてパックして時間通りに送信しなければならないことに圧倒されたと思います。

これは実際の回答ではないかもしれませんが、修正する必要があります。ありがたいことに、ゲームの帯域幅はそのままで、帯域幅はボトルネックではないので、JSONとして残しておきます。

唯一の問題は、ユーザーが好きではないChrome開発者コンソールの[ネットワーク]タブでパケットを読むことができるJSONエンコーディングであることです。ゲームの仕組みを見つけやすくなり、悪用する..

関連する問題