DerailedでRailsアプリのGem別メモリ使用量をプロファイリングする方法
Railsアプリのメモリ消費、その原因はGemかもしれない
Railsアプリが大量のRAMを消費している――それ自体はよくある話です。しかし、それが「仕方のないこと」だと諦める必要はありません。実は、アプリケーションのメモリフットプリントを押し上げている犯人が、1つまたは複数の肥大化したGemであるケースは少なくありません。
Derailedとは何か
最近、Richard Schneeman氏による非常に興味深いプロジェクト「Derailed」を見つけました。これは自動ベンチマークツールのコレクションで、GitHub上で公開されています。導入はとても簡単で、RailsアプリのボトルネックとなっているGemを特定するのに役立ちます。
セットアップ方法
必要なのは、Gemfileに以下の2行を追加するだけです。
gem 'derailed', group: :development
gem "stackprof", group: :development
Gemごとのメモリ使用量を確認する
セットアップが完了すると、各Gemがコンパイル時(require時)にどれだけのメモリを消費するのかを正確に把握できるようになります。

bundle:memコマンドを実行すれば、コンパイル時に各Gemが使用するRAMの量を一覧形式で確認できます。上位に表示されるGemこそ、メモリ削減の最初のターゲットになるでしょう。
オブジェクト割り当ての分析
さらにDerailedでは、ロード時に各Gemが割り当てるオブジェクトの数も調べられます。

bundle:objectsコマンドを使うと、ロード時のオブジェクト割り当てに関する詳細な情報を取得できます。不要に多くのオブジェクトを生成しているGemが見つかれば、代替Gemへの乗り換えや遅延読み込み(lazy loading)の検討につながります。
実行時のメモリ計測ツールも搭載
Derailedには、アプリケーションの稼働中のメモリ使用量を計測するためのツールも用意されています。ただしこれらを利用するには、開発マシン上でアプリを本番(production)モードで起動できる環境が必要です。筆者自身はまだ試せていませんが、本番相当の環境でメモリリークを追跡したい方にとって強力な選択肢となるはずです。
「Railsはどうしてもメモリを食うもの」と決めつける前に、まずはDerailedでGemごとのメモリ使用量を可視化してみてはいかがでしょうか。思わぬ肥大化したGemが見つかるかもしれません。
-
LinkedInの「カバーストーリー」動画でプロフィールをもっと魅力的にする方法
LinkedInは、メンバー向けに新しい機能「カバーストーリー(Cover Stories)」をひっそりと導入しました。これはあなたのブランドやビジネスの成長に役立つ可能性を秘めた機能です。カバーストーリーでは、自分のビジネスやスキルを紹介する動画クリップを作成し、プロフィールに追加できます。閲覧者があなたのプロフィールを開くと、この動画を目にすることができるのです。 中小企業の経営者にとって、プロフィールへの動画追加は、個人ブランドとビジネスブランドの両方を強化し、顧客獲得につなげる絶好のチャンスです。さらに嬉しいことに、カバーストーリーはプレミアム会員限定の機能ではありません。プラットフ
-
Googleファミリーリンクで子どものスマホ利用を見守る方法【設定手順を解説】
テクノロジーは目まぐるしいスピードで進化しており、私たちのライフスタイルもそれに合わせて大きく変化しています。特に小さなお子さんがいるご家庭では、テレビやスマートフォンで何を見ているのか、一日中気にかけて見守るのはとても大変な作業です。そんな保護者の悩みに対して、Googleが便利な解決策を用意しています。 Googleファミリーリンクとは? Googleファミリーリンクは、保護者が子どものスマートフォンの利用状況を監視できるペアレンタルコントロール機能です。週次または月次のレポートでお子さんが好きなアプリにどれだけの時間を使っているかを確認でき、端末の1日の利用時間制限を設定することも可能で