Prod 서버 중 하나를 확인했을 때 free
메모리의 70%가 사용되고 있는 것으로 나타났습니다.
total used free shared buffers cached
Mem: 164923172 141171860 23751312 0 4555616 20648048
-/+ buffers/cache: 115968196 48954976
Swap: 8388600 0 8388600
하지만 어떤 프로세스가 메모리를 사용하고 있는지 찾을 수 없었습니다. 이 top
명령을 시도했는데 프로세스가 메모리의 1.1%와 5.4%만 사용하고 있는 것으로 나타났습니다.
어떤 프로세스가 메모리를 사용하고 있는지 어떻게 알 수 있나요?
top 명령의 결과는 다음과 같습니다.
15085 couchbas 25 0 2784m 2.4g 40m S 183.7 1.5 299597:00 beam.smp
28248 tibco 18 0 124m 100m 3440 S 20.9 0.1 2721:45 tibemsd
15334 couchbas 15 0 9114m 8.6g 3288 S 9.0 5.4 12996:28 memcached
15335 couchbas 18 0 6024 600 468 S 2.0 0.0 1704:54 sigar_port
15319 couchbas 15 0 775m 2516 944 S 0.7 0.0 269:13.41 i386-linux-godu
12167 tibco 16 0 11284 1464 784 R 0.3 0.0 0:00.04 top
12701 root 15 0 451m 427m 2140 S 0.3 0.3 18:25.02 controller
13163 root 11 -5 0 0 0 S 0.3 0.0 289:58.58 vxglm_thread
답변1
가장 많은 메모리를 사용하는 상위 10개 프로세스가 표시됩니다.
ps aux --sort=-%mem | head
사용 top
: 켜져 있는 경우 top
누르면 m메모리 사용량을 기준으로 프로세스가 정렬됩니다.
그러나 이것이 문제를 해결하지는 못합니다. Linux에서는 모든 것이 파일이거나 프로세스입니다. 따라서 열려는 파일도 메모리를 차지하게 됩니다. 그래서 이것은 도움이 되지 않습니다.
lsof
파일 크기 또는 파일 오프셋(바이트)과 함께 열려 있는 모든 파일을 제공합니다.
답변2
메모리는 실제로 사용되지 않습니다. 기본적으로 Linux는 단순히 콘텐츠를 디스크에 캐시하고 캐시된 콘텐츠를 RAM의 "사용된" 부분에 배치합니다.
해당 RAM을 실제로 사용하는 애플리케이션을 로드하면 해당 RAM을 사용할 수 있습니다.
답변3
파이프를 사용할 수 있습니다메모그리고유형가장 많은 메모리를 사용하는 프로세스를 가져옵니다. 또한 확인하려는 추가 프로세스 세부정보를 지정할 수 있습니다.
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less
추신: 위의 내용은 메모리 열이 첫 번째 "정렬 -k 1 -n -r"
답변4
slabtop 명령을 사용하여 커널이 어떤 슬래브 객체를 사용하는지 확인할 수 있습니다.
/proc/meminfo의 출력을 확인할 수도 있습니다.
출력에서 다음 두 줄을 찾으십시오.
Slab: 68136 kB
SReclaimable: 21208 kB
위의 예에서는 커널이 68MB의 보드 캐시를 사용하고 21MB를 회수할 수 있음을 보여줍니다. 재활용하려면 여기에 설명된 기술을 사용할 수 있습니다.https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables
echo 2 > /proc/sys/vm/drop_caches