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