Firefoxが大量にメモリを使用する現象への対策(続報)

以前の記事の続報です。

おそらく、「It’s All Text!」というアドオンがメモリリークを起こしています。ただ、何が原因なのかは、まったく分かりません(ソースを見ることはできるので自分で突き止めることも不可能ではありませんが…)。このアドオンを有効にした場合、有効にしていない場合よりもメモリ使用量は増加しますし、タブを閉じて減少すべき場合にも減少しないという現象を確認しています。

ただ、他にもメモリリークを起こしているアドオンはたくさん存在するでしょうし(上記アドオンしか調べていません)、日頃見ているサイトによってもメモリ使用量は変わるものと思われます(特定の場合しかメモリリークを起こさない可能性もある)。

そのため、「このアドオンを切ればメモリリークが一般的に解消される」という結論を導くことはできません。しかし、不要なアドオンをオフにすることで、メモリ使用量を軽減することができ、安定的に運用することができるということは言えると思います。

Firefoxが大量にメモリを使用する現象への対策

しばらく前まで、Firefoxが異様にメモリを消費して困っていました(約600MB)。そのおかげで頻繁にスワップが発生し、Firefox自体はもちろんのこと、システム全体のパフォーマンスも低下してしまっていました。

どこに原因があるのかハッキリとは分からなかったのですが、最近、あまり使っていないアドオンを無効化することで劇的な改善がみられました。おそらく、停止したアドオンがメモリを浪費する原因になっていたものと思われます。

停止前は増えるばかりだったメモリ使用量が、停止後は増減を繰り返して一定の値を保つようになっています。アドオンにメモリリークがあって、確保したオブジェクトを解放していないのだと考えられます。

どのアドオンが原因かは確認していないのですが、確認が取れ次第、続報として書き込みたいと思います。

どうもFirefoxの動作が重いなと感じている方は、使っていないアドオンをいったん無効化してみることをオススメします。メモリ使用量はタスクマネージャを使うことで確認することができます(firefox.exeのプロセスのワーキングメモリ量をみればよい)。

KeePass

KeePass Password Safe:

http://keepass.info

今回紹介する「KeePass」は、パスワードを管理するためのソフトウェアです。インターネット上の会員制サイトや、電子メールのアカウントなど、個人が管理しなければならないユーザー名とパスワードは増加の一方です。そのため、同じパスワードを使いたくなるのですが、そうすると、ひとつのパスワードが突破されてしまうと全てのアカウントについてパスワードが突破されることになってしまいます。かといって、それぞれのアカウントに異なるパスワードを設定すると、忘れてしまってログインできなくなることもあります。そこで、これらの情報を安全に管理するためのソフトウェアというものにニーズが生じるわけです。

オープンソースで開発されているため、パスワードなど盗み取るコードが混入していないことを自分で確認できる(もちろん前提知識は必要ですが…)という点が一番の特徴です(だと思っています)。

使い勝手もよく、ひとつの項目に追加的な情報を多数書き込めたり、全体検索機能、メモリ内暗号化によるセキュリティの強化など、さまざまな機能を備えています。また、Firefoxのアドオン「KeeFox」を使うことで、Firefoxとの連携をすることもできます。

Firemacs

突然ですが、Firefoxの話題でも。

今回紹介するのは、「Firemacs」というアドオンです。

Firefoxのキーバインドをemacs風にしてくれます。…それだけです。Ctrlの位置を入れ替えるなどキーマップを変更する機能は持っていないので、そちらはFirefox以外のソフトウェアなどで対応するしかありません。

いろいろできるらしいのですが、わたしが使っているのはC-fやC-nなど、カーソル移動とカット&ペーストくらいです。しかし、テキストボックスに文章を打ち込んでいても新しいファイルを開こうとしたり、新しいウィンドウが開かれたりしなくなっただけでも満足です。

MozSwingにビックリ

JavaでHTMLをレンダリングしようとすると、どえらく大変です。SwingコンポーネントもHTMLを解釈してレンダリングしてくれますが、CSSなどには対応しておらず、ごく基本的なHTMLしか使うことができません。

Javaでスタイルシートも含めてHTMLをレンダリングしたい! 自前でSwingコンポーネントを組み立てていくのはイヤだ! そう叫びたい方、現に叫んでいる方に朗報です。あのオープンソースで開発が進められている有名ブラウザ、FirefoxをSwingコンポーネントとして使うことができるようになっていたのです。

MozSwing (SourceForge)からパッケージをダウンロードすることができます。

内部ではXULRunnerという、XULとXPCOMを使ったアプリケーションを動作させるための基盤システムを使っています。パッケージには各プラットフォームごとのバイナリが入っており、内部としては、単純に、Javaを介してそれらのバイナリを動作させているだけということになります。

パッケージに入っているjarファイルをすべてクラスパスに組み込み、提供されているSwingコンポーネントMozillaPanelを使うことで、簡単にFirefox相当のブラウザを組み込むことができてしまいます。

ただ、事前に、システムプロパティmozswing.xulrunner.homeにXULRunnerのディレクトリを指定しておかなければならないようです。これをインストールされているFirefoxのディレクトリに合わせれば、最新版のFirefoxで動作することになるのかなあ? 内部動作など、まだよく分かっていないので、予想です。

サンプルコードはkaisehのブログに掲載されていました。まあ、JFrameにMozillaPanelを貼り付けるだけ、というシンプル極まりないものですが。これだけでブラウザが動作してしまうのですから、ちょっとビックリです。