Kubuntu 16.04を使用しており、ビッグデータパーティション(RAIDZ1)にZFSを使用しています。
5GBのRAMが不足していて、どこに行ったのかわかりません。そして、それはキャッシュではありません
私が思いつくことができたすべてのツールによると、私は現在次の統計を持っています:
Actively used: 9458.3 MB
Inacively used: 2544.5 MB
Mapped for IO: 2433.0 MB
Buffers: 242.6 MB
Slab: 6669.2 MB
Page Tables: 91.0 MB
Cached: 3758.1 MB
Dirty: 0.1 MB
Writeback: 0.0 MB
Free: 1856.5 MB
------------------------------
Total: 27053.3 MB
Total Memory: 32133.5 MB
------------------------------
Missing ???: 5080.2 MB
だから5GB !! of RAMは考慮されていません。どこに行きましたか?
ツール出力
nmon:
RAM High Low Swap Page Size=4 KB │
│ Total MB 32133.5 -0.0 -0.0 8195.5 │
│ Free MB 1856.5 -0.0 -0.0 8195.5 │
│ Free Percent 5.8% 100.0% 100.0% 100.0% │
│ MB MB MB │
│ Cached= 3758.1 Active= 9458.3 │
│ Buffers= 242.6 Swapcached= 0.0 Inactive = 2544.5 │
│ Dirty = 0.1 Writeback = 0.0 Mapped = 2433.0 │
│ Slab = 6669.2 Commit_AS = 16647.1 PageTables= 91.3 │
│ Large (Huge) Page Stats ───────────────────────────────────────────────────────────────────────────────────────────────│
│ There are no Huge Pages │
│ - see /proc/meminfo │
│ │
│ Virtual-Memory ────────────────────────────────────────────────────────────────────────────────────────────────────────│
│nr_dirty = 37 pgpgin = 0 High Normal DMA │
│nr_writeback= 0 pgpgout = 0 alloc 0 343 0 │
│nr_unstable = 0 pgpswpin = 0 refill 0 0 0 │
│nr_table_pgs= 23384 pgpswpout = 0 steal 0 0 0 │
│nr_mapped = 622856 pgfree = 305 scan_kswapd 0 0 0 │
│nr_slab = -1 pgactivate = 0 scan_direct 0 0 0 │
│ pgdeactivate= 0 │
│allocstall = 0 pgfault = 74 kswapd_steal = 0 │
│pageoutrun = 0 pgmajfault = 0 kswapd_inodesteal= 0 │
│slabs_scanned= 0 pgrotated = 0 pginodesteal = 0
cat/proc/memstat
MemTotal: 32904740 kB
MemFree: 1759548 kB
MemAvailable: 5372548 kB
Buffers: 249072 kB
Cached: 3852616 kB
SwapCached: 0 kB
Active: 9819328 kB
Inactive: 2609860 kB
Active(anon): 8334856 kB
Inactive(anon): 412176 kB
Active(file): 1484472 kB
Inactive(file): 2197684 kB
Unevictable: 7932 kB
Mlocked: 7932 kB
SwapTotal: 8392188 kB
SwapFree: 8392188 kB
Dirty: 224 kB
Writeback: 0 kB
AnonPages: 8335424 kB
Mapped: 2497092 kB
Shmem: 416004 kB
Slab: 6829716 kB
SReclaimable: 333652 kB
SUnreclaim: 6496064 kB
KernelStack: 26496 kB
PageTables: 95636 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 24844556 kB
Committed_AS: 17097748 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 0 kB
VmallocChunk: 0 kB
HardwareCorrupted: 0 kB
AnonHugePages: 4306944 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 9029708 kB
DirectMap2M: 22384640 kB
DirectMap1G: 2097152 kB
無料-h
total used free shared buff/cache available
Mem: 31G 19G 1.8G 406M 10G 5.2G
Swap: 8.0G 0B 8.0G
上
MEM | tot 31.4G | free 1.8G | | cache 3.7G | dirty 0.1M | buff 243.5M | | slab 6.5G | | | | | |
SWP | tot 8.0G | free 8.0G | | | | | | | | | | vmcom 16.3G | vmlim 23.7G |
追加情報/ストーリー
私は16GBのメモリしか持っていませんでしたが、システムがわずかにスワップし始めたのを見ました。しかし、常にではありません。数メガバイトのスワップを使用し始め、その後増加を停止するまで、メモリ使用量は増加したようです。 「スラブ」について知ったのはこれが初めてで、ZFSのせいで多くの記憶がそこにあることがわかりました。
すばらしい、問題ないので、別の16GBのメモリをインストールしました。これでうまくいくはずですよね?しかし、代わりに私は再び同じ振る舞いを見ました。スワップをわずかに使用し始めるまで、メモリは増加しました。しかし今回は5GBがどこに行くのかわかりませんでした。 Windowsでは、適切なツールを使用してメモリの各ページの目的を見つけることができました( https://www.youtube.com/watch?v=AjTl53I_qzY )が、ここにいます少し失われました。 5Gbはなくなりました。これはカーネルメモリリークですか?
今のところ、swappinessを15に設定しました。これにより、「今のところ」スワップの使用が妨げられているようですが、5GBはまだなくなっています。
更新1:2週間実行した後、この効果はほとんどなくなりました。
│ Memory Stats ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── │
│ RAM High Low Swap Page Size=4 KB │
│ Total MB 32133.5 -0.0 -0.0 8195.5 │
│ Free MB 1871.9 -0.0 -0.0 8186.4 │
│ Free Percent 5.8% 100.0% 100.0% 99.9% │
│ MB MB MB │
│ Cached= 6275.9 Active= 10217.1 │
│ Buffers= 363.4 Swapcached= 1.3 Inactive = 3134.5 │
│ Dirty = 0.2 Writeback = 0.0 Mapped = 3911.0 │
│ Slab = 6159.5 Commit_AS = 13696.9 PageTables= 95.0
Actively used: 10217.1 MB
Inacively used: 3134.5 MB
Mapped for IO: 3911.0 MB
Buffers: 363.4 MB
Slab: 6159.5 MB
Page Tables: 95.0 MB
Cached: 6275.9 MB
Dirty: 0.2 MB
Writeback: 0.0 MB
Free: 1871.9 MB
------------------------------
Total: 32028,3 MB
Total Memory: 32133.5 MB
------------------------------
Missing ???: 105.2 MB
本当に未使用の(空き)メモリはかなり一定のままでした。しかし、キャッシュとマップは上がりました。これは実際には、ゆっくりと使い果たされているが統計には表示されていない隠しキャッシュがあるようです。
Silvio Massinaは、それがARCである可能性があると述べました。これがの出力です
cat/proc/spl/kstat/zfs/arcstats
6 1 0x01 91 4368 56409879056 315868863969705
name type data
hits 4 15276585
misses 4 1100779
demand_data_hits 4 10451405
demand_data_misses 4 57248
demand_metadata_hits 4 3886139
demand_metadata_misses 4 876962
prefetch_data_hits 4 133147
prefetch_data_misses 4 71927
prefetch_metadata_hits 4 805894
prefetch_metadata_misses 4 94642
mru_hits 4 2334376
mru_ghost_hits 4 9870
mfu_hits 4 12003233
mfu_ghost_hits 4 34745
deleted 4 89041
mutex_miss 4 10
evict_skip 4 239
evict_not_enough 4 2
evict_l2_cached 4 0
evict_l2_eligible 4 14139960320
evict_l2_ineligible 4 3255242752
evict_l2_skip 4 0
hash_elements 4 554684
hash_elements_max 4 568778
hash_collisions 4 424785
hash_chains 4 33824
hash_chain_max 4 5
p 4 3482926902
c 4 11779217520
c_min 4 33554432
c_max 4 16847226880
size 4 11717468560
hdr_size 4 226991968
data_size 4 8517812736
metadata_size 4 1503463424
other_size 4 1469200432
anon_size 4 11872256
anon_evictable_data 4 0
anon_evictable_metadata 4 0
mru_size 4 2606045184
mru_evictable_data 4 1947246592
mru_evictable_metadata 4 39131136
mru_ghost_size 4 7123638784
mru_ghost_evictable_data 4 6026175488
mru_ghost_evictable_metadata 4 1097463296
mfu_size 4 7403358720
mfu_evictable_data 4 6570566144
mfu_evictable_metadata 4 378443776
mfu_ghost_size 4 598224896
mfu_ghost_evictable_data 4 589954048
mfu_ghost_evictable_metadata 4 8270848
l2_hits 4 0
l2_misses 4 0
l2_feeds 4 0
l2_rw_clash 4 0
l2_read_bytes 4 0
l2_write_bytes 4 0
l2_writes_sent 4 0
l2_writes_done 4 0
l2_writes_error 4 0
l2_writes_lock_retry 4 0
l2_evict_lock_retry 4 0
l2_evict_reading 4 0
l2_evict_l1cached 4 0
l2_free_on_write 4 0
l2_cdata_free_on_write 4 0
l2_abort_lowmem 4 0
l2_cksum_bad 4 0
l2_io_error 4 0
l2_size 4 0
l2_asize 4 0
l2_hdr_size 4 0
l2_compress_successes 4 0
l2_compress_zeros 4 0
l2_compress_failures 4 0
memory_throttle_count 4 0
duplicate_buffers 4 0
duplicate_buffers_size 4 0
duplicate_reads 4 0
memory_direct_count 4 445
memory_indirect_count 4 3009
arc_no_grow 4 0
arc_tempreserve 4 0
arc_loaned_bytes 4 0
arc_Prune 4 0
arc_meta_used 4 3199655824
arc_meta_limit 4 12635420160
arc_meta_max 4 4183324304
arc_meta_min 4 16777216
arc_need_free 4 0
arc_sys_free 4 526475264
私はそれをあまり利用できません。私が正しく理解していれば、size
はARCのサイズであるはずです。しかし、それは11GBになります。これは私のメモリ統計のどこにも収まりません。
更新2:
Baloo(Kubuntuの下の検索インデクサー)を終了したところですが、今はまた極端です。
Memory Stats ──────────────────────────────────────────────────────────────────────────────────────────────────────────│
│ RAM High Low Swap Page Size=4 KB │
│ Total MB 32133.5 -0.0 -0.0 8195.5 │
│ Free MB 1004.4 -0.0 -0.0 8132.1 │
│ Free Percent 3.1% 100.0% 100.0% 99.2% │
│ MB MB MB │
│ Cached= 3458.4 Active= 7348.9 │
│ Buffers= 177.5 Swapcached= 3.7 Inactive = 2662.9 │
│ Dirty = 2.9 Writeback = 0.0 Mapped = 937.9 │
│ Slab = 5526.4 Commit_AS = 13320.6 PageTables= 89.2 │
│───────────────────────────────────────────────────────────
今私は6.5GBが不足しています!!ラムの。
Balooプロセスは、終了する前に3.5Gbを使用していました。
KDEはここでいくつかの厄介なトリックを使用していますか?
UPDATE 3
悪くなる。別のLinuxPCでテストしたところ、Inactive used
キャッシュにミックスします。だから私はさらに多くの記憶を失っています。
解決策と後付け
Silvio Massinaによって受け入れられた回答が指摘したように、それは確かにZFSのARCでした。
現在、14GBのメモリを割り当てていると主張しています。
cat /proc/spl/kstat/zfs/arcstats | grep -E "^size"
size 4 14953847480
そこで、stress
を使用して10GBのメモリをgrepしました。
stress --vm-bytes 10000000000 --vm-keep -m 1
そして出来上がり、ARCキャッシュ値はそれに応じて低下しました
cat /proc/spl/kstat/zfs/arcstats | grep -E "^size"
size 4 4147553616
そして今、stress
を殺した後、私は11GBの空きメモリを持っていますが、これは時間の経過とともに再びARCによってゆっくりと消費されます。 (これはまったく問題ありません)
したがって、ARCはキャッシュに似ていますが、代わりにused
メモリの下に表示され、プロセスとともにリストされておらず、独自の情報ファイルにのみリストされています。 OSは常にメモリのマスターであり、誰がそれを使用するかを知らせる必要があると思うので、これは私にとって奇妙なことです。 AskUbunt に興味があれば、これについてより正確なフォローアップの質問をしました。
PS:これがあなたにも役立ったなら、私を賛成することを忘れないでください。賞金は安くはありませんでした[〜#〜] g [〜#〜]
ZFSはARC(適応型置換キャッシュ)を使用します。
Gentoo wikiから:
LinuxがARCで使用されるメモリを考慮する方法は、ページキャッシュで使用されるメモリとは異なります。具体的には、ARCが使用するメモリは、空きプログラムが使用する出力の「キャッシュ」ではなく「使用済み」に含まれます。これは、システムのメモリが不足しているときにメモリが解放されるのを妨げるものではありません。ただし、機会があれば、ARC(および拡張機能としてZFS)がすべてのシステムメモリを使用するという印象を与える可能性があります。
ARCに使用されるメモリーの量は、システムで使用可能なメモリーによって異なり、zfs_arc_minおよびzfs_arc_maxパラメーターを設定して制御できます。
実行時にzfs_arc_maxの値を次のように設定できます。
echo 2147483648 >> /sys/module/zfs/parameters/zfs_arc_max
または起動時に:
echo "options zfs zfs_arc_max=2147483648" >> /etc/modprobe.d/zfs.conf
値はバイトで表されます。