2013-04-11 7 views
9

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?

+0

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 –

+0

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. –

+0

@ J.Paulding Ich untersuche auch ähnliche Probleme. Alles was du gefunden hast. – Joe

Antwort

-1

Mit den Auszügen von oben, frei, slabtop bietet

Sieht aus wie ur-Kernel ist der Speicher Slab auffressen: 28870400 kB

Ein sehr naice Weg, dies zu finden ist.

  1. machen Sie eine Top, und eine Summe von RES-Speicher (residenter Speicher im RAM), top gegeben nur Benutzeransicht des Speichers.

  2. machen Sie eine freie -m und sehen Sie, wie viel Speicher ist frei und verwendet (frei Kernel + Benutzer gegeben). Der diff zwischen dem Gesamtspeicher - Top-RES, und was clamined shouldnt als frei in FREE-Befehl sein nicht viel ~ 1 GB

"Seine Zeit ur OS Version bump"