A memória em cache do Kernel não pode ser liberada, mesmo descartando caches

1

Toda a memória do host é armazenada em cache e não há como ser liberada. /dev/ram1 é usado para armazenar arquivos de teste, mas após cada compilação, executamos freeramdisk .

$ freeramdisk /dev/ram1
$ echo 3 > /proc/sys/vm/drop_caches
$ free -m
             total       used       free     shared    buffers     cached
Mem:         12018      11897        120          0          0      11659
-/+ buffers/cache:        238      11779
Swap:         4091       4091          0

# </proc/slabinfo awk '{print $1, $3*$4}' |sort -k2n
# 0
bip-128 0
bip-64 0
bsg_cmd 0
btrfs_delayed_node 0
btrfs_extent_buffer 0
btrfs_inode 0
btrfs_path 0
btrfs_trans_handle 0
dma-kmalloc-1024 0
dma-kmalloc-128 0
dma-kmalloc-16 0
dma-kmalloc-192 0
dma-kmalloc-2048 0
dma-kmalloc-256 0
dma-kmalloc-32 0
dma-kmalloc-4096 0
dma-kmalloc-64 0
dma-kmalloc-8 0
dma-kmalloc-8192 0
dma-kmalloc-96 0
dm_rq_clone_bio_info 0
dm_rq_target_io 0
dm_uevent 0
ecryptfs_inode_cache 0
ecryptfs_key_record_cache 0
ext3_inode_cache 0
ext3_xattr 0
fat_cache 0
fat_inode_cache 0
hfs_inode_cache 0
hfsplus_icache 0
iint_cache 0
jfs_ip 0
kcopyd_job 0
minix_inode_cache 0
nfsd4_delegations 0
nfsd4_openowners 0
nfs_direct_cache 0
ntfs_big_inode_cache 0
ntfs_inode_cache 0
qnx4_inode_cache 0
reiser_inode_cache 0
slabinfo 0
UDP-Lite 0
UDPLITEv6 0
ufs_inode_cache 0
xfrm_dst_cache 0
xfs_btree_cur 0
xfs_da_state 0
xfs_dquot 0
xfs_efd_item 0
xfs_ili 0
xfs_inode 0
xfs_trans 0
zcache_objnode 0
numa_policy 4080
jfs_mp 4096
taskstats 7872
posix_timers_cache 7888
fscache_cookie_jar 8160
journal_handle 8160
ip_fib_trie 8176
dma-kmalloc-512 8192
tw_sock_TCPv6 8192
Acpi-State 12240
dquot 12288
kmem_cache_node 12288
fuse_request 15808
hugetlbfs_inode_cache 16128
fsnotify_event 16320
sigqueue 20000
blkdev_ioc 24336
bip-256 29568
rpc_inode_cache 30720
bdev_cache 31616
bip-16 32256
mqueue_inode_cache 32256
UDPv6 32640
kmem_cache 40960
UDP 48384
ext4_allocation_context 57120
net_namespace 62208
pid_namespace 65040
dio 76800
nfs_read_data 80640
au_finfo 92736
shared_policy_node 93840
blkdev_queue 96000
tw_sock_TCP 108864
nf_conntrack_ffffffff81cbb580 113568
extent_status 126976
journal_head 141120
blkdev_requests 150024
au_icntnr 161920
ext4_free_data 176128
fuse_inode 178112
buffer_head 182520
anon_vma 184320
au_dinfo 184320
files_cache 194304
TCPv6 195840
ext4_io_page 196608
sock_inode_cache 199680
kmalloc-16 200704
kmalloc-8 237568
proc_inode_cache 243360
signal_cache 244800
kmalloc-32 249856
ext4_io_end 252672
kmalloc-96 278208
TCP 279936
kmalloc-128 294912
Acpi-Namespace 297840
ext2_inode_cache 315840
Acpi-ParseExt 318528
nfs_inode_cache 327680
idr_layer_cache 350880
mm_struct 391680
task_xstate 426816
sighand_cache 475200
kmalloc-512 507904
shmem_inode_cache 699840
kmalloc-192 705600
kmalloc-256 708608
kmalloc-2048 729088
vm_area_struct 736736
kmalloc-8192 753664
kmalloc-64 946176
kmalloc-4096 983040
kmalloc-1024 1015808
task_struct 1249920
ext4_inode_cache 1922496
sysfs_dir_cache 2407104
dentry 3148992
inode_cache 4413920
radix_tree_node 25653152

Alguma ideia de como descobrir para que serve a memória?

    
por SalvadorG 06.04.2015 / 18:06

1 resposta

0

Eu tentei o mesmo no meu sistema e mesmo que alguma memória tenha sido lançada, não foi 0.

Eu acho que a memória restante usada é de arquivos de trabalho que não podem ser liberados. No meu sistema, eu liberei de 2G para 1G e toda a memória usada em cache era de programas em execução.

Para verificar quem está usando essa memória, instale o link (se você for instalá-lo em um ambiente moderno ubuntu, você precisará instalar manualmente o automake-1.11)

Uma vez instalado, o programa mostrará se um arquivo está em cache ou não:

root@RandLand:/# linux-fincore --pages=false --summarize --only-cached    /etc/passwd    

filename      size        total_pages    min_cached page       cached_pages          cached_size        cached_perc

--------      ----        -----------    ---------------       ------------        ----- ------        -----------
/etc/passwd   2225              1                  0                  1                 4096             100.00
---
total cached size: 4096

Para ter um relatório do uso por todo o sistema, você pode executar:

find / -type f | xargs linux-fincore --pages=false --summarize --only-cached | tee /tmp/report

/ tmp / report mostrará quais arquivos estão preenchendo seu cache e você deve ter uma idéia melhor do motivo pelo qual eles não estão sendo liberados.

    
por 07.04.2015 / 11:05