web-dev-qa-db-ja.com

tmpfsを物理メモリ以上に増やすことはどのくらい安全ですか?

私のサーバーには2GB RAMおよび120GB SSD、さらにストレージ用のいくつかのRAIDアレイがあります。OSはDebian 8(Linux 3.16)です。

tmpdir = _/run/mysqld_を含むMySQL集中型アプリケーションがあり、これは_/etc/default/tmpfs_を介してDebianによって構成されたtmpfsです。

_# Size limits.  Please see tmpfs(5) for details on how to configure
# tmpfs size limits.
TMPFS_SIZE=40%VM
_

これは、以前は_20%VM_で、約384Mでした。私はいくつかの_no space left on device_に対して実行したので、_40%VM_に増やしましたが、約763Mでもまだ小さすぎます。

RAMを追加する必要がありますが、好奇心から、ここでの制限を知りたいのですが。

  • _/dev/sdd1_は_/_にマウントされ、約50GBの空き容量があり、かなり高速です(Samsung 850 EVO SSD)
  • _/dev/sdd5_は私のスワップパーティションで、3.7Gです(fdiskタイプIDは82)
  • _TMPFS_SIZE_は_40%VM_に設定されています。つまり、_/run_は763Mです。

これで、tmpfsがスワップできることがわかりました。 MySQLにRAM=への書き込みを可能にしたいのですが、より多くのメモリが必要な場合は、システムでSSDにスワップできるようにすることができます。

だから私のセットアップでは、_/run_を次のようにプッシュできますか

  • 300M大きい?はい。それがデフォルトでした。
  • 1.5GB大きい?はい、試しました。MySQLは最大1.3GBを使用し、システムは魅力的に機能しました。しかし、それでも物理メモリの半分+スワップパーティション未満です。
  • 2.5GB大きい?これは物理メモリを超えていますが、物理メモリの半分+スワップパーティション未満です。
  • 4GB大きい?これは物理的な半分とスワップにぴったり収まります
  • もっと? 10GBのような? _/_の空き領域を使用してさらにスワップできますか?

安全のための経験則として、_TMPFS_SIZE_をswap +物理メモリの半分より大きくしないことを私は推測しています。スワップパーティションを増やすことなく、これを超えることはできますか?

また、_200%VM_を_/etc/default/tmpfs_に入れることはできますか?私は tmpfs(5) を読みましたが、これに100%を超えるかどうかはわかりません。

最後に、代わりに_/etc/fstab_を使用し、_/etc/default/tmpfs_には触れないでください。

(私は_mount -o remount_でのみ実行したことを知っているため、まだサーバーを再起動していません)

編集:最後の質問については、_/etc/fstab_で変更できる/可能性があることを知っています(以下のmanページの引用を参照)。ただし、_/etc/default_ これまでのところ。

/ etc/fstabに適切なエントリを作成することで、より複雑なマウントオプションを使用できます。

11
Benoit Duffez

私はそれをテストできると思ったので、実行しました:

Sudo mount -o remount,size=2800M /run

魅力のように働いた:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G   45M  2.7G   2% /run

だから私は少しそれを埋めました:

fallocate -l 1G /run/test.img
fallocate -l 1G /run/test2.img
fallocate -l 500M /run/test3.img

結果:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G  2.6G  208M  93% /run

システムはまだ稼働しています。スワップの可用性が低下し、それが使用されたことを証明します。

swap availability drop

  • 17:10:/runに2.5 GBのファイルを作成
  • 17:20:500Mファイルを削除

スワップの合計は、/runが使用した分だけ削減されます。

カーネルが再マウントを拒否するのか、予期しない動作をするのかわからないため、VMで10GBをテストします。

私はまだ実際の答えを探していますが、実用的な方法でそれが機能することを示しました。

8
Benoit Duffez