JavaScriptのメモリリークを発見してくれるツール「Leak Finder」をグーグルが公開

2012年8月16日

ガベージコレクションの機能を備えるJavaScriptのような言語で開発されたアプリケーションでは、基本的にメモリリークは生じないはずですが、それでも回収されないメモリ領域がどんどん増えていくというメモリリーク的な状況は起こりえます。

leak-finder-for-javascript - Tool for finding memory leaks in JavaScript programs. - Google Project Hosting

メモリリークは最終的にはそのソフトウェアの動作を遅くしたり不安定にしますが、短期的には問題なく動作しているように見え、単純なテストでは症状が表れにくいため、発見は難しいものです。

グーグルはこうしたJavaScriptのメモリリークを検出してくれるツール「Leak Finder」を公開したことを、ブログ「Leak Finder: a new tool for JavaScript」で紹介しています。

Chromeのリモートプロトコル経由で検出

Leak FinderのWebサイトでは、このツールを以下のように説明しています。

In JavaScript you cannot have "memory leaks" in the traditional sense, but you can have objects which are unintentionally kept alive and which in turn keep alive other objects, e.g., large parts of DOM.

JavaScriptでは、伝統的な意味での“メモリリーク”は起きない。けれども、意図せずに保持されたままのオブジェクト、例えば大きなDOMなどを持ち続けてしまうことはありえる。

Leak Finder for JavaScript works against the Developer tools remote inspecting protocol of Chrome, retrieves heap snapshots, and detects objects which are "memory leaks" according to a given leak definition.

Leak Finder for JavaScriptは、Chromeが備えているデベロッパーツールのリモートインスペクションプロトコルで動作し、ヒープのスナップショットを取得、前述のようなメモリリークを起こしているオブジェクトを検出する。

また、動作条件として以下の3つが指定されています。

  • ちゃんと分かるコード(注:難読化されていないことを指すのでは)
  • 7月10日以後の、新しいClosureライブラリ(注:グーグルのJavaScriptライブラリ)
  • Chromeのバージョン21以降

検出内容はClosureライブラリで定義された独自の配列に保存されるようです。

Leak Finder relies on goog.Disposable monitoring mode. The mode gathers all created but not yet disposed instances of goog.Disposable (and its subclasses) into an array goog.Disposable.instances_.

Leak Finderは、goog.Disposableモニタリングモードに依存している。このモードでは、生成後に破棄されていないインスタンスをgoog.Disposable.instances_配列に格納する。

この配列には、メモリリーク解消のための有用な情報なども格納されており、また情報はマシンリーダブルになっているため自動化テストにも適用できるとのことです。

Chromeのリモートプロトコルを使うなど、それほど手軽にインストールして試せるツールではなさそうですが、JavaScriptの大規模アプリケーションでテストの自動化など品質検査工程にそれなりの工数を割ける環境であれば、試してみる価値がありそうです。

JavaScriptで大規模なアプリケーションを開発するケースはこれから増えていくはずで、今後こうしたツールの充実が進んでいくことでしょう。

関連記事

JavaScriptのメモリリーク対策については、以下の記事でも紹介されています。

あわせて読みたい

JavaScript Web技術 Google




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本