私は64GBをインストールしていますが、htopは20GBを使用しています:
ランニング ps aux | awk '{print $6/1024 " MB\t\t" $11}' | sort -n
は、数百メガバイトだけを使用して最大のプロセスを提供し、出力全体を合計すると2.8GB(ps aux | awk '{print $6/1024}' | paste -s -d+ - | bc
)。これは多かれ少なかれ、昨日アップグレードしたUbuntu 19.04で得ていたもので、アプリケーションが実行されていないときに3 GBから4 GBに使用されました。では、なぜ20GBがhtopで使用されているのですか?
私がZFSをインストールした(合計1.5 GBのSSDドライブ、3つのプール、そのうちの1つは圧縮されている)ことは事実であり、かなり大きなファイルを移動するので、キャッシュの割り当てがあるかどうかがわかりました。 htop Memバーは、ほとんどが緑色です。これは、バッファ(青)やキャッシュ(オレンジ)ではなく、「使用中のメモリ」を意味するため、かなり気になります。
このZFSは大量のRAMを使用していますか?その場合、他のアプリケーションが必要とする場合、一部のRAMを解放しますか?
Smemの出力は次のとおりです。
tbrowne@RyVe:~$ smem -tw
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 20762532 435044 20327488
userspace memory 2290448 519736 1770712
free memory 42823220 42823220 0
----------------------------------------------------------
65876200 43778000 22098200
それが原因であるのは「カーネルダイナミックメモリ」です。なぜそんなに?
私は再起動し、RAM使用量は約5GBでした。Firefoxで多数のタグを実行し、いくつかのVMを実行し、RAM最大20GBを使用して、すべて閉じますアプリケーションが5GBに戻った後、Python(1.8Gの乱数CSV))で大きなファイルを作成し、それを40xに連結して72GBのファイルを作成しました。
tbrowne@RyVe:~$ python3
Python 3.8.2 (default, Mar 13 2020, 10:14:16)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> import pandas as pd
>>> pd.DataFrame(np.random.Rand(10000, 10000)).to_csv("bigrand.csv")
>>> quit()
tbrowne@RyVe:~$ for i in {1..40}; do cat bigrand.csv >> biggest.csv; done
これですべてが完了し、マシンで何も実行されなくなった後、カーネルで34Gを使用しています。
このpython 3スクリプト(pip3 install numpyが必要))は、失敗するまで一度に約1GBを割り当てます。また、以下の回答に従って、実行するとすぐにカーネルメモリが解放されますつまり、キルされる前に64 GBを割り当てることができました(私はスワップをほとんど持っていません)つまり、必要なときにZFSがメモリを解放することを確認しています。
import numpy as np
xx = np.random.Rand(10000, 12500)
import sys
sys.getsizeof(xx)
# 1000000112
# that's about 1 GB
ll = []
index = 1
while True:
print(index)
ll.append(np.random.Rand(10000, 12500))
index = index + 1
ZFSはデータとメタデータをキャッシュするため、大量の空きメモリが与えられると、これはZFSによって使用されます。メモリプレッシャーが発生し始めると(たとえば、多くのページを必要とするプログラムの読み込みなど)、キャッシュされたデータが削除されます。空きメモリが多い場合は、必要になるまでキャッシュとして使用されます。
arc_summary
ZFS ARC(適応置換キャッシュ)によって使用されるリソースを確認するツール
UNIX/Linuxのすべてのストレージシステムは、RAMが使用可能な場合にキャッシュを追加できるすべての使用可能な空きメモリを使用します。それが使用されているかどうかは関係ありません。ZFS、LVM、ext、xfs、それはカーネルがどのように設計されたかだけです。使用可能なメモリを調べるために使用されているプログラムによっては、多くの混乱が生じます。topには、IOキャッシュに使用されているものを含む、割り当てられたすべてのメモリが表示されますが、freeはそうではありません。コンピューティングの初期の頃から人々を混乱させてきました。