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

개요

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


이때 우리에게 강력한 무기가 되어주는 것이 바로 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
 ...

관련 글

지식 공유3분 읽기

[Linux] Ubuntu 24.04 -> Rocky 10 마이그레이션

개요 기존 홈서버에서 운영 중인 Ubuntu 24.04 서버의 모든 서비스( Docker , Gatsby , 데이터 등등)를 새로운 Rocky 서버로 누락 없이 이관하기 위한 과정을 기록해보려고 합니다. 사전 준비 작업 전에, 양쪽...

리눅스
지식 공유3분 읽기

[Linux] 테스트 서버 디스크 장애 이슈

개요 OS : Rocky 8.10 디스크 구성 /dev/sda : 메인 디스크 /dev/sdb : 백업 디스크 상황 평소에 서버 로그에 READ sda .... , swap 관련 메시지가 간간히 보였음. 어느 날 I/O 관련 로그가...

리눅스
지식 공유1분 읽기

[Linux] SSH Keygen으로 원격 접속 키 생성하기

SSH Key 인증? SSH Key 인증은 비대칭 암호화라는 방식을 사용합니다. 한 쌍의 키(Key Pair)를 생성하여 하나는 내가 가지고 있고(개인 키, Private Key), 하나는 서버에 등록(공개 키, Public Key)...

리눅스