サーバーに Ubuntu 14.10 をインストールしました。サーバーの主なタスクは、MongoDB インストールといくつかの NodeJS アプリケーションを実行することです。NodeJS アプリケーションは継続的に実行され、外部からのリクエストを受け入れます。
時々、大きなリクエストが入り、一部の NodeJS アプリケーションが短時間に大量の RAM を使用するようになります。これを監視しようとしていますが、調査結果をどう解釈すればよいかわかりません。
これまで私はRAMの使用状況を把握するために2つのコマンドを使ってきました。
free -m
そして
sudo htop
最初のものはこれを示しています:
total used free shared buffers cached
Mem: 3442 3158 283 6 111 1203
-/+ buffers/cache: 1842 1599
Swap: 0 0 0
これを見ると、約 280 MB の RAM が空いていると言えます。それほど多くないように思えます。
htop は次のように表示します:
1 [||| 0.8%] Tasks: 61, 129 thr; 2 running
2 [||| 1.0%] Load average: 1.16 1.15 0.93
Mem[|||||||||||||||||||||||||||||||||||||1979/3442MB] Uptime: 29 days, 00:23:31
Swp[ 0/0MB]
これをどう読めばいいのかよく分かりません。誰か助けてくれませんか?
結局のところ、私の質問は次のようになると思います。
- 利用可能な RAM の容量を把握するにはどうすればよいでしょうか?
- RAM メモリが少なすぎるのはどのような場合ですか? 300 MB は非常に少ないと考えられますか? 危険なほど少ないと考えられますか?
答え1
要約: 行に十分な空きメモリが表示されていれば心配する必要はありません-/+ buffers/cache
。空きメモリが少なく、ディスクへの書き込みが継続している場合はswap
、心配する必要があります。
説明:
現在の RAM 使用シナリオは問題ありません。出力を取得してfree -m
詳細を見てみましょう。
すべての列はfree -m
説明不要です。重要なのは、キャッシュおよびバッファリングされたメモリの量を確認せずにメモリ使用量が高くなっても心配する必要がないことです。
出力から、3442 MB の RAM のうち 3158 MB が使用されていることがわかります。単純に減算すると、新しいプログラムに割り当てることができる空き容量は 283 MB しかないことになります。これは正しくありません。列cached
とbuffers
列も確認する必要があります。列には、cached
よく使用されるファイルへのアクセスを高速化するために RAM によってキャッシュされたディスク データの容量が表示され、buffered
ディスクに書き込まれるデータの量も表示されます。
ご存知のように、ディスク アクセスは RAM よりはるかに遅いため、パフォーマンスを向上させるには、ディスク データの一部を RAM に保存するのが良い方法です。キャッシュされたデータは 1203 MB、バッファされたデータは 111 MB あります。この量の RAM をアイドル状態に保たずに、メモリがこの量をキャッシュするのは良いことです。これにより、パフォーマンスが大幅に向上します。
キャッシュ/バッファリングなしで使用されている RAM の実際の量を取得するには、-/+ buffers/cache:
行を確認します。この結果は、キャッシュ/バッファリングされた量を差し引いて表示されます。ご覧のとおり、1599 MB の空き容量があるため、この状態ではすべて問題ないようです。この行の値が低い場合は、懸念して RAM の使用状況を確認する必要があります。
また、新しいプログラムを起動するときにキャッシュ後のメモリが十分でない場合は、新しいプログラム用のスペースを確保するために古いキャッシュが自動的にクリアされることに注意してください。したがって、実際のメモリ使用量が高くなく、継続的にディスクにスワップされている限り、メモリを効率的に「使用」するため、キャッシュに十分な量があることは良いことです。
答え2
heemayl は、実際に使用可能なメモリに関する情報の大部分をすでにカバーしています。ここでの私の投稿は、.bashrc
実際の使用状況の簡単な概要として使用するために、エイリアスとして追加できる 2、3 のワンライナーにすぎません。
free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
サンプル出力:
$ free -h | awk '/free/ {getline; x=$2; getline; print "Used "$3 " Out of " x }'
Used 1.2G Out of 5.6G
メモリのより詳細な調査に興味がある場合は、cat /proc/meminfo
大量の情報をリストするを使用してください。このブログfree
コマンドがそのファイルからどのように計算するかを理解するのに役立ちます。