2014年03月30日

JavaScriptのメモリリークを10倍速で発見する

Leak

メモリリーク。一言でプログラマを死に追いやる恐怖の言葉。C/C++の世界ではmallocしたのにfreeしないとかのケアレスミスでよく起きていた問題です。その後、ガベージコレクタが掃除してくれるプログラミング言語が増え、一部の言語で循環参照に気をつけるぐらいであまり気にしなくても良い的な風潮になっています。

というものの、そうとも言ってられなくない状況も増えてきています。クラウドのスケールアウトブームも一段落というかコモディティ化し、go言語で再び性能向上方面に関心が寄せられたり、日本でErlangの勉強会が満席になったり、スケールアウトから再びスケールアップ方面に話題が移りつつあるのを感じます。長時間稼働のサーバで、スケールアップしてさらに数多くのリクエストを大量に受けるようになると、少しのリークでも大問題になります。

僕は現在はnode.jsを頻繁に使っています。node.jsはV8のおかげで、コンパイル言語から比べると遅いかもしれないけど、他のスクリプト言語の中では高速な部類に入りますし、今後もさまざまな場所で使われていくと思います。このエントリーではnode.jsのメモリリークの発見の方法について紹介します。

node.jsの基本的なメモリリークの発見方法

メモリリークの発見を難しくしてしている要因は、クロージャと無名関数です。

ガベージコレクタを搭載した言語のメモリリークは、「変数を持ち続けているために、リンクが残り続けてしまう」のが原因です。Chromeの開発者ツールを使うと、その時のオブジェクトのスナップショットを取得できてクラス情報も得られます。クラス名が得られますし、定義したクラスを使っている箇所は何箇所かに絞れることが多いので、比較的原因箇所を見つけるのは難しくないと思います。

やっかいなのは、クロージャです。クロージャは、構文的なつながりはなくとも、内部から参照していればその外の変数をキャプチャします。クロージャが残っていれば、そのキャプチャされている変数も残り続けます。たとえその変数がローカル変数であってもです。実際にそれが無名関数として定義されていれば(そのケースが多いはず)、難易度は上がります。具体的に見て行きましょう。

node-webkit-agentで増加したオブジェクト一覧を見る

続きを読む
posted by @shibukawa at 18:31 | TrackBack(0) | 日記 はてなブックマーク - JavaScriptのメモリリークを10倍速で発見する

2014年03月11日

詳細設計書は必要か?

よく使われている or 仕様が分かっているフレームワーク上で作業するならコード読めば理解できるので不要だと思います。実際、数週間前からチーム変わったけど、社内の共通フレームワーク上で平準化されているので、まったくドキュメント不要でした。すべての箇所に平等に書く必要性はないと思います。

とはいえ、去年、僕が当時詳しくなかったアルゴリズムのFM-indexで検索エンジンを作った時は、解説の本、論文、参考実装のC言語のコードがないと手が出なかったので、完全に無くせるかというとムリかなぁ、と思います。今も別の論文を読みつつ実装にチャレンジしてますが、コード1行に対して数倍の解説が欲しいぐらい難解でなかなか進まないです。

まぁ、詳細のドキュメントがいらないような簡単な仕事しかしてないと、どんどん自分のエンジニアとしての価値を切り売りしているような気がするので、「一行一行、コメントめちゃくちゃ書きたい!」ってついつい思うような難易度の高いことにどんどんチャレンジしていきたいですね。

posted by @shibukawa at 12:32 | TrackBack(0) | 日記 はてなブックマーク - 詳細設計書は必要か?

2014年03月01日

華氏で気温を言われてもしっくりこないんです・・・

アメリカは自分中心すぎる、みたいに言われる理由の一つが温度。アメリカでは天気予報が華氏(℉)を使っています。とはいえ、日本でも馴染みがあるけど他国で使われてない単位とかいっぱいあるし、タタミ一畳の広さは地域によって違うとか、さらにヒドイものもあるし、まぁ郷に入っては郷に従えでいいのかな、と思っています。

DeNAサン・フランシスコの大塚さんが、以前Facebookにこんなことを書いてました。

そもそも、摂氏のほうが、水の凝固点が0度、沸点が100度と、曖昧なポイントに0度と100度がある華氏よりも実用的だと個人的には思うのですが、アメリカ人の友人には、「そんなことはない。華氏100度になると、人間はくたばる。華氏0度になると、やっぱり人間はくたばる。だから華氏の方が明確で実用的だ。」と言われ、少し負けたと思ってしまいました。

これは分かりやすい。摂氏は水が基準。華氏は人間が基準。華氏も人間の体感と結びつけて考えれば数値を言われた時に「ああ、このぐらいか」「こういう服装でいけばいいか」と考えやすいのではないかな、と思います。頭に換算表を作るのではなく、イメージを作るというのがこのエントリーのゴールなので、あえて摂氏は書きません。

  • 0: 人間が死ぬ温度。スキー場でも北海道の内陸とかじゃないといかない温度。
  • 50: アメリカ人がTシャツになり始める温度。日本人は長袖。サン・フランシスコの冬、東京の秋がこのぐらい。
  • 70: 日本人もTシャツになり始める温度。アメリカ人は上半身ハダカになり始める。サン・フランシスコの夏がこのぐらい。
  • 80: マイアミとかリゾートな温度。
  • 100: 人間が死ぬ温度。熱中症とかがニュースに出てくる温度。体温として考えても、病院にいったり薬を飲む温度。
  • 375: 天ぷらとかオーブン料理をする温度。

だいぶ僕の中でもイメージができあがってきました。

posted by @shibukawa at 05:52 | TrackBack(0) | 日記 はてなブックマーク - 華氏で気温を言われてもしっくりこないんです・・・
検索ボックス

Twitter

www.flickr.com
This is a Flickr badge showing public photos and videos from shibukawa.yoshiki. Make your own badge here.
<< 2014年03月 >>
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
最近の記事
カテゴリ
過去ログ
Powered by さくらのブログ