Auf einem meiner Server habe ich einige Speicher/Festplatte KV-Dienst, Speicher KV verhalten wie memcached, fragen Sie nach einem großen Kofferraum des Speichers (10GB), initialisiert, Disk Kv verhalten wie leveldbd, Sein zufälliges Lesen und sequentielles Schreiben, und es liest häufig viele Dateien. Speicher sind alle mit libc malloc reserviert.Linux High Platte Cache-Nutzung
Mein KV-Server-Prozess nicht viele Speicher wie unten verbrauchen (da Mangel an Speicher, habe ich Speicher KV getötet, nur Disk KV verlassen, aber freier Speicher geht nach wie vor nach unten):
:~$top
PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20 0 5030m 3.9g 2772 S 8 6.1 10430:52 tair_server
20 0 4833m 3.9g 4560 S 8 6.1 10171:07 tair_server
20 0 4844m 3.9g 3844 S 38 6.1 10073:32 tair_server
20 0 4765m 3.8g 4144 S 8 6.0 10552:39 tair_server
20 0 2941m 2.4g 9.8m S 0 3.8 256:45.70 tair_server
20 0 2953m 2.4g 12m S 1 3.7 276:54.64 tair_server
Aber Meine Erinnerung ist weg.
Ich sehe Platte verbrauchen viel von meinem Speicher, und es ist nicht reklamierbar.
$cat /proc/meminfo
MemTotal: 66101892 kB
MemFree: 6816228 kB
Buffers: 17024 kB
Cached: 456640 kB
SwapCached: 0 kB
Active: 19697712 kB
Inactive: 3197312 kB
Active(anon): 19546504 kB
Inactive(anon): 2875632 kB
Active(file): 151208 kB
Inactive(file): 321680 kB
Unevictable: 48 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 6612 kB
Writeback: 72 kB
AnonPages: 22421152 kB
Mapped: 54408 kB
Shmem: 332 kB
Slab: 28870400 kB
SReclaimable: 213344 kB
SUnreclaim: 28657056 kB
KernelStack: 30000 kB
PageTables: 62776 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 33050944 kB
Committed_AS: 37517224 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 388624 kB
VmallocChunk: 34324313700 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 5696 kB
DirectMap2M: 2082816 kB
DirectMap1G: 65011712 kB
Hier ist die Platte Info.
$slabtop -s c
OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME
69842766 69838389 38% 0.19K 1663025 42 13304200K kmalloc-192
69314912 69314796 38% 0.12K 2166091 32 8664364K kmalloc-128
70866624 70866323 39% 0.06K 1107291 64 4429164K kmalloc-64
69299968 69299592 38% 0.03K 541406 128 2165624K kmalloc-32
128388 72434 56% 0.99K 4230 32 135360K ext4_inode_cache
208782 94112 45% 0.19K 4971 42 39768K dentry
Ich verstehe nicht, was viel Speicher verbraucht, warum es so tut, und wie man das löst.
Kann dies ein Intervall-Kernel-Fehler sein?
ODER es ist ein Glibc-Problem, es gibt keinen Speicher zurück zum System, wegen der häufigen Datenträger lesen?
Normalerweise, wenn jemand fragt " Wo ist mein Linux-Speicher hin? "Die Antwort ist" Festplatten-Cache, und das ist kein Problem ", aber ich weiß nicht, ob das hier der Fall ist. Server Fault kann ein besserer Ort sein, um zu fragen. Vielleicht sehen Sie sich diese Frage an: http://serverfault.com/questions/240277/slab-uses-88gb-of-128gb-available-what-could-cause-this –
Die angesprochene serverfault-Frage beinhaltet hohe SReclaimable, was ein hübscher ist anderes Tier von SUnreclaimable - das scheint hier das Problem zu sein. Ich schaue mir jetzt ein ähnliches Problem an, bei dem 64-, 128- und 192-Byte-SOA-Zuweisungen scheinbar "undicht" sind. Es ist eine alte Frage, aber ich melde mich zurück, wenn ich etwas herausgefunden habe. In der Zwischenzeit, wenn jemand weiß, wie SOA Zuteilungen in Linux durchgesickert werden können, werde ich Ihre Gedanken lieben. –
@ J.Paulding Ich untersuche auch ähnliche Probleme. Alles was du gefunden hast. – Joe