본문 바로가기
I T/Linux

리눅스 메모리,프로세스 관리 ( free , ps )

by 루솨 2015. 8. 30.


<사용방법>

free [옵션]

<옵션>

-b : 메모리의 양을 바이트로 표시한다.

-k : 메모리의 양을 Kb로 표시한다.

-m : 메모리의 양을 Mb로 표시한다.

-t : 총 합을 표시한다.

-o : 버퍼 정보를 출력하지 않는다.

-s : 지정된 시간마다 계속해서 출력한다.

-V : 버전 정보를 출력한다.

현재 메모리의 사용량 출력한다.

[root@localhost /]# free

             total       used       free     shared    buffers     cached

Mem:        255596     199332      56264          0       4144      94168

-/+ buffers/cache:     101020     154576

Swap:       524280          4     524276

현재 메모리의 사용량을 버퍼와 캐시를 제외하고 출력한다.


[root@localhost /]# free -o

             total       used       free     shared    buffers     cached

Mem:        255596     199332      56264          0       4248      94192

Swap:       524280          4     524276

종합 정보를 출력한다.

[root@localhost /]# free -t

             total       used       free     shared    buffers     cached

Mem:        255596     199332      56264          0       4280      94184

-/+ buffers/cache:     100868     154728

Swap:       524280          4     524276

Total:      779876     199336     580540

 

종합 정보를 출력하고 단위를 Mb로 나타낸다.


[root@localhost /]# free -mt

             total       used       free     shared    buffers     cached

Mem:           249        194         54          0          4         91

-/+ buffers/cache:         98        151

Swap:          511          0        511

Total:         761        194        566


종합 정보를 출력하고 단위를 Mb로 나타낸다. 또한 5초마다 메모리 정보를 출력한다.


[root@localhost /]# free -mt -s 5

             total       used       free     shared    buffers     cached

Mem:           249        194         54          0          4         91

-/+ buffers/cache:         98        151

Swap:          511          0        511

Total:         761        194        566


02. ps

현재 실행되고 있는 프로세스의 목록을 보여준다. 주로 서버의 상태를 파악하기 위하여 프로세스의 상태를 관리자가 파악할 때에 사용하는 명령어이다. 가장 흔하게 실행하는 명령어 가운데 하나이며, 서버관리에 없어서는 안될 매우 중요한 명령어이다.


<명령어 위치> : /bin/ps

<사용법>

ps [옵션]


<옵션>

-l(소문자 엘) : 자세한 형태의 정보를 출력한다.

-u : 각 프로세스의 사용자 이름과 시작 시간을 보여준다.

-j : 작업 중심 형태로 출력한다.

-s : 시그널 중심 형태로 출력한다.

-v : 가상 메모리 중심 형태로 출력한다.

-m : 메모리 정보를 출력한다.

-a : 다른 사용자들의 프로세스도 보여준다.

-x : 로그인 상태에 있는 동안 완료되지 않은 프로세스들을 보여준다. 유닉스 시스템은 사용자가 로그아웃하고 난 후에도 임의의 프로세스가 계속 동작하게 할 수 있다. 그러면 그 프로세스는 자신을 실행시킨 쉘이 없이도 계속 자신의 일을 수행한다. 이러한 프로세스는 일반적인 ps 명령으로 확인할 수 없다. 이때 –x 옵션을 사용하면 자신의 터미널이 없는 프로세스들을 확인할 수 있다.

-S : 챠일드(child) CPU 시간과 메모리 페이지 결함(fault) 정보를 추가한다.

-c : 커널 task_structure로부터 명령 이름을 보여준다.

-e : 환경을 보여준다.

-w : 긴(wide) 형태로 출력한다. 한행 안에 출력이 잘리지 않는다.

-h : 헤더를 출력하지 않는다.

-n : USER와 WCHAIN을 위해 수치 출력을 지원한다.

  


명령 출력의 각 필드의 의미는 다음과 같다.

USER : 프로세스 소유자의 계정을 보여준다.

PID : 프로세스를 구분하기 위한 고유의 ID

RSS : 프로세스에 의해 사용되는 실제 메모리의 용량(Kbyte 단위)

SZ : 프로세스의 자료와 스택의 크기(Kbyte 단위)

TIME : 현재까지 사용된 CPU의 시간(분, 초)

TTY : 프로세스의 제어 터미널(t3=/dev/tty3) // ? 로 나오는 것은 부팅되면서 자동으로 실행되는 프로세스이다.

%CPU : 마지막 분 동안 프로세스가 사용한 CPU 시간의 백분율

%MEM : 마지막 분 동안 프로세스가 사용한 메모리양의 백분율

START : 프로세스가 시작된 시간

STAT : 프로세스의 상태

COMMAND : 명령어의 이름

 위에서 STAT는 몇 가지 부호를 사용해서 프로세스의 상태를 표시하고 있는데, 아래와 같은 의미이다.(뒤의 top 이라는 명령어에서 다시 나온다!) 


P : 수행가능/수행중

T : 일시 정지

D : 디스크 입출력 대기 같은 인터럽트 할 수 없는 대기상태

S : 20초 미만의 짧은 휴식상태(sleep)

I(대문자 아이) : 20초 이상의 긴 휴식 상태

Z : 좀비(zombi) 프로세스

 

 아래 그냥 ps 를 입력해보자.


[root@localhost /]# cd /

[root@localhost /]# ps

  PID TTY          TIME CMD

 8628 pts/2    00:00:00 bash

 8744 pts/2    00:00:00 ps

 위의 결과를 보면 현재 ps를 실행시킨 사용자는 bash 쉘 사용중에 ps를 실행시켰다는 것을 알 수 있다. ps 명령어를 사용할 때 가장 흔히 사용하는 옵션이 –e 와 –f 옵션인데, 우리는 위의 옵션중에 하나인 –w 옵션을 이용해서 긴(wide) 형태로 출력해보자. 


[root@localhost /]# ps –efw

..중간 생략..

root      7912     1  0 12:37 ?        00:00:00 /usr/sbin/sshd

root      7923     1  0 12:37 ?        00:00:00 cupsd

root      7943     1  0 12:37 ?        00:00:00 sendmail: accepting connections

smmsp     7951     1  0 12:37 ?        00:00:00 sendmail: Queue mailto:runner@01" style="color: rgb(0, 94, 108); text-decoration: none;">runner@01:00:00 for /var/spool/clientmqueue

root      7963     1  0 12:37 ?        00:00:00 gpm -m /dev/input/mice -t exps2

root      7974     1  0 12:37 ?        00:00:00 crond

..이하 생략..

 ◆ 특정 프로세스가 실행되어있는가 확인하기


특정 프로세스의 실행 상태를 정확하게 확인하고자 한다면 ps 명령어에서 필요한 프로세스명을 지정하여 그에 해당하는 프로세스만을 확인하면 된다.



<사용형식>

ps –ef | grep 확인하고자하는프로세스명

즉, 특정 프로세스가 현재 실행중인가를 확인하고자 한다면 위의 형식을 사용하면 된다.


(예) 모든 프로세스 중에서 tty 관련된 프로세스만을 표시해 준다는 의미이다.

[root@localhost /]# ps -ef | grep tty

root      8170     1  0 12:37 tty1     00:00:00 /sbin/mingetty tty1

root      8171     1  0 12:37 tty2     00:00:00 /sbin/mingetty tty2

root      8172     1  0 12:37 tty3     00:00:00 /sbin/mingetty tty3

root      8173     1  0 12:37 tty4     00:00:00 /sbin/mingetty tty4

root      8174     1  0 12:37 tty5     00:00:00 /sbin/mingetty tty5

root      8203     1  0 12:37 tty6     00:00:00 /sbin/mingetty tty6

root      8282  8277  2 12:38 tty7     00:00:26 /usr/bin/Xorg :0 -br -audit 0 -auth/var/gdm/:0.Xauth -nolisten tcp vt7

root      8756  8628  0 12:59 pts/2    00:00:00 grep tty

 

 (예) ssh에 관련된 프로세스만을 표시해줌

[root@localhost /]# ps -ef | grep ssh

root      7912     1  0 12:37 ?        00:00:00 /usr/sbin/sshd

root