メモリーの管理

Solution Verified - Updated -

Environment

  • Red Hat Eneterprise Linux (すべてのバージョン)

Issue

  • サイジング目的で利用できるメモリー量を確認します。
  • キャッシュされる量と、キャッシュを行うプロセスを確認するにはどうしたら良いですか? どのプロセスがキャッシュを「所有」したり、キャッシュを報告したりしますか?
  • データベースインスタンスがサーバーにどのぐらい追加されるか、もしくはその他のプロセスまたはインスタンスに対して使用できるかどうかを決める場合にどの値を使用する必要がありますか?
  • 以下のように、メモリーの合計が報告されます。
#sar -r (kbmemfree + kbmemused) = 49322992
#vmstat 3 3 (free + buff + cache) = 46767488  
#free (total)= 49322992  
#ps -aux RSS = 31090168 (used)
  • vmstat が、free や sar 以外のメモリー合計を報告するのはなぜですか?
  • RAM が 48GB のシステムで RSS と FS(?) キャッシュが ~38GB 以下の場合に、どのようにして、プロセスで使用中のメモリーが ~31GB になりますか?
  • たとえば、現在 Oracle インスタンスが 3 つ実行しているサーバーがあり、さらに 2 つ追加する場合があります。
  • これを行うため、十分なリソース (特に RAM) が利用できるようにするにはどうしたら良いですか?
  • 現在、サーバーでは、free を実行すると 44GB が "freeable" となっています。この値を検討する必要がありますか?
 # free -g  
  total used free shared buffers cached  
 Mem:47 41 6 0 0 37  
 -/+ buffers/cache:2 44  
 Swap:31 0 31  
# free  
  total used free shared buffers cached  
 Mem:49322992 43075896 6247096 0 712936 39799284  
 -/+ buffers/cache:2563676 46759316  
 Swap:33554424 673416 32881008

 # vmstat 3 3  
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------  
 r b swpd free buff cache si so bi bo in cs us sy id wa st  
 1 0 674544 6263992 701620 39795264 0 0 58 249 2 2 3 1 94 2 0  
 0 0 674540 6263076 701660 39795248 0 0 0 1605 1140 3846 7 3 88 2 0  
 0 0 674540 6263688 701660 39795268 0 0 0 89 1038 3824 0 0 99 1 0

 # sar -r  
 07:20:01 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad  
 07:30:01 AM 6416104 42906888 86.99 664508 39730540 32876180 678244 2.02 98260  
 07:40:01 AM 6412164 42910828 87.00 668628 39731476 32876316 678108 2.02 98244  
 07:50:01 AM 6408016 42914976 87.01 672636 39733016 32876508 677916 2.02 98204  
 08:00:01 AM 6397940 42925052 87.03 676484 39734048 32876524 677900 2.02 98188  
 08:10:01 AM 6392680 42930312 87.04 680520 39736572 32876900 677524 2.02 98396  
 08:20:01 AM 6347280 42975712 87.13 684280 39738236 32877084 677340 2.02 98448  
 08:30:01 AM 6340504 42982488 87.14 688400 39738932 32877084 677340 2.02 98448  
 08:40:01 AM 6334748 42988244 87.16 692524 39739840 32877128 677296 2.02 98412  
 08:50:01 AM 6324936 42998056 87.18 696772 39744052 32879644 674780 2.01 99164  
 09:00:01 AM 6313072 43009920 87.20 700884 39744648 32879644 674780 2.01 99164  
 Average:6553141 42769851 86.71 605553 39652062 32850845 703579 2.10 108613

Resolution

サイジング目的で利用できるメモリー量を確認するにはどうしたら良いですか?

以下のように、"free" コマンドの出力で確認できます。

 # free  
 total used free shared buffers cached  
 Mem:49322992 43075896 6247096 0 712936 39799284  
 -/+ buffers/cache:2563676 46759316  
 Swap:33554424 673416 32881008  

物理メモリー (RAM) は 49322992KB です。解放されている物理メモリー (RAM) は swap+buffer+cached で 46759316 KB です。利用可能なメモリーは 'swap+memory' です。より正確に示すと 'free swap + free memory (free memory+buffer+cached) です。

キャッシュされる量と、キャッシュを行うプロセスを確認するにはどうしたら良いですか? どのプロセスがキャッシュを「所有」したり、キャッシュを報告したりしますか?

"cache" として使用するメモリーは、# grep -iE "cache" /proc/meminfo コマンドで表示できます。キャッシュは、システム全体のパフォーマンスを改善するのに使用されるカーネル構造で、メモリーを適切に利用すると負荷の低下を避けることができます。カーネルによって管理されているため、 これは一般的には 1 つのプロセスがキャッシュを「所有」していないため、システム全体の負荷の結果であり、キャッシュを所有しているかもしれない Oracle を使用しています。これは、システムの負荷が高くなる時に簡単に縮小または再要求できるため、キャッシュは「システムメモリー」として見なされ、"freeable" として報告されます。

データベースインスタンスがサーバーにどのぐらい追加されるか、もしくはその他のプロセスまたはインスタンスに対して使用できるかどうかを決める場合にどの値を使用する必要がありますか?

'free' の値を使用できる一般的なシナリオでは、利用可能なメモリー量は 'free + buffer + cache' になります。メモリーが唯一の制約だった場合は、データベースのバッファーおよびキャッシュのスワップをできるだけ回避することを検討する必要があります。 この Oracle の例の場合は経験上、SGA サイズはシステムメモリーの 70% 以下にすることが推奨されています。 ( Oracle でのチューニング方法の詳細は Oracle 社にお問い合わせください。 )

報告されるメモリーの合計は以下のようになります。

#sar -r (kbmemfree + kbmemused) = 49322992
#vmstat 3 3 (free + buff + cache) = 46767488  
#free (total)= 49322992  
#ps -aux RSS = 31090168 (used)

vmstat が、free や sar 以外のメモリー合計を報告するのはなぜですか?

'vmstat' の場合、free + buff + cache の結果は、システムで利用できる空きメモリーを示します。これは 'free' とほぼ同じになります。 以下はそれぞれ free、buffer、および cache の値になります。

 from free = 6247096 +712936+39799284 =46759316  
 from vmstat = 6263992 +701620+39795264 =43760876  

これはほぼ同じです。また、"free" および "sar -r" は物理メモリーのスナップショットを報告し、"vmstat" はプロセス、メモリー、ページング、ブロック IO、トラップ、および cpu アクティビティに関する情報を即座に報告します。これは、遅延の長さをサンプリング期間で情報を生成します。したがって、適時、比較を始めた時に、報告された値の中で多少の相違が見られるのは通常のことです。

RAM が 48GB のシステムで RSS と FS(?) キャッシュが ~38GB 以下の場合に、どのようにして、プロセスで使用中のメモリーが ~31GB になりますか?

RSS は、共有メモリーセグメント (メモリーマッピング、ライブラリー) を含むため、正確なプロセスのメモリーフットプリントを提供しません。

たとえば、現在 3 つの Oracle インスタンスが実行しているサーバーがあり、さらに 2 つ追加する場合があります。これを行うため、十分なリソース (特に RAM) が利用できることをどのように保証しますか? サーバーは、 現在 free で 44GB が "freeable" となっています。この値を検討する必要がありますか?

いいえ、この値は、潜在的に利用可能なメモリー量を示します。利用可能な空きメモリーは 'free + buff + cache' になります。

ただし、これについては少し問題があります。Oracle データベースでは free + buffer + cache を考慮することはできません。Oracle は SGA を使用します。Oracle SGA は、別のアプリケーションに使用されない RAM ですべての共有メモリーを維持します。SGA は、空き出力で "cached" に表示されます。キャッシュ下で SGA に割り当てられたメモリーは利用可能とは見なされません。

システムと、SGA が予期される 8GB となる新しい DB インスタンスに対する要件があります。メモリーがこの制限であることを前提としています。利用可能な RAM が十分かどうかはどのように特定できますか?

経験上、通常は、オペレーションシステムに影響を及ぼす可能性があるため、SGA は物理メモリーの 70% 以下にするようにしてください。通常は、利用できる解放メモリーの量は 'free + cached + buffer' です。このシステムには Oracle の 3 つのインスタンスが存在し、キャッシュでメモリーのほとんどが使用されているのが確認できます。SGA のサイズによって異なるため、利用可能/空きメモリーの量は計算することができません。この問題については Oracle から提案を受けることが推奨されます。

SGA はキャッシュに存在しますか? すべての SGA がキャッシュに存在しますか? それとも一部だけですか? 一部の場合は何が存在しますか?

すべての SGA がキャッシュに存在します。

以下は SGA の例です。どのコンポーネントがキャッシュに表示されますか?

SGA Component Current Allocation (MB)  
Shared Pool 444  
Buffer Cache 280  
Large Pool 4  
Java Pool 4  
Other 16

これらのすべてのコンポーネントはキャッシュメモリーの一部です。

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.