メモリ残容量を意図的に減らす方法


Linuxでメモリ残容量を意図的に減らす

  • テストの一環でメモリの残容量を減らして別システムにアラームが飛ぶかを確認していたが当初考えていた手順ではうまく動かなかったのでメモ
  • 環境
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

最初に考えていた手順

# /dev/null < $(yes)
# free -h -s 1

実際に返ってきた結果

-bash: xrealloc: cannot allocate 18446744071562067968 bytes (1945600 bytes allocated)
  • メモリの残容量が1.8GBあたりでとまってしまう → Why?

別の方法を試す

stress --vm 2 --vm-bytes 3G --timeout 2m
  • こうなった。orz
-bash: stress: command not found
  • 導入されているパッケージが絞られている仕様のためstressコマンドが存在しなかった

/dev/null < $(yes) だけで乗り切ろうと頑張る

  • xargsで並列処理を試みる
xargs -P64 -n1 /dev/null > ($yes)
  • なぜか最初の手順と結果が変わらず

  • バックグラウンドで実行してみる

# /dev/null < $(yes) & /dev/null < $(yes) & /dev/null < $(yes)
  • 結果、順調に残メモリが減少しアラームが通知された
              total        used        free      shared  buff/cache   available
Mem:           7.6G        4.7G        1.5G         16M        1.4G        2.5G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           7.6G        5.0G        1.2G         16M        1.4G        2.2G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           7.6G        5.3G        953M         16M        1.4G        1.9G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           7.6G        5.6G        650M         16M        1.4G        1.6G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           7.6G        5.9G        352M         16M        1.4G        1.3G
Swap:          4.0G          0B        4.0G

              total        used        free      shared  buff/cache   available
Mem:           7.6G        6.2G        130M         16M        1.3G        1.0G
Swap:          4.0G        2.0M        4.0G

めでたしめでたし

疑問点

↓これは何だろう?

-bash: xrealloc: cannot allocate 18446744071562067968 bytes (1945600 bytes allocated)

xargsがうまく動かなかった理由が不明

参考文献

[意図的にLinuxサーバに負荷をかける方法 stressコマンド編]
https://blog.supersonico.info/?p=223

【Linux】stressコマンドを使わずに手軽にメモリ負荷をかける方法
https://techblog.ap-com.co.jp/entry/linux-memory

Linuxコマンド(Bash)でバックグラウンド実行する方法のまとめメモ
https://qiita.com/inosy22/items/341cfc589494b8211844