テックブログ

技術ネタ

ざっくり /tmpfs

こんにちは、Qです。

本年もよろしくお願いします。

今回のネタは ざっくりtmpfs です。

tmpfs 。。。ファイルシステムの1つなわけですが、
コレをマウントすると搭載しているメモリの一角を仮想的に、
ハードディスクとして利用することができるようになります。
メモリ上に確保される領域なので、サーバを停止したり、
再起動したら初期化されます。

デフォルトでは搭載メモリの半分がtmpfsに割り当てられます。

搭載メモリが4GBなら2GBが、8GBなら4GBが、64GBなら32GBが
tmpfsに割り当てられます。

搭載メモリの半分と聞くと『ファッ!?』となりますが、
そこはちゃんと考えられていて、
利用する(した)分だけがtmpfsとして確保されます。

でないと、MySQLでは
『メモリの80%をInnodb_buffer_pool_sizeに割り当てろ』
とか言われたりしますが、
メモリの半分をtmpfsに持っていかれたら、泣くしかないです。

搭載メモリが4GBのときは2GBがtmpfsに割り当てられますが、
2Gが丸ごといきなりtmpfsになるわけではなく、
例えば、tmpfsをマウントしたディレクトリに500MBのファイルを置いたら、
その500MB分がtmpfsとして確保(使用)されるわけです。

最初に仮想的なハードディスクと言いましたが、
tmpfsに割り当てられるメモリサイズは
ディスククォータみたいなもの、と考えるといいと思います。

tmpfsのディスク使用量はdfコマンドで確認することができます。

[root@nabe-test1 ~]# df -T
Filesystem	Type		1K-blocks	     Used	Available	Use%	Mounted on
devtmpfs	devtmpfs	491868		   0	491868	  0%		/dev
tmpfs	tmpfs	507396		   0	507396	  0%		/dev/shm
tmpfs	tmpfs	507396	    26220	481176	  6%		/run
tmpfs	tmpfs	507396		   0	507396	  0%		/sys/fs/cgroup
/dev/vda3	ext4	     16376680	8401032	7120712	55%		/
tmpfs	tmpfs	101480		   0	101480	  0%		/run/user/0

tmpfsがたくさん見えますが、
CentOS 6 から CentOS 7 に乗り換えた当初は、
ズラズラと並ぶtmpfsを眺めて『???』になったものです。

/run が 26220KB ほど使っていますが、
/run にはプログラムのPIDファイルやjournalログなどが置かれています。

tmpfsのメモリ使用量はfreeコマンドで確認することができます。

[root@nabe-test1 ~]# free -t
		      total	    used	      free	shared	buff/cache		available
Mem:	1014796	301292	 220340	26220	    493164		542372
Swap:	4198396		0	4198396
Total:	5213192	301292	4418736

dfコマンド結果の『/run の used』と
freeコマンド結果 の『shared(共有メモリ)』が『26220KB』ですね。

tmpfsはメモリ上に作成されるディスク・ファイルシステムなので
dfコマンドでもfreeコマンドでも確認できるんですね。

ここで /run の used を100%にしてみます。

[root@nabe-test1 ~]# dd if=/dev/zero of=/run/dummy count=481176K
dd: writing to '/run/dummy': No space left on device
962353+0 records in
962352+0 records out
492724224 bytes (493 MB) copied, 1.91489 s, 257 MB/s
[root@nabe-test1 ~]# df -T
Filesystem	Type		1K-blocks	     Used	Available	Use%	Mounted on
devtmpfs	devtmpfs	491868		   0	491868	    0%	/dev
tmpfs	tmpfs	507396		   0	507396	    0%	/dev/shm
tmpfs	tmpfs	507396	  507396		 0	100%	/run
tmpfs	tmpfs	507396		   0	507396	    0%	/sys/fs/cgroup
/dev/vda3	ext4	     16376680	8401032	7120712	  55%	/
tmpfs	tmpfs	101480		   0	101480	    0%	/run/user/0
[root@nabe-test1 ~]# free -t
		      total	    used	      free	shared	buff/cache		available
Mem:	1014796	301348	   69664	507396	    643784		64052
Swap:	4198396		 0	4198396
Total:	5213192	301348	4268060

空きメモリ available が減少して shared が増えたことがわかります。

/run に作成した dummy を削除してみます。

[root@nabe-test1 ~]# rm -f /run/dummy
[root@nabe-test1 ~]# df -T
Filesystem	Type		1K-blocks	     Used	Available	Use%	Mounted on
devtmpfs	devtmpfs	491868		   0	491868	  0%		/dev
tmpfs	tmpfs	507396		   0	507396	  0%		/dev/shm
tmpfs	tmpfs	507396	    26220	481176	  6%		/run
tmpfs	tmpfs	507396		   0	507396	  0%		/sys/fs/cgroup
/dev/vda3	ext4	     16376680	8408804	7112940	55%		/
tmpfs	tmpfs	101480		   0	101480	  0%		/run/user/0
[root@nabe-test1 ~]# free -t
		      total	    used	      free	shared	buff/cache		available
Mem:	1014796	300944	 579792	26220	    134060		559904
Swap:	4198396		0	4198396
Total:	5213192	300944	4778188

空きメモリ available が増えて shared が元に戻りましたね。

tmpfs が メモリ上のディスク・ファイルシステムだということを
お分かりいただけたと思います。

WordPress がキライなQでした。それでは。


実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください