node.jsアプリケーションの通常のプロファイリング

まえがき



node.jsで開発する際の障害の1つは、他の最新の言語に比べてデバッグが複雑になることです。 大規模なアプリケーションでのコードの非同期構造により、メモリリークや、専用のユーティリティなしでプロセッサを頻繁に使用する場所を見つけることが難しくなります。 時には、node.js用のプロファイリングツールが既に作成されていましたが、それらのほとんどは単に十分に便利ではなかったか、開発者によってサポートされなくなっていました。



検索



長い間、使用メモリの量とコードの重要なセクションの実行時間を定期的にコンソールに出力するという形で保守的なデバッグ方法で管理していましたが、高品質のツールの必要性が非常に緊急になったときがきました。



まず、 ノードインスペクターが回復したかどうかを確認することにしました。node.js0.6.xに切り替えた後、CPUとヒープのプロファイリングのサポートが停止しました。 ノードインスペクターの新しいバージョンでは、アイドルプロファイリングが完全に除外され、現在は単なるデバッガーであることが判明しました。 古いバージョンのコードを少し調べてみると、ノード0.8.xでCPUとヒープのプロファイルを取得することができましたが、このソリューションは理想的ではありませんでした。 「クラフト」状態から抜け出すには、WebKitコンソールの古いインターフェースを最新のものに置き換え、適切な量のコードを書き換え、パフォーマンスの問題を修正する必要があります。 一般に、WebKitコンソールに基づいたソリューションは非常に柔軟であると思われるため、このベンチャーをやめて検索を続けました。



ここにある



さらにいくつかの異なるオプションを試した後、サービスhttps://nodetime.comに出会いました。 これは完全に異なるレベルのツールであり、「同じ」理想的なツールの役割により適しています。 サービスは2つの部分で構成されます。

nodetimeには、最も必要なCPUおよびヒーププロファイリングツールに加えて、開発を大幅に簡素化する一連のメトリックが含まれています。 サービスを使用するシンプルさとアクセシビリティに非常に満足しています。 開始するには、nodetimeモジュールをプロジェクトに接続するだけです。



nodetimeは、リアルタイム統計の収集と表示に加えて、特定の期間の統計を保存および表示したり、特定のイベント(メモリリークなど)の通知を構成したりする機能を提供します。



もっと欲しい



もちろん、nodetimeサービスは非常に便利ですが、常に遠く離れて、アプリケーションのリモートデバッグの可能性があります。 多くの場合、プロファイラによって収集されたデータの機密性の問題は非常に深刻であり、ネットワークに接続せずにデバッグする可能性は絶対に不要ではありません。



なぜなら バックエンドnodetimeはMITの下でライセンスされており、その作者のおかげで、私はそれに基づいてローカルで使用できるインターフェースを作成することにしました。 1週間半の無料の夕べをプロトコルの分析とインターフェースの実装に費やした後、私は人々に見せることを恥じない安定したバージョンを得ました。 会う...



見て



デモを開始するには:

チャットの実装の例はここから開始されます。

そして、ここでプロファイラーを見ることができます。



注意:デモは弱いVPSで実行されています。誰もが見られるようにハードコアをアレンジしないことが大きな要求です。



プロジェクトのソースコードはGitHubにありますnpmを使用して、アプリケーションにモジュールを追加できます。



npm install look
      
      





モジュールを機能させるには、アプリケーションに接続し、必要に応じて、プロファイラーが機能するポートとインターフェイスを指定します。 デフォルトでは、プロファイラーはポート5959で起動し、「0.0.0.0」インターフェースをリッスンします。



簡単な例:



 require('look').start(3131); var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8080, '0.0.0.0'); console.log('Server running at http://0.0.0.0:8080/');
      
      





アプリケーションの起動後、プロファイラーはサーバーのポート3131で利用可能になります。



インターフェイスは、メインアプリケーションの動作に影響を与えないように、別のスレッドで実行されるconnectに基づく小さなアプリケーションを担当します。



おわりに



これは、最も必要な機能を実装する外観の最初の安定バージョンです。 必要に応じて、外観が改善され、成長する余地があります。 このツールが、node.jsアプリケーションの作成に役立つことを願っています。



All Articles