12G 메모리를 가진 서버가 있습니다. 상단 조각은 다음과 같습니다.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12979 frank 20 0 206m 21m 12m S 11 0.2 26667:24 krfb
13 root 15 -5 0 0 0 S 1 0.0 36:25.04 ksoftirqd/3
59 root 15 -5 0 0 0 S 0 0.0 4:53.00 ata/2
2155 root 20 0 662m 37m 8364 S 0 0.3 338:10.25 Xorg
4560 frank 20 0 8672 1300 852 R 0 0.0 0:00.03 top
12981 frank 20 0 987m 27m 15m S 0 0.2 45:10.82 amarok
24908 frank 20 0 16648 708 548 S 0 0.0 2:08.84 wrapper
1 root 20 0 8072 608 572 S 0 0.0 0:47.36 init
2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd
다음을 free -m보여줍니다.
total used free shared buffers cached
Mem: 12038 11676 362 0 599 9745
-/+ buffers/cache: 1331 10706
Swap: 2204 257 1946
올바르게 이해하면 시스템에 362MB의 사용 가능한 메모리 만 있습니다. 내 질문은 : 어떤 프로세스가 대부분의 메모리를 소비하고 있는지 어떻게 알 수 있습니까?
배경 정보와 마찬가지로 시스템이 실행 중 64bit OpenSuse 12입니다.
답변
먼저, “사용되지 않는 메모리는 메모리를 낭비합니다”라는이 만트라를 잠시 반복하십시오. 리눅스 커널은 주위에 계속 큰 그 외모보다 중요한 푸시 데이터 무엇인가 때까지, 파일 메타 데이터 및 요청 된 파일의 양. 당신이 실행할 수있는 이유입니다 :
find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'
두 번째 find인스턴스가 우스운 속도로 실행되도록합니다.
리눅스는 너무 많은 노력없이 메모리 사용량의 급증을 처리하기 위해 약간의 메모리를 ‘무료’로 남겨 둡니다.
둘째, 모든 기억을 먹는 과정을 찾고 싶습니다. 에서 top사용 M명령은 메모리 사용을 기준으로 정렬합니다. VIRT프로세스가 사용하는 메모리의 양이 아니라 할당 된 가상 메모리의 양을 알려주 는 열 을 무시하십시오 . RES얼마나 많은 메모리가 상주 하거나 현재 램에 있는지보고합니다 (요청에도 불구하고 디스크로 스왑되거나 실제로는 할당되지 않음).
그러나 거의 모든 프로세스에 대해 RES예를 들어 /lib/libc.so.6메모리를 한 번만 계산 하므로 프로세스가 사용하는 메모리 양을 정확하게 측정하는 것은 아닙니다. 이 SHR열은 다른 프로세스와 공유 되는 메모리 양을보고 하지만 다른 프로세스가 실제로 공유하고 있다는 보장은 없습니다. 공유 가능할 수 있으며 다른 누구도 공유하고 싶지 않습니다.
이 smem도구는 각 개별 프로세스에서 실제로 얼마나 많은 메모리를 비난 해야 하는지를 사용자가 더 잘 파악할 수 있도록 설계되었습니다 . 실제로 독특하고 공유되는 것을 파악하고 공유 메모리를 공유하는 프로세스에 비례하여 키를 계산하는 영리한 작업을 수행합니다. smem기억력이 더 나은 곳을 이해하는 데 도움이 될 수 top있지만 top훌륭한 첫 번째 도구입니다.
답변
리눅스 / 유닉스에서 최고 명령을 사용하여 빠른 팁을 사용하십시오
$ top
그리고 Shift+ 를 누르십시오 m(즉, 대문자를 쓰십시오 M).
에서 man top
SORTING of task window
For compatibility, this top supports most of the former top sort keys.
Since this is primarily a service to former top users, these commands do
not appear on any help screen.
command sorted-field supported
A start time (non-display) No
M %MEM Yes
N PID Yes
P %CPU Yes
T TIME+ Yes
또는 Shift+ f를 누른 다음 키 n를 눌러 메모리 사용량별로 정렬 할 디스플레이를 선택한 다음 키 를 누릅니다 Enter. 메모리 사용량에 따라 주문 된 활성 프로세스가 표시됩니다
답변
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10
(-n 숫자 플래그를 추가하여 정렬 명령.)
답변
먼저 의 출력에 대한 설명을free 읽어야 합니다 . 결론 : 프로세스에서 즉시 사용할 수있는 최소 10.7GB 의 메모리가 있습니다.
그런 다음 프로세스에 “메모리 사용”이 무엇인지 정의해야합니다 (쉽거나 모호하지는 않습니다).
그렇다면 우리는 더 많은 것을 도울 수 있습니다 🙂
답변
메모리 사용량 별 프로세스 나열 및 정렬 :
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
답변
ps aux --sort '%mem'
에서 procps의 ‘PS (우분투 12.04에 기본값) 출력을 같이 생성합니다 :
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
tomcat7 3658 0.1 3.3 1782792 124692 ? Sl 10:12 0:25 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -D
root 1284 1.5 3.7 452692 142796 tty7 Ssl+ 10:11 3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
ciro 2286 0.3 3.8 1316000 143312 ? Sl 10:11 0:49 compiz
ciro 5150 0.0 4.4 660620 168488 pts/0 Sl+ 11:01 0:08 unicorn_rails worker[1] -p 3000 -E development -c config/unicorn.rb
ciro 5147 0.0 4.5 660556 170920 pts/0 Sl+ 11:01 0:08 unicorn_rails worker[0] -p 3000 -E development -c config/unicorn.rb
ciro 5142 0.1 6.3 2581944 239408 pts/0 Sl+ 11:01 0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]
ciro 2386 3.6 16.0 1752740 605372 ? Sl 10:11 7:38 /usr/lib/firefox/firefox
따라서 Firefox는 내 메모리의 16 %를 차지하는 최고의 소비자입니다.
당신은 또한 관심이있을 수 있습니다 :
ps aux --sort '%cpu'
답변
다음 단계에 따라 정렬 할 열을 지정할 수 있습니다.
단계 :
* 상단
* 시프트 + F
* 목록에서 열을 선택하십시오
예를 들어 n은 메모리를 기준으로 정렬하는 것을 의미합니다.
* 엔터 키를 치시오
* 확인
