Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clearing the "cached" memory in /proc/meminfo without drop_caches

I have an embedded system running 2.6.10 linux kernel (I know!) and I noticed that as the system stays up for longer periods of time, the "cached" usage of RAM - as seen in /proc/meminfo - increases linearly. Sometimes it reaches up to 70% of total RAM and the system crashes.

  1. I don't know why this space wasn't automatically re-claimed by the kernel during low memory conditions. I thought the "cached" memory, though used, is still considered readily "available".

  2. In order to atleast manually reclaim this space, I would have to tweak the drop_caches setting in /proc/sys/vm/. However, this feature was only introduce in the 2.6.16 kernel.

Since a large part of what's in "cached" is the page cache, file and inode caches, is there any way to forefully reclaim them without the drop_caches feature? I've tried sync, but that didn't help at all.

I've googled a lot about this but couldn't find any resources that don't somehow rely on the drop_caches feature.

EDIT:

Following advice from a few other threads, I ran a test that wrote to the on-board flash partition every seconds and I see both the dentry and size-64 fields go up in /proc/slabinfo (at the rate of 1 per loop of the bash script). However, I didn't notice any increase in the Cached memory usage.

MORE INFO:

I must mention that the root directory itself is in ramfs. I do have a flash chip that we read/write from, but too frequently. I've pasted the meminfo and slabinfo taken sometime before the crash. Notice how the active and cached fields add to greater than the total available memory!

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
like image 398
Ram Avatar asked Jan 30 '17 23:01

Ram


1 Answers

I think you have a tmpfs/ramfs filling up somewhere. Due to the way tmpfs/ramfs works, the space used by files on a tmpfs is counted as "Cached" by the Linux kernel. A file on a tmpfs/ramfs is essentially nothing more than an unbacked cache entry.

# 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

This is "cache" memory that Linux can't reclaim automatically since it isn't backed by any real persistent storage. As you can see in the example, even drop_caches wouldn't help you.

So have a look in /proc/mounts for any tmpfs/ramfs that are mounted and monitor which of those are filling up.

like image 185
aferber Avatar answered Nov 15 '22 05:11

aferber