質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.78%

swapの使われ方について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 8,832

tk_flavor

score 104

mysqlが動いているdbサーバでのswapの使い方について質問します

50GBのメモリが搭載されているサーバで、swap領域は4GBに設定されています。
このサーバでalterなどをクエリ実行した後に、使われるswap領域が500MB⇒2.2GBまで増加しました
swapが使われているのですが、実際のメモリ空きは25GB程度あります

私の中では、物理メモリいっぱいまで使われた時に初めてswap領域が使われる事になるのかと
思っていますが、25GB程度のメモリ空きがあるのにswap使われた原因がよくわかりません

そこで、4点ほど質問します
冗長となりますがよろしくお願いします


  • 1.
    システム領域でのメモリ空きがあるのに、swapが使われた理由は、
    msyql側に割り当てられたメモリが足りなかった事でswapが使われたと考えていいでしょうか

  • 2.
    alterクエリ発行作業が完了後、vmstatコマンドsoの値は0です。
    クエリ作業にあたってswap outが使われたならが、swap領域が解放されていくと思うのですが、
    swapのused領域は解放されていきません
    使われたswap領域は解放していかないのでしょうか

  • 3.
    そもそも、物理メモリ50GBに対して4GBのswap領域しか割り当てていない事も少しは問題があるのかと思いますが、
    10年前のように、物理メモリの2倍をswap領域に割り当てる事が今も推奨されていると考えていいのでしょうか
    https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-swapspace.html#s1-swap-what-is
    を見ると、

Swap は、物理 RAM サイズが 2 GB までは、物理 RAM の2倍として、2 GB を超えると、1物理 RAM ごとに同量を追加します

とあります。みなさんも運用しているサーバで2×2+物理メモリ量をswapに割り当てているのでしょうか


  • 4.
    swap領域を8GBまで拡張したところ、拡張前後のfreeコマンド結果を確認したところ、
    Mem: usedの値が拡張後に6GB程度増加しました。

拡張後にmemory used領域が増加した理由は何が考えられるのでしょうか

▼拡張前

[root@abc ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         50319      40420      10899          0        153       3770
-/+ buffers/cache:      36495      15824
Swap:         4095       2253       1842

▼拡張後
[root@abc ~]# free -m
total       used       free     shared    buffers     cached
Mem:         50319      46123       4096          0        154       7426
-/+ buffers/cache:      36542      15777
Swap:         8191       2253       5938

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2016/07/22 19:05

    「50GBのメモリが搭載されているサーバで、swap領域は4GBに設定されています。」

    キャンセル

  • tk_flavor

    2016/07/22 19:15

    すみません
    何をおっしゃりたいのか、把握出来ません
    ベンダーから導入されたサーバで、freeコマンドを打つとそうなっていました。

    キャンセル

  • tk_flavor

    2016/07/25 00:37

    何をおっしゃっているのでしょうか? 理解できません

    キャンセル

回答 1

checkベストアンサー

0

私の中では、物理メモリいっぱいまで使われた時に初めてswap領域が使われる事になるのかと 
思っていますが、25GB程度のメモリ空きがあるのにswap使われた原因がよくわかりません

まずここが誤りです。
一次ソースがすぐに見つからなかったので提示出来なくて申し訳ないのですが、
使用頻度の低いメモリ上のデータについてメモリが余っていてもswapに退避されることがあります。

1. 
システム領域でのメモリ空きがあるのに、swapが使われた理由は、 
msyql側に割り当てられたメモリが足りなかった事でswapが使われたと考えていいでしょうか

MySQLから見た場合は割り当てられたメモリはあくまで仮想メモリ(物理+swap)であり、
割り当てられたメモリ上限を超えた分をswapで賄うというようなことは発生しません。
「割り当てたメモリ上限」の設定に誤解があり、実は使用メモリが物理メモリを超えていたという事はありえると思います。

2. 
alterのクエリ作業にあたってswap outが使われたなら、当該作業が完了後、vmstatコマンドsoの値は 
0なのですが、swap領域が解放されていくと思うのですが、swapのused領域は解放されていきません 
使われたswap領域は解放していかないのでしょうか

swapはOSがいい感じのタイミングで開放するか、明示的に開放するまでは解放されなかったと思います。
MySQLから見た場合、swapを使ったかどうかは意識されないので処理が終わった直後に開放されるかどうかはOS次第です。

3. 
そもそも、物理メモリ50GBに対して4GBのswap領域しか割り当てていない事も少しは問題があるのかと思いますが、 

私の場合は50GBのメモリを積むサーバであれば、そもそもswap-outが発生しないようにチューニングするので、その倍の100GBのswapを確保するようなことは無いかと思います。
何らかの理由でチューニングが不可能であれば、出来るだけ高速なストレージをswapとして用意するしかないでしょうね。

4. 
swap領域を8GBまで拡張したところ、拡張前後のfreeコマンド結果を確認したところ、 
Mem: usedの値が拡張後に6GB程度増加しました

わかりません。が、そもそもUsedは
バッファキャッシュやページキャッシュなどOSがディスクキャッシュのために使用しているメモリも含まれる数値なので、メモリの直接の空き容量ではありません。
自由に使えるメモリ量としてはfreeが妥当に近い(カーネル3.14および2.6.27以降のfreeで表示されるavailableの方が正確)で、こちらはあんまり変わっていないので、OSが気を利かせて何かキャッシュしてくれた可能性が高いと思われます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/07/22 19:13

    ご回答ありがとうございます

    >私の場合は50GBのメモリを積むサーバであれば、そもそもswap-outが発生しないようにチューニングする

    今回、max_allowed_packetを開発側の希望で上げました
    この設定変更前は大幅にswapが使われた事はなかったと記憶しています
    仮説レベルですが、max_allowed_packetを見直してみます


    >Usedは
    バッファキャッシュやページキャッシュなどOSがディスクキャッシュのために使用しているメモリも含まれる数値

    はい。LinuxOSでは、実際のメモリ空き容量はfree+buffer+cacheであると認識していますが、swap拡張後にusedの使用率が上がりましたので、
    これが何故なのかと疑問を抱きました

    キャンセル

  • 2016/07/22 19:19

    max_allowed_packetの詳細な挙動は確認していないのですが、
    性質からするとMySQL全体のメモリ使用量を制限するものではなく、
    並列でクエリが発行された場合、クエリ数*max_allowed_packet分だけメモリ使用量は上がってしまいそうな気がしますね。

    キャンセル

  • 2016/07/22 19:30

    > はい。LinuxOSでは、実際のメモリ空き容量はfree+buffer+cacheであると認識していますが、
    厳密には違います。
    http://nopipi.hatenablog.com/entry/2015/09/13/181026

    > swap拡張後にusedの使用率が上がりましたので、これが何故なのかと疑問を抱きました

    すみません、質問の意図は把握しましたが、原因はわかりません。
    以下は単なる想像です。
    仮想メモリが増えたことでOSが何かいい感じにキャッシュしようと思ったのかもしれませんし、拡張前後に実は何か他の作業が並行で行われていてusedが増えた可能性もあるかなと思います(拡張前後の状況は質問から読み取れないので、可能性としてです)。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る