2017-01-30 19 views
9

Mam wbudowany system z jądrem Linux 2.6.10 (wiem!) I zauważyłem, że gdy system pozostaje na dłużej, "buforowany" "użycie pamięci RAM - jak widać w/proc/meminfo - rośnie liniowo. Czasami dochodzi do 70% całkowitej pamięci RAM i system ulega awarii.Czyszczenie pamięci "cached" w/proc/meminfo bez drop_caches

  1. Nie wiem, dlaczego to miejsce nie było automatycznie ponownie zgłaszane przez jądro w warunkach niskiej ilości pamięci. Myślałem, że pamięć "buforowana", choć używana, jest nadal uważana za "dostępną".

  2. Aby co najmniej ręcznie odzyskać to miejsce, musiałbym zmodyfikować ustawienie drop_caches w/proc/sys/vm /. Jednak ta funkcja została wprowadzona tylko w jądrze 2.6.16.

Ponieważ duża część tego, co znajduje się w „pamięci podręcznej” jest buforuje stronę cache, plików i-węzłów, czy jest jakiś sposób, aby je odzyskać forefully bez drop_caches wyposażone? Próbowałem już sync, ale to nie pomogło.

Mam dużo google o tym, ale nie mogłem znaleźć żadnych zasobów, które nie polegają w jakiś sposób na funkcji drop_caches.

EDIT:

Po poradę a few other threads, wpadłem test, który napisał do pokładowego rzutowej partycji co kilka sekund i widzę oba pola dentry i size-64 iść w /proc/slabinfo (w wysokości 1 os pętla skryptu bash). Jednak nie zauważyłem żadnego zwiększenia wykorzystania pamięci przez Cached.

WIĘCEJ INFO:

muszę wspomnieć, że sam katalog główny jest w ramfs. Mam układ flash, z którego odczytujemy/piszemy, ale zbyt często. Wkleiłem meminfo i slabinfo zrobione kiedyś przed katastrofą. Zwróć uwagę, że pola aktywne i buforowane zwiększają się ponad całkowitą dostępną pamięć!

MemTotal:  256708 kB 
MemFree:   4896 kB 
Buffers:    0 kB 
Cached:   181892 kB 
SwapCached:   0 kB 
Active:   178140 kB 
Inactive:  46496 kB 
HighTotal:   0 kB 
HighFree:   0 kB 
LowTotal:  256708 kB 
LowFree:   4896 kB 
SwapTotal:   0 kB 
SwapFree:   0 kB 
Dirty:    0 kB 
Writeback:   0 kB 
Mapped:   56656 kB 
Slab:   11252 kB 
CommitLimit: 128352 kB 
Committed_AS: 175668 kB 
PageTables:  908 kB 
VmallocTotal: 737280 kB 
VmallocUsed: 113084 kB 
VmallocChunk: 624100 kB 

slabinfo - version: 2.1 
# name   <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <batchcount> <limit> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail> 
rwsem_lock_cache  0  0  64 59 1 : tunables 120 60 0 : slabdata  0  0  0 
rwsem_owner_cache  16  59  64 59 1 : tunables 120 60 0 : slabdata  1  1  0 
rwsem_sap_cache  0  0 128 30 1 : tunables 120 60 0 : slabdata  0  0  0 
pss_node_cache   0  0  32 113 1 : tunables 120 60 0 : slabdata  0  0  0 
mts-sapinfo-cache  0  0 1152 7 2 : tunables 24 12 0 : slabdata  0  0  0 
mts-sap-desc-cache  34  36 448 9 1 : tunables 54 27 0 : slabdata  4  4  0 
mts-qentry-cache  5  59  64 59 1 : tunables 120 60 0 : slabdata  1  1  0 
mts-rcpnt-cache  1  1 5568 1 2 : tunables 8 4 0 : slabdata  1  1  0 
rpc_buffers   8  8 2048 2 1 : tunables 24 12 0 : slabdata  4  4  0 
rpc_tasks    8  24 160 24 1 : tunables 120 60 0 : slabdata  1  1  0 
rpc_inode_cache  0  0 416 9 1 : tunables 54 27 0 : slabdata  0  0  0 
unix_sock    70  70 384 10 1 : tunables 54 27 0 : slabdata  7  7  0 
tcp_tw_bucket   0  0  96 40 1 : tunables 120 60 0 : slabdata  0  0  0 
tcp_bind_bucket  25 203  16 203 1 : tunables 120 60 0 : slabdata  1  1  0 
tcp_open_request  2  59  64 59 1 : tunables 120 60 0 : slabdata  1  1  0 
inet_peer_cache  4  59  64 59 1 : tunables 120 60 0 : slabdata  1  1  0 
ip_fib_alias   23 203  16 203 1 : tunables 120 60 0 : slabdata  1  1  0 
ip_fib_hash   23 113  32 113 1 : tunables 120 60 0 : slabdata  1  1  0 
ip_dst_cache   34  45 256 15 1 : tunables 120 60 0 : slabdata  3  3  0 
arp_cache    13  24 160 24 1 : tunables 120 60 0 : slabdata  1  1  0 
raw_sock    8  8 480 8 1 : tunables 54 27 0 : slabdata  1  1  0 
udp_sock    7  8 480 8 1 : tunables 54 27 0 : slabdata  1  1  0 
tcp_sock    29  36 1024 4 1 : tunables 54 27 0 : slabdata  9  9  0 
flow_cache    0  0  96 40 1 : tunables 120 60 0 : slabdata  0  0  0 
cfq_ioc_pool   0  0  24 145 1 : tunables 120 60 0 : slabdata  0  0  0 
cfq_pool    0  0 104 37 1 : tunables 120 60 0 : slabdata  0  0  0 
crq_pool    0  0  52 72 1 : tunables 120 60 0 : slabdata  0  0  0 
deadline_drq   0  0  48 78 1 : tunables 120 60 0 : slabdata  0  0  0 
as_arq     4  63  60 63 1 : tunables 120 60 0 : slabdata  1  1  0 
mqueue_inode_cache  1  8 480 8 1 : tunables 54 27 0 : slabdata  1  1  0 
jffs2_inode_cache  24 145  24 145 1 : tunables 120 60 0 : slabdata  1  1  0 
jffs2_node_frag 36493 36576  28 127 1 : tunables 120 60 0 : slabdata 288 288  0 
jffs2_raw_node_ref 52018 52171  16 203 1 : tunables 120 60 0 : slabdata 257 257  0 
jffs2_tmp_dnode  0  0  24 145 1 : tunables 120 60 0 : slabdata  0  0  0 
jffs2_raw_inode  0  0  68 56 1 : tunables 120 60 0 : slabdata  0  0  0 
jffs2_raw_dirent  0  0  40 92 1 : tunables 120 60 0 : slabdata  0  0  0 
jffs2_full_dnode 36494 36540  16 203 1 : tunables 120 60 0 : slabdata 180 180  0 
jffs2_i    13  24 328 12 1 : tunables 54 27 0 : slabdata  2  2  0 
nfs_write_data  36  36 448 9 1 : tunables 54 27 0 : slabdata  4  4  0 
nfs_read_data   32  36 448 9 1 : tunables 54 27 0 : slabdata  4  4  0 
nfs_inode_cache  0  0 544 7 1 : tunables 54 27 0 : slabdata  0  0  0 
nfs_page    0  0  64 59 1 : tunables 120 60 0 : slabdata  0  0  0 
dnotify_cache   0  0  20 169 1 : tunables 120 60 0 : slabdata  0  0  0 
kioctx     0  0 192 20 1 : tunables 120 60 0 : slabdata  0  0  0 
kiocb     0  0 128 30 1 : tunables 120 60 0 : slabdata  0  0  0 
fasync_cache   0  0  16 203 1 : tunables 120 60 0 : slabdata  0  0  0 
shmem_inode_cache 169 170 384 10 1 : tunables 54 27 0 : slabdata  17  17  0 
posix_timers_cache  0  0 100 39 1 : tunables 120 60 0 : slabdata  0  0  0 
uid_cache    0  0  64 59 1 : tunables 120 60 0 : slabdata  0  0  0 
blkdev_ioc    0  0  24 145 1 : tunables 120 60 0 : slabdata  0  0  0 
blkdev_queue   25  30 368 10 1 : tunables 54 27 0 : slabdata  3  3  0 
blkdev_requests  4  28 140 28 1 : tunables 120 60 0 : slabdata  1  1  0 
biovec-(256)   256 256 3072 2 2 : tunables 24 12 0 : slabdata 128 128  0 
biovec-128   256 260 1536 5 2 : tunables 24 12 0 : slabdata  52  52  0 
biovec-64   256 260 768 5 1 : tunables 54 27 0 : slabdata  52  52  0 
biovec-16   256 260 192 20 1 : tunables 120 60 0 : slabdata  13  13  0 
biovec-4    256 295  64 59 1 : tunables 120 60 0 : slabdata  5  5  0 
biovec-1    256 406  16 203 1 : tunables 120 60 0 : slabdata  2  2  0 
bio     256 295  64 59 1 : tunables 120 60 0 : slabdata  5  5  0 
file_lock_cache  65  80  96 40 1 : tunables 120 60 0 : slabdata  2  2  0 
sock_inode_cache  121 121 352 11 1 : tunables 54 27 0 : slabdata  11  11  0 
skbuff_head_cache 560 560 192 20 1 : tunables 120 60 0 : slabdata  28  28  0 
sock     9  12 320 12 1 : tunables 54 27 0 : slabdata  1  1  0 
proc_inode_cache 1196 1196 304 13 1 : tunables 54 27 0 : slabdata  92  92  0 
sigqueue    26  26 148 26 1 : tunables 120 60 0 : slabdata  1  1  0 
radix_tree_node  2030 2030 276 14 1 : tunables 54 27 0 : slabdata 145 145  0 
bdev_cache    1  9 416 9 1 : tunables 54 27 0 : slabdata  1  1  0 
mnt_cache    20  40  96 40 1 : tunables 120 60 0 : slabdata  1  1  0 
inode_cache   2665 2665 288 13 1 : tunables 54 27 0 : slabdata 205 205  0 
dentry_cache  4147 4147 136 29 1 : tunables 120 60 0 : slabdata 143 143  0 
filp    1380 1440 160 24 1 : tunables 120 60 0 : slabdata  60  60  0 
names_cache   4  4 4096 1 1 : tunables 24 12 0 : slabdata  4  4  0 
idr_layer_cache  97 116 136 29 1 : tunables 120 60 0 : slabdata  4  4  0 
buffer_head   0  0  48 78 1 : tunables 120 60 0 : slabdata  0  0  0 
mm_struct    44  49 544 7 1 : tunables 54 27 0 : slabdata  7  7  0 
vm_area_struct  3452 3680  84 46 1 : tunables 120 60 0 : slabdata  80  80  0 
fs_cache    45 113  32 113 1 : tunables 120 60 0 : slabdata  1  1  0 
files_cache   42  45 416 9 1 : tunables 54 27 0 : slabdata  5  5  0 
signal_cache   57  60 256 15 1 : tunables 120 60 0 : slabdata  4  4  0 
sighand_cache   55  60 1312 3 1 : tunables 24 12 0 : slabdata  20  20  0 
task_struct   96 100 960 4 1 : tunables 54 27 0 : slabdata  25  25  0 
anon_vma   1273 1356  8 339 1 : tunables 120 60 0 : slabdata  4  4  0 
size-131072(DMA)  0  0 131072 1 32 : tunables 8 4 0 : slabdata  0  0  0 
size-131072   1  1 131072 1 32 : tunables 8 4 0 : slabdata  1  1  0 
size-65536(DMA)  0  0 65536 1 16 : tunables 8 4 0 : slabdata  0  0  0 
size-65536    0  0 65536 1 16 : tunables 8 4 0 : slabdata  0  0  0 
size-32768(DMA)  0  0 32768 1 8 : tunables 8 4 0 : slabdata  0  0  0 
size-32768    1  1 32768 1 8 : tunables 8 4 0 : slabdata  1  1  0 
size-16384(DMA)  0  0 16384 1 4 : tunables 8 4 0 : slabdata  0  0  0 
size-16384    8  8 16384 1 4 : tunables 8 4 0 : slabdata  8  8  0 
size-8192(DMA)   0  0 8192 1 2 : tunables 8 4 0 : slabdata  0  0  0 
size-8192    3  3 8192 1 2 : tunables 8 4 0 : slabdata  3  3  0 
size-4096(DMA)   0  0 4096 1 1 : tunables 24 12 0 : slabdata  0  0  0 
size-4096   278 278 4096 1 1 : tunables 24 12 0 : slabdata 278 278  0 
size-2048(DMA)   0  0 2048 2 1 : tunables 24 12 0 : slabdata  0  0  0 
size-2048   292 292 2048 2 1 : tunables 24 12 0 : slabdata 146 146  0 
size-1024(DMA)   0  0 1024 4 1 : tunables 54 27 0 : slabdata  0  0  0 
size-1024    60  60 1024 4 1 : tunables 54 27 0 : slabdata  15  15  0 
size-512(DMA)   0  0 512 8 1 : tunables 54 27 0 : slabdata  0  0  0 
size-512    216 216 512 8 1 : tunables 54 27 0 : slabdata  27  27  0 
size-256(DMA)   0  0 256 15 1 : tunables 120 60 0 : slabdata  0  0  0 
size-256    76  90 256 15 1 : tunables 120 60 0 : slabdata  6  6  0 
size-192(DMA)   0  0 192 20 1 : tunables 120 60 0 : slabdata  0  0  0 
size-192    139 140 192 20 1 : tunables 120 60 0 : slabdata  7  7  0 
size-128(DMA)   0  0 128 30 1 : tunables 120 60 0 : slabdata  0  0  0 
size-128    857 870 128 30 1 : tunables 120 60 0 : slabdata  29  29  0 
size-96(DMA)   0  0  96 40 1 : tunables 120 60 0 : slabdata  0  0  0 
size-96    1049 1080  96 40 1 : tunables 120 60 0 : slabdata  27  27  0 
size-64(DMA)   0  0  64 59 1 : tunables 120 60 0 : slabdata  0  0  0 
size-64    4425 4425  64 59 1 : tunables 120 60 0 : slabdata  75  75  0 
size-32(DMA)   0  0  32 113 1 : tunables 120 60 0 : slabdata  0  0  0 
size-32    4633 4633  32 113 1 : tunables 120 60 0 : slabdata  41  41  0 
kmem_cache   120 120 128 30 1 : tunables 120 60 0 : slabdata  4  4  0 
+2

Czy jesteś pewien, że system ulega awarii z powodu niskiego poziomu pamięci? –

+0

Podejrzewam, że tak, ostatnie ostrzeżenie zostało podniesione, gdy pozostało tylko 4 MB wolnej pamięci – Ram

+1

Nie uważam, że aktywne + buforowane jest znaczącym obliczeniem. https://access.redhat.com/solutions/406773 mówi, że "Aktywny: pamięć używana od niedawna i zwykle niezmieniana ani regenerowana". Pamięć buforowana prawdopodobnie liczy się jako aktywna. Nie ma powodu, aby rozpoczynać eksykowanie pamięci podręcznych, podczas gdy w ogóle jest wolna pamięć i myślę, że normalne jest korzystanie z całej używanej pamięci, o ile nie wyczerpuje się, i musisz udowodnić, że jesteś. Czy widzisz procesy zabite z powodu OOM? –

Odpowiedz

2

Myślę, że masz gdzieś tmpfs/ramfs. Ze względu na sposób działania tmpfs/ramfs, przestrzeń używana przez pliki na tmpfs jest liczona jako "Cached" przez jądro Linux. Plik na tmpfs/ramfs jest w zasadzie niczym więcej niż plikiem wolnej pamięci podręcznej.

# echo 1 > /proc/sys/vm/drop_caches 
# grep '^Cached' /proc/meminfo 
Cached:   1341824 kB 
# dd if=/dev/zero of=/tmp/testfile bs=1G count=4 
4+0 records in 
4+0 records out 
4294967296 bytes (4.3 GB) copied, 1.33696 s, 3.2 GB/s 
# grep '^Cached' /proc/meminfo 
Cached:   5543480 kB 
# echo 1 > /proc/sys/vm/drop_caches 
# grep '^Cached' /proc/meminfo 
Cached:   5494072 kB 
# rm /tmp/testfile 
# grep '^Cached' /proc/meminfo 
Cached:   1306488 kB 

To pamięć podręczna, której system Linux nie może odzyskać automatycznie, ponieważ nie jest wspierany przez żadne trwałe urządzenie magazynujące. Jak widać w przykładzie, nawet drop_caches nie pomoże.

Sprawdź więc, czy są zainstalowane jakieś tmpfs/ramfs i monitoruj, które z nich się zapełniają.

+0

Dobra sugestia! OP powinien sprawdzić, czy coś pisze pliki logów na tmpfs gdzieś, ponieważ tmpfs są często używane w kręgach osadzonych jako warstwa zapisywalna na wierzchu tylko do odczytu obrazu flash. – pjz