空きメモリを90%埋める方法は?

空きメモリを90%埋める方法は?

私も少し作りたい低リソーステストこれを行うには、使用可能なメモリの90%を埋める必要があります。

*nix私のシステムでこれをどのように実行できますか?

答え1

圧力NGPOSIX システムの CPU/mem/io/hdd 圧力をシミュレートするワークロードジェネレータです。この呼び出しはLinux < 3.14で動作します。

stress-ng --vm-bytes $(awk '/MemFree/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1

Linux> = 3.14では、MemAvailable次の方法を使用して、交換なしで新しいプロセスに使用可能なメモリを推定できます。

stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1

/proc/meminfofree(1)呼び出しを調整するには// etcを使用してくださいvm_stat(1)。必要に応じてポータブル。また見てくださいWikiのStress-ngをご覧ください。さらなる使用例。

答え2

headLinuxにデフォルトのGNUツール(およびtail)またはBusyBoxがある場合は、次のことができます。一定量の空きメモリを満たしてください。:

head -c BYTES /dev/zero | tail
head -c 5000m /dev/zero | tail #~5GB, portable
head -c 5G    /dev/zero | tail #5GiB on GNU (not busybox)

これは、テールが最後の行である場合に備えて、現在の行をメモリに保持する必要があるために機能します。 null バイトだけ出力して改行文字はない行から読み取った行は/dev/zero無限に長いがheadバイト数によって制限さBYTESれるためtail、あまりにも多くのメモリだけを使用します。より正確な数値を得るには、システムheadとそれ自体でRAMがどのくらい使用されているかを確認し、その値を減算する必要があります。tail

ただ急いでRAMが完全に消費されました、制限head部分を削除できます。

tail /dev/zero

欲しいなら期間を追加bash、これは次の操作で簡単に実行できます(動作しません)sh

cat <(head -c 500m /dev/zero) <(sleep SECONDS) | tail

<(command)インタプリタに実行しcommand、出力をファイルとして表示するように指示すると、echo <(true)出力ファイルプロセッサはたとえば/dev/fd/63になります。したがって、catでは2つのファイルが渡されるようです。詳しくは下記をご覧ください。http://tldp.org/LDP/abs/html/process-sub.html

コマンドは、cat終了するまで入力が完了するのを待ち、パイプの1つを開いたままにしてもtailアクティブです。

持っていてpv欲しいならRAM使用量をゆっくり増やしてください。:

head -c TOTAL /dev/zero | pv -L BYTES_PER_SEC | tail
head -c 1000m /dev/zero | pv -L 10m | tail

後者は、毎秒10MBの速度で最大1GBのデータを使用します。pv追加ボーナス現在の使用量と現在までの合計使用量を表示します。。もちろん、以前のバリエーションでもこれを行うことができます。

head -c 500m /dev/zero | pv | tail

部品を挿入するだけで、| pv |現在の状態(デフォルトではスループットと合計)が表示されます。

互換性のヒントと代替
/dev/zero装置がない場合、標準yesおよびtrツールは以下を置き換えることができます。 (無限の数の「はい」をyes | tr \\n x | head -c BYTES | tail出力し、改行を置き換え、すべてを1つの大きな行に合わせ、すべてをメモリに保持するには尾が必要です)。もう1つの簡単な代替方法は、GNUとBusyBoxで1 GBのRAMを使用しますが、1つのコアでは100%CPUを使用することです。最後に、サフィックスを許可しない場合は、インラインバイト数を計算できます(例:50 MB)。yestr
dddd if=/dev/zero bs=1G of=/dev/null
headhead -c $((1024*1024*50))


感謝の言葉ファルスタフよりシンプルでより広く互換性のあるバリエーション(BusyBoxなど)に貢献します。


なぜ他の答えがありますか?受け入れられた回答はパッケージのインストールを提案します(パッケージマネージャが不要な各チップセットのバージョンがあるでしょう)。最も頻繁に得られた答えはCプログラムのコンパイルを提案します(私はこれを行うためにコンパイラやツールチェーンをインストールしませんでした)。ターゲットプラットフォーム); 2番目の上位投票の答えは、仮想マシンでアプリケーションを実行することを示唆しています(たとえば、USBなどを介してこの携帯電話の内部SDカードを追加し、3番目にVirtualBoxイメージを作成することをお勧めします)。必要に応じてRAMを満たさない起動順序。 4番目は/dev/shmマウントポイント(1)が存在し(2)が大きい場合にのみ機能します(再マウントするにはルートが必要です)。 5番目は、上記の内容をあまり組み合わせることなくサンプルコードです。 6番目は良い答えですが、自分のアプローチを考える前にはこの答えを見ていなかったので、自分の答えを追加する必要があると思いました。なぜなら、memblob行が見えない場合、覚えているか入力する時間が短くなります。これは実際に問題の核心です。 7番目は質問に答えません(プロセスを制限するにはulimitを使用してください)。 8番目はPythonをインストールしようとしています。私たちはすべて非常に創造的ではなく、最終的に10分の1が独自のC ++プログラムを書いていました。

答え3

必要なメモリにCプログラムを作成し、malloc()それを使用してmlock()メモリの交換を防ぐことができます。

その後、プログラムはキーボード入力を待ち、メモリのロックを解除し、メモリを解放して終了します。

答え4

HNのコメント:https://news.ycombinator.com/item?id=6695581

dd または同様のコマンドで /dev/shm を入力します。

swapoff -a
dd if=/dev/zero of=/dev/shm/fill bs=1k count=1024k

関連情報