メモリ不足でサーバーが遅い?|freeコマンドでリソース状況を即チェック

未分類

サーバーが急に重くなったとき、その原因がどこにあるのかを素早く把握することは運用者にとって重要です。

特にメモリ不足は処理速度低下やサービス停止の直接的な要因となるため、早期の確認が欠かせません。そんな時にはLinux環境では「free」コマンドを使うことで、メモリやスワップの利用状況を即座に把握できます。

本記事では、サーバーが遅く感じられるときに役立つfreeコマンドの基本的な使い方と、実際の読み解き方を解説します。

なぜサーバーが遅くなるのか?メモリ不足の仕組み

メモリ使用率とパフォーマンスの関係

サーバーが処理を行う際には、プログラムやデータを一時的にメモリ上に展開して動作しています。メモリはCPUに近い高速な領域であり、十分に確保されていると処理はスムーズに進みます。しかし、利用可能なメモリが少なくなると、サーバーはプログラムを効率よく動かせず、処理が停滞する原因となります。特にアクセス数が増えたり、メモリを大量に消費するアプリケーションが動作した場合に顕著に影響が出やすいです。

一方で、Linuxは空きメモリをできるだけ活用しようとするため、キャッシュやバッファとして使用している領域があります。表面的に「空きが少ない」と見えても、実際にはキャッシュを解放することで利用可能なメモリを確保できる仕組みがあり、単純に「free(空きメモリ)」の数字だけで判断するのは誤りです。パフォーマンスの低下は「available(利用可能)」の値に注目することで、より正確に把握できます。

スワップ発生による速度低下とは

メモリが不足すると、LinuxはハードディスクやSSD上のスワップ領域を仮想的なメモリとして利用し始めます。これを「スワップ発生」と呼びます。スワップは物理メモリよりも圧倒的に遅いため、頻繁に利用されると処理速度が大幅に低下します。特に、I/O処理の多いサーバーではレスポンスが遅れ、サービス提供に影響を及ぼす可能性があります。

スワップの発生自体は異常ではありませんが、常時多用されている場合は明らかなリソース不足のサインです。アプリケーションの設定を見直したり、不要なサービスを停止したりする対策が求められます。スワップの利用状況を把握することは、サーバーの健全性を保つための第一歩といえるでしょう。

freeコマンドの基本とインストール有無の確認

freeコマンドとは?

free コマンドは、Linuxにおけるメモリとスワップの利用状況を表示するシンプルなツールです。現在どれくらいメモリが使われているか、空きがあるのかを即座に確認できるため、サーバー運用やトラブルシュートの際に頻繁に利用されます。表示内容には物理メモリだけでなく、キャッシュやバッファの情報、スワップ領域の使用状況も含まれており、サーバー全体のリソース状態を把握するのに役立ちます。

ほとんどのLinuxディストリビューションに標準で含まれているため、特別な準備をせずとも利用できる場合が多いのも特徴です。サーバーが重いと感じたときにすぐに確認できる便利な基本コマンドとして覚えておくと良いでしょう。

利用できない場合の確認とインストール方法

一部の最小構成でインストールされたLinux環境やコンテナ環境では、free コマンドが利用できないケースがあります。この場合は、以下の手順で確認とインストールを行います。

まずは利用可能かどうかを確認します。

which free

パスが表示されれば利用可能、何も表示されなければインストールが必要です。

ディストリビューションによってインストールコマンドが異なります。

  • Debian / Ubuntu 系
sudo apt-get update
sudo apt-get install procps
  • CentOS / RHEL 系
sudo yum install procps-ng
  • Alpine Linux
sudo apk add procps

インストールが完了すると、free コマンドが使えるようになります。これにより、環境を問わずメモリやスワップの状況を簡単に調べられるようになります。

freeコマンドの基本的な使い方

free コマンドの実行例

free コマンドを実行すると、メモリとスワップに関する統計情報が表形式で表示されます。もっとも基本的な実行方法は以下の通りです。

free

出力例は次のようになります。

              total        used        free      shared  buff/cache   available
Mem:        16093724     3248580     1049376      582456    11895768    12048236
Swap:        2097148           0     2097148

この表を見れば、物理メモリとスワップの合計・使用量・空き容量がひと目で分かります。-h オプションを付ければ、数値を KB/MB/GB といった読みやすい単位で表示できます。

free -h

この形式であれば、数百万KBのような値をわざわざ計算せずに済むため、運用現場での素早い確認に非常に便利です。

表示される各列の意味(total / used / free / buff/cache / available)

出力の各列は以下のように解釈します。

  • total:搭載されている物理メモリやスワップの総容量
  • used:現在使用中の容量(キャッシュやバッファを含む)
  • free:完全に空いている容量
  • shared:複数プロセスで共有されている容量(主に tmpfs など)
  • buff/cache:ディスクI/Oを高速化するために利用されているキャッシュやバッファ
  • available:実際にアプリケーションが新たに使用可能な容量

特に重要なのが available の列です。Linuxは空きメモリを積極的にキャッシュ利用するため、free の数値だけを見ると「空きが少ない」と誤解しがちです。実際の運用では、available の値を重視してメモリの余裕を判断すると良いでしょう。

この理解があると、単に「メモリがいっぱい」と慌てることなく、システムの健全性を正しく評価できるようになります。

メモリ不足を読み解く実践的な見方

実際にどこを確認すべきか

free コマンドの出力を眺めたとき、まず目を向けるべきは 「available」 の列です。ここが大きく減少している場合、アプリケーションが新しくメモリを要求したときに対応できる余裕が少ない状態を意味します。逆に「free」の数値が小さくても、available が十分あれば大きな問題ではありません。

サーバーが遅いと感じられるときは、free -h を実行して「available」の値が物理メモリの総量に対してどれくらい残っているかを確認しましょう。経験則としては、総メモリの 20% を切ってくると要注意です。常に 10% 以下しか残っていない場合は、メモリ不足による性能低下が起きている可能性が高くなります。

また、メモリの利用状況を瞬間的に確認するだけでなく、定期的に数値を記録し推移を追うことも重要です。cron と組み合わせてログを残し、負荷が高まる時間帯や処理ごとの増減を把握すると、トラブルシュートが格段にしやすくなります。

「available」と「used」の違いに注意

初心者がよく混乱するのが「used」と「available」の違いです。

  • used は実際に使用されているメモリに加え、キャッシュやバッファも含んでいます。したがって値は大きく見えがちです。
  • available はキャッシュとして確保されている領域を解放した場合に利用可能になる分も含むため、実際に新しいアプリケーションが使えるメモリ量を表します。

つまり、used の数値が大きくても、available が十分に残っていれば「メモリ不足ではない」と判断できます。逆に、freeused だけを見て「もうメモリが足りない!」と誤解し、不要なスケールアップや増設をしてしまうのは避けたいところです。

サーバー運用においては「available」を基準にしながら、スワップの利用状況やアプリケーションの挙動も併せてチェックすることで、より正確に状況を把握できます。

スワップ利用状況を確認する方法

freeコマンドでswap行を確認

free コマンドの出力には、物理メモリの行とは別に Swap の行があります。ここにはスワップ領域の総容量と、そのうちどれだけが利用されているかが表示されます。

例えば以下のような出力があったとします。

Swap:       2097148      524288     1572860

この場合、約 2GB のスワップのうち 500MB ほどが実際に利用されていることを意味します。短時間だけスワップが使われるのは珍しいことではありませんが、利用量が多く、かつ減らない状況が続くときはメモリ不足のサインです。

特に、Swap の「used」値が数百MB以上に常に張り付いているような状態では、物理メモリだけでは処理が追いつかず、遅延が発生している可能性が高いと考えられます。

スワップが多いときの改善策

スワップの利用が慢性的に多い場合は、以下のような対策を検討します。

  • 不要なプロセスやサービスを停止する
    使っていないデーモンやバックグラウンドプロセスがメモリを圧迫している可能性があります。
  • アプリケーションの設定を調整する
    データベースやWebサーバーのキャッシュ設定を見直し、必要以上にメモリを消費していないか確認しましょう。
  • キャッシュや一時ファイルを整理する
    定期的に不要ファイルを削除し、メモリやスワップへの負担を軽減します。
  • メモリの増設やスケールアップ
    根本的な解決策は、サーバーの物理メモリを増やすことです。クラウド環境であれば、より大きなプランへの変更も検討できます。

スワップの利用状況を把握し、必要なタイミングで適切な対策を行うことで、サーバーのパフォーマンスを安定させられます。freeコマンドはその判断材料を得るうえで非常に有効なツールです。

サーバーが遅いときの対処法

不要なプロセスを停止する

メモリ不足の原因は、意図せず動いているプロセスにある場合があります。ps auxtop コマンドを併用し、CPUやメモリを大量に消費しているプロセスを確認しましょう。もし不要なものであれば kill コマンドで停止することで、即座にメモリを解放できます。特に開発中のアプリケーションやテスト用のプログラムがバックグラウンドで動いているケースは少なくありません。

キャッシュやログを整理する

Linuxはキャッシュを積極的に使う設計ですが、必要以上にメモリを圧迫している場合には整理が有効です。また、大量のログファイルが生成される環境では、ログローテーションが適切に設定されていないとディスクI/Oやメモリに悪影響を及ぼすことがあります。logrotate などの仕組みを活用して、不要なログを定期的に削除・圧縮するとよいでしょう。

メモリ増設・スケールアップの判断基準

プロセスの調整やキャッシュ整理をしても改善しない場合、サーバー自体のリソース不足を疑う必要があります。判断のポイントは以下です。

  • free コマンドで available メモリが常に少ない状態
  • スワップが継続的に利用されている状態
  • アプリケーションごとの最適化を行っても改善が見られない

こうした状態が続くのであれば、物理メモリの増設や、クラウド環境であれば上位プランへのスケールアップを検討すべきです。メモリ不足は放置するとサービス全体の安定性に関わるため、早めの対応が安全です。


サーバーが遅いと感じたときは、まず free コマンドで状況を確認し、不要プロセスやキャッシュ整理といった軽い対処を行いましょう。それでも改善しない場合には、ハードウェア的な増設やプラン変更といった根本的な対策が必要となります。

定期的な確認で安定運用を実現

定期監視の重要性

サーバーが「急に重くなった」と感じるとき、実際には以前から少しずつメモリが逼迫していたケースが多いです。突発的な障害を避けるには、freeコマンドを一度きりではなく 定期的に実行してログを残す ことが効果的です。cronに組み込んで1時間ごとに結果を出力し、日ごとの推移を確認することで、負荷が集中する時間帯や特定の処理による増減を把握できます。これにより、問題の兆候を早期に発見しやすくなります。

他コマンドや監視ツールとの組み合わせ

freeコマンドはシンプルで便利ですが、瞬間的な数値しか表示できません。そのため、より深く原因を突き止めるには他のツールと併用するのが効果的です。

  • top / htop:プロセスごとのメモリ消費をリアルタイムで確認できる
  • vmstat:メモリやCPU、I/Oの動きを時系列で監視できる
  • sar (sysstat):長期間のリソース利用状況を記録し、レポート可能

また、大規模な運用では ZabbixPrometheus + Grafana といった監視システムを導入することで、グラフ化やアラート通知が可能になり、freeコマンドのデータを活かしつつ効率的にサーバーを管理できます。


このように、freeコマンドを定期的に活用し、他ツールとの組み合わせで監視体制を強化することで、突発的な障害を未然に防ぎ、安定したサービス提供を実現できます。

まとめ:freeコマンドを理解して効率的なサーバー運用を

サーバーの動作が遅く感じられるとき、原因の多くはメモリの利用状況にあります。free コマンドを使えば、シンプルな操作で現在のメモリ残量やスワップの使用状況をすぐに確認でき、障害発生時の初動調査に大きな力を発揮します。

単に「空きメモリが少ない」かどうかを見るのではなく、available の数値を基準に判断すること、そして スワップの使用量を監視すること がポイントです。これらを理解することで、不要なリソース増強に走らず、現状の環境を最適に活用する判断ができます。

さらに、定期的な確認やログ化によって傾向を把握すれば、トラブルが起こる前に余裕をもって対策を講じることも可能です。サーバー管理において「原因を探す時間」を短縮できることは、ダウンタイムの削減やサービスの信頼性向上につながります。

free コマンドは小さなツールながら、サーバー運用に欠かせない基礎中の基礎です。日常の監視やトラブルシュートの場面で積極的に活用し、効率的で安定したサーバー運用を実現しましょう。

参考・参照リンク

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント