2017-01-30 5 views
9

के बिना "कैश्ड" मेमोरी/कैश/मेमिनोफ़ो में "कैश्ड" मेमोरी को साफ़ करना मेरे पास एक एम्बेडेड सिस्टम है जो 2.6.10 लिनक्स कर्नेल (मुझे पता है!) चला रहा है और मैंने देखा है कि सिस्टम लंबे समय तक रहता है, "कैश "रैम का उपयोग - जैसा कि/proc/meminfo में देखा गया है - रैखिक रूप से बढ़ता है। कभी-कभी यह कुल रैम का 70% तक पहुंच जाता है और सिस्टम क्रैश हो जाता है।drop.caches

  1. मुझे नहीं पता कि कम स्मृति स्थितियों के दौरान कर्नेल द्वारा इस स्थान को स्वचालित रूप से फिर से दावा क्यों नहीं किया गया था। मैंने सोचा कि "कैश्ड" स्मृति, हालांकि प्रयोग की जाती है, अभी भी आसानी से "उपलब्ध" माना जाता है।

  2. कम से कम इस जगह को पुनः प्राप्त करने के लिए, मुझे drop_caches सेटिंग/proc/sys/vm/में tweak करना होगा। हालांकि, यह सुविधा केवल 2.6.16 कर्नेल में पेश की गई थी।

के बाद से क्या "कैश की गई" में है पेज कैश, फ़ाइल और inode कैश है, का एक बड़ा हिस्सा वहाँ किसी भी तरह से forefully drop_caches सुविधा के बिना उन्हें पुनः प्राप्त करने के लिए है? मैंने sync की कोशिश की है, लेकिन इससे बिल्कुल मदद नहीं मिली।

मैंने इस बारे में बहुत कुछ किया है लेकिन कोई संसाधन नहीं मिला जो ड्रॉपकैच सुविधा पर भरोसा नहीं करता है।

संपादित करें:

a few other threads से सलाह के बाद, मैं एक परीक्षण है कि पर बोर्ड फ़्लैश विभाजन हर सेकंड के लिए लिखा था भाग गया और मैं दोनों dentry और size-64 क्षेत्रों /proc/slabinfo में बढ़ जाती हैं देखना (1 प्रति की दर से बैश स्क्रिप्ट का लूप)। हालांकि, मैंने Cached स्मृति उपयोग में कोई वृद्धि नहीं देखी है।

अधिक जानकारी:

मैं उल्लेख करना चाहिए कि रूट निर्देशिका ही ramfs में है। मेरे पास एक फ्लैश चिप है जिसे हम पढ़ते/लिखते हैं, लेकिन बहुत बार। मैंने दुर्घटना से कुछ समय पहले meminfo और slabinfo चिपकाया है। ध्यान दें कि सक्रिय और कैश किए गए फ़ील्ड कुल उपलब्ध स्मृति से अधिक कैसे जुड़ते हैं!

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

क्या आप वाकई कम स्मृति की स्थिति के कारण सिस्टम क्रैश हो जाते हैं? –

+0

मुझे संदेह है कि यह करता है, आखिरी चेतावनी तब उठाई गई थी जब केवल 4 एमबी मुक्त मेमोरी छोड़ी गई थी – Ram

+1

मुझे नहीं लगता कि सक्रिय + कैश एक सार्थक गणना है। https://access.redhat.com/solutions/406773 कहता है कि "सक्रिय: मेमोरी जिसका उपयोग हाल ही में किया गया है और आमतौर पर नहीं बदला जाता है या पुनः दावा नहीं किया जाता है"। तो कैश मेमोरी शायद सक्रिय के रूप में गिना जाता है। मुफ्त मेमोरी होने पर कैशों को बेदखल करने का कोई कारण नहीं है और मुझे लगता है कि जब तक आप वास्तव में बाहर नहीं चल रहे हैं तब तक सभी मेमोरी के साथ चलना सामान्य है, और आपको यह साबित करने की आवश्यकता है कि आप हैं। क्या आप ओओएम के कारण मारे गए किसी भी प्रक्रिया को देखते हैं? –

उत्तर

2

मुझे लगता है कि आपके पास कहीं भी एक tmpfs/ramfs भरना है। Tmpfs/ramfs के तरीके के कारण, tmpfs पर फ़ाइलों द्वारा उपयोग की जाने वाली जगह को Linux कर्नेल द्वारा "कैश्ड" के रूप में गिना जाता है। एक tmpfs/ramfs पर एक फ़ाइल अनिवार्य रूप से एक असंबद्ध कैश प्रविष्टि से अधिक कुछ नहीं है।

# 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 

यह "कैश" स्मृति कि लिनक्स स्वचालित रूप से पुनः प्राप्त नहीं कर सकते, क्योंकि यह किसी भी असली स्थायी भंडारण के द्वारा समर्थित नहीं है। जैसा कि आप उदाहरण में देख सकते हैं, यहां तक ​​कि drop_caches आपकी सहायता नहीं करेगा।

तो /proc/mounts में किसी भी tmpfs/ramfs के लिए एक नज़र डालें जो कि घुड़सवार हैं और मॉनीटर किए गए हैं, इसकी निगरानी करें।

+0

अच्छा सुझाव! ओपी को यह देखना चाहिए कि क्या कुछ कहीं tmpfs पर लॉगफाइल लिख रहा है, क्योंकि tmpfs अक्सर एम्बेडेड सर्कल में केवल पढ़ने योग्य फ्लैश छवि के शीर्ष पर एक लिखने योग्य परत के रूप में उपयोग किया जाता है। – pjz