サーバー監視ツールを作ろう – 5日目「メモリ利用率検知」

2019年5月21日

テクノロジー プログラミング 特集

WEBサービスを運用していると、「サーバー監視」を重点的に行う時期があります。 それは、開発設計をしている時でも、サービスを構築した直後でもありません。 障害が発生したタイミングです。 サーバー障害は、誰もが不幸になる事象です。 そして、サーバー障害は、会社組織であれば、開発部門が責められ、開発部門からはメーカーが攻めの対象になります。 そんなサーバー障害にキチンと向き合い始めるのが、障害が発生した直後というのは経験者のアルアルであるとも言えます。 まだ、経験をしたことがないエンジニアや、AWSに任せているからサーバー障害など今後一切有り得ないと考えているサーバーエンジニアがいたとしたら、近い将来、大きな障害に巻き込まれるでしょう。 障害対応は知識と経験がモノを言う事を心に留めていないといけないのです。 そして今回は、サーバーのメモリ管理についての重要性と簡単なやり方を書いておきます。

メモリ管理は何故必要?

GBクラスが当たり前になった今の時代ですが、メモリの容量増加に伴って処理するスペックも上がってしまうため、その次代に合った最高容量を搭載するぐらいの感覚がパソコン購入の際にはちょうどいいかもしれません。 インターネットサーバーにおいては、メモリが足りない状態だと、swapに切り替わって、信じられないくらいの挙動が遅いサーバーに成りかねません。 サーバー管理者であれば、運用しているサーバーのメモリ状態を把握している必要があります。 コンソールなどで手作業で確認すると、そのタイミングでは、10%も使用していないが、ゴールデンタイムと言われる、夜の10時ぐらいに見てみると100%を超えているというケースは結構アルアルです。 定量的なアクセスがある場合は、1日の値の傾向値をロギングして、もしもオーバーしている状態が定期的なのであれば、メモリ増設や、プログラム対応による、負荷現象などを対策するべきなのです。 傾向値を知ることは公開サービスの品質に非常に大きく関係していることを理解しなければなりません。

サーバーのメモリ利用率を簡単に取得する方法

実際にサーバーで利用しているメモリの状態を確認するには、"free"コマンドと"vmstat"コマンドで情報収集できます。 $ free total used free shared buffers cached Mem: 4135140 3454064 681076 106152 275360 2629612 -/+ buffers/cache: 549092 3586048 Swap: 0 0 0 $ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 1 0 695948 275468 2629756 0 0 13 3 12 8 5 4 70 21 0 メモリ値を厳密に確認したいのであれば、freeコマンドを使うのがいいでしょう。 このfreeコマンドは少しクセが強くて、使用率を取得する場合は、計算しないといけません。 まず、メモリのTOTAL値は、「Mem:」行の"total"の箇所になります。 この場合は、4135140なので、4GBぐらいということです。 続いて、メモリの使用領域は、「-/+ buffers/cache:」の"used"の箇所になるため、 549092になります。550MBぐらいです。 利用率は、使用量÷全体容量で割合を算出します。 549092 ÷ 4135140 * 100 = 13.27%(端数切り捨て) メモリの空き率を出したい場合は、"free"の値を参照すると同じ感じでできます。 「Mem:」行のfreeとusedは、なんなんでしょうね??? そして、最近の注意ポイントとして、CentOS7では、「-/+ buffers/cache:」が表示されません。 CentOS7でfreeコマンドを実行すると以下のようになります。 $ free total used free shared buff/cache available Mem: 1014500 101860 99768 13856 812872 670488 Swap: 0 0 0 この場合は、Mem:行のみでfree値の計算を以下のように行います。 total - used - buff/cache - available = 実際のメモリの空き容量 あれ?AWSで実行したら、使用率がマイナス%になったちゃった・・・ $ free -t total used free shared buff/cache available Mem: 1009388 178816 180656 440 649916 652808 Swap: 0 0 0 Total: 1009388 178816 180656 この場合は、普通にusedとfreeの値だけを参照したほうが良いのかな???? 難しすぎるぞLinuxのメモリ管理!!!

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ