캐시를 삭제하려면 어떻게 해야 하나요?

캐시를 삭제하려면 어떻게 해야 하나요?

나는라이브 CDLinux 배포판에서 메모리 부족 예외가 발생했습니다.

>java -version
#Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000646e00000, 264241152, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 264241152 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /tmp/hs_err_pid50274.log

free -m 명령을 실행 하면 ~250Mb의 여유 RAM과 캐시에 사용된 19GB가 표시됩니다.

>free -m
            total       used       free     shared    buffers     cached
Mem:        24128      23827        301          0         15      18929
-/+ buffers/cache:      4881      19247
Swap:            0          0          0

메모리 덤프는 다음과 같습니다.

---------------  S Y S T E M  ---------------

OS:RapidLinux 20151103

uname:Linux 3.18.22 #1 SMP Fri Oct 9 19:28:11 UTC 2015 x86_64
libc:glibc 2.21 NPTL 2.21 
rlimit: STACK 8192k, CORE infinity, NPROC 96487, NOFILE 4096, AS infinity
load average:2.08 1.73 1.30

/proc/meminfo:
MemTotal:       24708040 kB
MemFree:          307572 kB
MemAvailable:     173696 kB
Buffers:           15612 kB
Cached:         19383916 kB
SwapCached:            0 kB
Active:          3784768 kB
Inactive:       19327244 kB
Active(anon):    3742084 kB
Inactive(anon): 19303520 kB
Active(file):      42684 kB
Inactive(file):    23724 kB
Unevictable:       15016 kB
Mlocked:           15016 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                96 kB
Writeback:             0 kB
AnonPages:       3727472 kB
Mapped:            55972 kB
Shmem:          19327344 kB
Slab:             671580 kB
SReclaimable:     116376 kB
SUnreclaim:       555204 kB
KernelStack:       23664 kB
PageTables:        24588 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    12354020 kB
Committed_AS:   28666748 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      738156 kB
VmallocChunk:   34346400260 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
DirectMap4k:       11748 kB
DirectMap2M:     2072576 kB
DirectMap1G:    23068672 kB

Memory: 4k page, physical 24708040k(307572k free), swap 0k(0k free)

온전성 검사를 실행하여 캐시 지우기를 시도했는데 sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches놀랍게도 캐시가 전혀 다운되지 않았지만 명령이 성공적으로 완료되었습니다.

RAM에 있어야 하는 aufs/에서 오래된 로그를 삭제하고 캐시를 지우는 명령을 실행했지만 여전히 아무것도 없습니다.

나머지 파일 시스템은 약 9GB만 차지합니다. 캐시를 강제로 지우는 방법은 무엇입니까?

답변1

프로그램에서 사용할 수 있는 여유 RAM은 19GB입니다. 디스크 캐시를 지울 필요가 없습니다. 시스템이 다른 목적(예: 프로그램 실행)을 위해 메모리가 필요한 경우 시스템은 이를 회수합니다. 디스크 캐시를 지워서 할 수 있는 유일한 일은 컴퓨터 속도를 느리게 만드는 것입니다.

디스크 공간은 중요하지 않습니다. 파일을 삭제해도 도움이 되지 않습니다.

19GB의 RAM이 있지만 프로그램에서는 26MB를 할당할 수 없다고 주장합니다. 계산해 보세요: 26MB < 19GB. 이는 메모리가 할당되는 방식과 오류가 보고되는 방식 모두에서 프로그램의 버그입니다. /tmp/hs_err_pid50274.log혹시 더 많은 단서가 있는지 확인해보세요 .

답변2

Shmem: 19327344 kB

tmpfs19GB 또는 기타 공유 메모리 개체 가 있습니다 .

이런 경우가 종종 있습니다 tmpfs. 확인하다 df -h -t tmpfs.

System V 공유 메모리는 를 통해 표시할 수 있습니다 ipcs -m.

를 스캔하면 일부(전부는 아님) 다른 공유 메모리를 찾을 수 있습니다 /proc. 내 대답에는 작은 Python 스크립트가 있습니다.GEM 버퍼로 할당된 메모리 양을 확인할 수 있나요?

편집: 귀하의 경우 삭제된 파일을 여는 것이 있을 수 있습니다. 이는 공간 사용량이 에는 표시되지만 df에는 표시되지 않음을 의미합니다 du. 삭제된 파일을 검색하는 것이 가능합니다 /proc/. 이에 대한 편리한 스크립트는 없지만 그렇게 하고 ls -lR /proc | less명령을 사용하여 문자열을 검색할 수 있을 것입니다. 일부 프로세스에 의해 삭제된 로그 파일이 여전히 열려 있는 것을 볼 수 있는 것 같습니다.(deleted)/less

관련 정보