Profile picture

[Linux] ps 명령어로 프로세스 관리 정복하기!

JaehyoJJAng2023년 02월 10일

개요

안녕하세요! 리눅스 서버를 운영하다 보면 '대체 어떤 프로세스들이 움직이고 있는 거지?'라는 궁금증이 생길 때가 많으시죠? 시스템이 느려지거나, 특정 서비스가 제대로 동작하는지 확인할 때 등 프로세스 상태를 파악하는 것은 서버 관리의 가장 기본이면서도 중요한 업무입니다.


이때 우리에게 강력한 무기가 되어주는 것이 바로 ps 명령어입니다.

ps는 'Process Status'의 약자로, 현재 실행 중인 프로세스들의 스냅샷을 보여주는 아주 유용한 도구입니다.


이번 시간에는 실무에서 자주 마주치는 시나리오를 통해 ps 명령어를 어떻게 활용하여 리눅스 서버의 프로세스를 효과적으로 관리하고 확인할 수 있는지 알아보겠습니다. 😊


시나리오 1: 내 서버에 어떤 프로세스들이 돌고 있는거지?

가장 기본적이면서도 중요하죠?

현재 서버에 실행 중인 모든 프로세스를 한눈에 파악하고 싶을 때 사용합니다.


마치 우리 몸의 모든 세포를 현미경으로 들여다보는 것과 같죠.


이럴 때는 보통 aux 또는 ef 옵션을 조합하여 사용합니다.

옵션 설명
-a 터미널과 연결된 모든 사용자의 프로세스 출력
-u 사용자 중심으로 자세한 정보 출력
-x 터미널에 연결되지 않은 프로세스(데몬 등)까지 출력
-e 모든 프로세스 출력 (-A와 동일)
-f 풀 포맷으로, 프로세스 간의 관계(부모-자식)를 트리 구조처럼 보여줌

💻 출력 결과 예시 (ps aux)

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 168020 11424 ?        Ss   Jul19   0:02 /sbin/init splash
root         2  0.0  0.0      0     0 ?        S    Jul19   0:00 [kthreadd]
...
www-data  1234  0.2  1.5 876543 61234 ?        Sl   Jul20   2:34 /usr/sbin/apache2 -k start
myuser    5678  0.0  0.2  23456  8765 pts/0    Ss   10:30   0:01 -bash

🔍 결과 분석:

  • USER: 프로세스를 실행한 사용자
  • PID: 프로세스 고유 ID (Process ID)
  • %CPU: CPU 사용률
  • %MEM: 메모리 사용률
  • VSZ: 가상 메모리 크기
  • RSS: 실제 사용 중인 메모리(Resident Set Size) 크기
  • TTY: 프로세스가 연결된 터미널
  • `STAT: 프로세스 상태 (S: Sleep, R: Running, Z: Zombie 등)
  • `START: 프로세스 시작 시간
  • TIME: 총 CPU 사용 시간
  • COMMAND: 실행된 명령어


시나리오 2: "서버가 갑자기 느려졌어요!"

서버가 갑자기 버벅댈 때, 가장 먼저 의심해야 할 것은 특정 프로세스의 비정상적인 리소스 사용입니다.

ps 명령어의 정렬(--sort) 옵션을 사용하면 범인을 쉽게 찾아낼 수 있습니다.


✍️ 예제 커맨드 (CPU 사용량 높은 순)

ps aux --sort=-%cpu | head -n 10

✍️ 예제 커맨드 (메모리 사용량 높은 순)

ps aux --sort=-%mem | head -n 10

🔍 결과 분석:

  • --sort=-%cpu: CPU 사용량(%cpu)을 기준으로 내림차순(-) 정렬합니다.
  • --sort=-%mem: 메모리 사용량(%mem)을 기준으로 내림차순(-) 정렬합니다.

시나리오 3: "특정 사용자가 실행한 프로세스만 보고 싶어요."

여러 사용자가 함께 사용하는 서버에서 특정 사용자가 실행한 프로세스만 모니터링해야 할 때 유용합니다.


✍️ 예제 커맨드

ps -u myuser -f

💻 출력 결과 예시

UID        PID  PPID  C STIME TTY          TIME CMD
myuser    5678  5677  0 10:30 pts/0    00:00:01 -bash
myuser    5800  5678  0 11:20 pts/0    00:00:00 ps -u myuser -f

시나리오 4: "내가 원하는 정보만 쏙쏙 뽑아보자!

ps auxps -ef는 정해진 형식의 많은 정보를 보여줍니다.

하지만 때로는 PID, CPU 사용률, 명령어처럼 딱 필요한 몇 가지 정보만 보고 싶을 때가 있습니다.


이럴 때 사용하는 것이 바로 -eo 옵션입니다.

  • -e: 모든 프로세스를 대상으로 합니다.
  • -o (--format): 사용자가 원하는 출력 컬럼을 직접 지정합니다.

✍️ 예제 커맨드

서버에서 PID, 부모 PID, CPU 사용률, 메모리 사용률, 그리고 실행된 명령어만 확인하고, 메모리 사용량이 높은 순으로 정렬하고 싶다고 가정해 봅시다.

ps -eo pid,ppid,%cpu,%mem,cmd --sort=-%mem | head -n 10

💻 출력 결과 예시

 PID  PPID %CPU %MEM CMD
 1234  1233  0.2  1.5 /usr/sbin/apache2 -k start
 1235  1233  0.2  1.5 /usr/sbin/apache2 -k start
 9876     1  5.5  1.2 /usr/bin/mysqld --daemonized --pid-file=/var/run/mysqld/mysqld.pid
 5678  5677  0.0  0.2 -bash
 ...
    Tag -

Loading script...