Limpando a memória “cacheada” em / proc / meminfo sem drop_caches

9

Eu tenho um sistema embarcado rodando 2.6.10 kernel linux (eu sei!) e notei que enquanto o sistema permanece ativo por longos períodos de tempo, o uso "em cache" da RAM - como visto em / proc / meminfo - aumenta linearmente. Às vezes, chega a 70% do total de RAM e o sistema trava.

  1. Eu não sei porque este espaço não foi automaticamente re-reivindicado pelo kernel durante condições de pouca memória. Eu pensei que a memória "cache", embora usada, ainda é considerada prontamente "disponível".

  2. A fim de recuperar manualmente este espaço, eu teria que ajustar a configuração drop_caches em / proc / sys / vm /. No entanto, esse recurso foi introduzido apenas no kernel 2.6.16.

Como uma grande parte do que está em "cache" é o cache de páginas, caches de arquivo e inode, existe alguma maneira de recuperá-los sem o recurso drop_caches? Eu tentei sync , mas isso não ajudou em nada.

Eu pesquisei muito sobre isso, mas não consegui encontrar recursos que não dependam de alguma forma do recurso drop_caches.

EDITAR:

Seguindo o conselho de alguns outros tópicos , fiz um teste que escrevi para a partição flash on-board a cada segundo e vejo ambos os campos dentry e size-64 sobem em /proc/slabinfo (à taxa de 1 por loop do script bash). No entanto, não notei nenhum aumento no uso da memória Cached .

MAIS INFORMAÇÃO:

Devo mencionar que o próprio diretório raiz está no ramfs. Eu tenho um chip flash que lemos / escrevemos, mas com muita frequência. Eu colei o meminfo e o slabinfo tirados algum tempo antes do acidente. Observe como os campos ativos e armazenados em cache aumentam o total de memória disponível!

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
    
por Ram 31.01.2017 в 00:09
fonte

1 resposta

2

Eu acho que você tem um tmpfs / ramfs em algum lugar. Devido ao modo como o tmpfs / ramfs funciona, o espaço usado pelos arquivos em um tmpfs é contado como "Armazenado em cache" pelo kernel do Linux. Um arquivo em um tmpfs / ramfs é essencialmente nada mais que uma entrada de cache não-retrabalhada.

# 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

Esta é a memória "cache" que o Linux não pode recuperar automaticamente, pois ela não é suportada por nenhum armazenamento persistente real. Como você pode ver no exemplo, mesmo drop_caches não ajudaria você.

Portanto, dê uma olhada em /proc/mounts para qualquer tmpfs / ramfs que esteja montado e monitore quais deles estão sendo preenchidos.

    
por aferber 08.02.2017 / 12:06
fonte