Nichts scheint für 5 GB Speicher verantwortlich zu sein, der unter Linux fehlt

3

Ich habe Kubuntu 16.04 und verwende ZFS für eine große Datenpartition (RAIDZ1)

Ich vermisse 5 GB RAM und kann nicht herausfinden, wo es hingegangen ist. Und NEIN, ES IST NICHT CACHE

Laut allen Tools, die ich mir ausgedacht habe, habe ich derzeit die folgenden Statistiken:

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

Also 5 GB !! RAM werden nicht berücksichtigt. Wohin sind sie gegangen?

Werkzeugausgaben

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 

frei -h

              total        used        free      shared  buff/cache   available                                           
Mem:            31G         19G        1.8G        406M         10G        5.2G                                           
Swap:          8.0G          0B        8.0G 

oben auf

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 |

Zusätzliche Infos / Geschichte

Ich hatte nur 16 GB Speicher und sah, dass das System anfing, leicht zu tauschen. Allerdings nicht ständig. Es sieht so aus, als ob die Speichernutzung zugenommen hat, bis ein paar Megabyte Swap verbraucht wurden und dann aufgehört hat zu wachsen. Dies war das erste Mal, dass ich von "slab" erfuhr und feststellte, dass ein Großteil meines Gedächtnisses aufgrund von ZFS dort abgelegt wurde.

Großartig, kein Problem, also habe ich weitere 16 GB Arbeitsspeicher installiert. Dies sollte den Job erledigen, oder? Aber stattdessen habe ich das gleiche Verhalten wieder gesehen. Das Gedächtnis wuchs, bis es anfing, den Swap leicht zu nutzen. Diesmal konnte ich jedoch nicht herausfinden, wohin 5GB gehen werden. Unter Windows bin ich es gewohnt, den Zweck jeder Speicherseite mit den richtigen Tools herauszufinden ( https://www.youtube.com/watch?v=AjTl53I_qzY ), aber hier bin ich etwas verloren. 5 GB sind einfach weg. Ist das ein Kernel-Speicherverlust?

Für den Moment habe ich swappiness auf 15 gesetzt , dies scheint zu verhindern, dass Swap "für den Moment " verwendet wird, aber 5 GB sind noch weg.

Update 1: Nach 2 Wochen ist dieser Effekt fast verschwunden.

│ 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

Wirklich unbenutzter (freier) Speicher blieb ziemlich konstant. Aber der Cache und die Karte gingen auf. Dies scheint wirklich, als gäbe es einen versteckten Cache, der langsam erschöpft, aber nicht in den Statistiken angezeigt wird.

Silvio Massina erwähnte, dass es der ARC sein könnte. Hier ist die Ausgabe von

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

Ich kann nicht viel daraus machen. Wenn ich es richtig verstehe, sizesollte die Größe des ARC sein. Es wären aber 11GB. das passt nirgendwo in meine erinnerungsstatistik.

Update 2:

Ich habe gerade Baloo beendet (Suchindexer unter Kubuntu) und jetzt sind die Dinge wieder extrem.

 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                                                               │
│───────────────────────────────────────────────────────────

Jetzt fehlen mir 6,5 GB !! von RAM.

Die Baloo-Prozesse verwendeten 3,5 GB, bevor ich sie beendete.

Verwendet KDE hier einige üble Tricks?

UPDATE 3

Es wird schlimmer. Ich habe auf einem anderen Linux-PC getestet und dort war klar, dass sich Inactive useddas in den Cache mischt. Mir fehlt also noch mehr Gedächtnis.


Lösung & Nachdenken

Wie die akzeptierte Antwort von Silvio Massina zeigte, handelte es sich in der Tat um das ARC des ZFS.

Es behauptete nun, 14 GB Arbeitsspeicher zugewiesen zu haben.

cat /proc/spl/kstat/zfs/arcstats | grep -E "^size"

size                            4    14953847480

Also habe ich stressmir 10 GB Speicher gekauft:

stress --vm-bytes 10000000000 --vm-keep -m 1

Und voila, der ARC-Cache-Wert ist dementsprechend gesunken

cat /proc/spl/kstat/zfs/arcstats | grep -E "^size"

size                            4    4147553616

Und jetzt, nachdem stressich getötet habe, habe ich 11 GB freien Speicher, der im Laufe der Zeit langsam wieder von der ARC aufgebraucht wird. (Welches ist völlig in Ordnung)

ARC ist also wie Cache, wird jedoch usedstattdessen im Speicher angezeigt und auch nicht mit den Prozessen aufgelistet, sondern nur in einer eigenen Infodatei. Das ist seltsam für mich, da ich denke, das Betriebssystem sollte immer der Meister des Speichers sein und einen wissen lassen, wer es verwendet. Ich habe auf AskUbuntu eine genauere Folgefrage dazu gestellt, wenn einer von Ihnen interessiert ist.

PS: Bitte vergiss nicht, mich zu unterstützen, wenn dir das auch geholfen hat. Das Kopfgeld war nicht billig G

Torge
quelle
2
Linux tauscht standardmäßig immer Speicher aus, der seit einiger Zeit nicht mehr verwendet wurde, auch wenn noch genügend Speicher vorhanden ist. Sehr wahrscheinlich haben Sie die zusätzlichen 16 GB nicht benötigt. Wenn Sie nicht gerne tauschen, deaktivieren Sie das Tauschen vollständig. Sie sollten genug Speicher dafür haben.
Dirkt
1
Ok, das erklärt zumindest das. Da swappiness jedoch auf 15 gesetzt wurde, scheint dies nicht so gut zu passieren. Ich bevorzuge es so, wie der Swap auf einer SSD ist. Vollständige Deaktivierung ... Ich weiß es nicht. Scheint problematisch. Aber das könnte an meiner Erfahrung mit Fenstern liegen;)
Torge
1
Vollständige Deaktivierung ist völlig in Ordnung und funktioniert ohne Probleme unter Linux. Wenn ich eine SSD austauschen müsste, würde ich das auf jeden Fall tun, es sei denn, Sie können nicht mehr RAM hinzufügen (aber Sie haben es bereits getan) und es gibt Verwendungsszenarien, in denen Sie mehr RAM verwenden müssen, als Sie physisch haben (aber wahrscheinlich nicht nicht, mit 32 GB). "Swappiness" beeinflusst nur die Wahrscheinlichkeit des Austauschs, so dass Sie möglicherweise weiterhin Schreibvorgänge auf der SSD ausführen müssen, die Sie nicht wirklich benötigen. Zur Not können Sie den Austausch immer manuell aktivieren, wenn Sie ihn unerwartet benötigen ( swapon, swapoff).
Dirkt

Antworten:

2

ZFS verwendet ARC (Adaptive Replacement Cache).

Aus dem Gentoo Wiki:

Die Art und Weise, wie Linux den von ARC verwendeten Speicher berücksichtigt, unterscheidet sich vom vom Seiten-Cache verwendeten Speicher. Insbesondere wird der von ARC verwendete Speicher in der vom freien Programm verwendeten Ausgabe unter "used" (verwendet) und nicht unter "cached" (zwischengespeichert) angezeigt. Dies verhindert in keiner Weise, dass der Speicher freigegeben wird, wenn das System wenig Speicher hat. Es kann jedoch den Eindruck erwecken, dass ARC (und damit auch ZFS) den gesamten Systemspeicher belegen wird, wenn die Gelegenheit dazu besteht.

Die Größe des für die ARC verwendeten Speichers hängt vom auf dem System verfügbaren Speicher ab und kann durch Einstellen der Parameter zfs_arc_min und zfs_arc_max gesteuert werden.

Sie können den Wert von zfs_arc_max zur Laufzeit festlegen mit:

echo 2147483648 >> /sys/module/zfs/parameters/zfs_arc_max

Oder beim Booten mit:

echo "options zfs zfs_arc_max=2147483648" >> /etc/modprobe.d/zfs.conf

Werte werden in Bytes angegeben.

Silvio Massina
quelle
1
Interessant. Gibt es eine Möglichkeit zu überprüfen, ob tatsächlich der ARC 5 GB verwendet? Kann ich die aktuelle Größe abfragen? Ich frage mich auch .. sollte dies nicht noch in / proc / memstat als Anwendungsspeicher oder als Mapper-Speicher angesprochen werden?
Torge
1
Ah, du beziehst dich darauf. Dieser Speicher wird nicht von Linux-Mechanismen zugewiesen, sondern von der SPL. Deshalb wird er wahrscheinlich nicht angezeigt.
Daniel B
1
Hört sich logisch an. Und ich denke das ist es. Ich werde diese Theorie noch einmal auf Herz und Nieren prüfen, wenn ich später zu Hause bin. Wenn dies auscheckt, erhalten Sie das Kopfgeld. Aber wirklich. Speicherinformationen sind eine Nachricht unter Linux :(
Torge
2
@Torge Eigentlich ähnelt das Chaos eher dem Solaris Porting Layer (SPL), der von ZoL (ZFS unter Linux) verwendet wird. Solaris und Linux behandeln die Speicherzuweisungen unterschiedlich, und ZFS ist in Solaris integriert, sodass die Dinge unter Linux etwas durcheinander geraten können. Sie könnten interessiert sein an Wie kann ich die aktuelle Größe der ARC in ZFS bestimmen und in welcher Beziehung steht die ARC zum freien oder Cache-Speicher? Das habe ich speziell gepostet, um einiges davon etwas detaillierter zu diskutieren, als es in den Raum eines Kommentars passen kann.
ein Lebenslauf vom
1
Ich verstehe, aber wie kann es sein, dass das Kerne die Kontrolle über etwas verliert, das so wichtig ist wie die Speicherzuweisung zu so etwas wie SPL? Es sollte zumindest angegeben werden, dass SPL XGB von Ram verwendet. Ich erwarte nicht, dass der Kernel "für was" sagt, aber gib mir einen Hinweis darauf, wer.
Torge