모든 호스트 메모리는 캐시되므로 해제할 수 없습니다. /dev/ram1
테스트 파일을 저장하는 데 사용되지만 각 빌드 후에는 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
어떤 메모리가 사용되는지 알아내는 방법을 아시나요?
답변1
내 시스템에서 동일한 작업을 시도했는데 일부 메모리가 해제되었음에도 불구하고 0이 아니었습니다.
아마도 남은 메모리는 해제할 수 없는 작업 파일에서 나온 것 같습니다. 내 시스템에서는 2G에서 1G로 해제되었으며 사용된 모든 캐시 메모리는 실행 중인 프로그램에서 사용되었습니다.
누가 이 메모리를 사용하고 있는지 확인하려면https://code.google.com/p/linux-ftools/(최신 우분투에 설치하려면 automake-1.11을 수동으로 설치해야 합니다)
설치 후 프로그램은 파일이 캐시되었는지 여부를 표시합니다.
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
모든 시스템에 대한 사용 보고서를 얻으려면 다음을 실행하세요.
find / -type f | xargs linux-fincore --pages=false --summarize --only-cached | tee /tmp/report
/tmp/report는 어떤 파일이 캐시를 채우고 있는지 보여주며 해당 파일이 해제되지 않는 이유를 더 잘 알 수 있게 해줍니다.