리눅스 시스템을 관리하다 보면 눈에 보이지 않는 수많은 '프로세스'가 백그라운드에서 돌아가고 있습니다. 시스템 자원이 갑자기 부족해지거나 특정 서비스가 응답하지 않을 때, 우리는 시스템의 현재 상태를 스냅샷처럼 찍어서 확인해야 합니다. 이때 사용하는 핵심 명령어가 바로 ps (Process Status)입니다.
단순히 명령어 한 줄을 입력하는 것을 넘어, 수많은 옵션 중 내게 필요한 정보만 골라내는 능력은 시니어 엔지니어의 기본 소양입니다. 오늘 이 글에서는 ps 명령어의 기본 문법부터 실무에서 90% 이상 사용되는 필수 조합까지 완벽하게 파헤쳐 보겠습니다.
1. 리눅스 ps 명령어의 두 가지 문법 스타일
ps 명령어는 특이하게도 역사적 배경에 따라 두 가지 표기법을 혼용합니다. 이를 이해하지 못하면 구글링 결과마다 다른 옵션 형태에 혼란을 느낄 수 있습니다.
- BSD 스타일: 대시(-)를 붙이지 않습니다. (예:
ps aux) - Standard(POSIX) 스타일: 대시(-)를 붙입니다. (예:
ps -ef)
현대 리눅스 시스템에서는 두 방식을 모두 지원하지만, 출력되는 정보의 구성과 디테일이 조금씩 다릅니다. 보통 시스템 전체를 훑어볼 때는 ps aux를, 부모-자식 간의 계층 구조를 볼 때는 ps -ef를 선호합니다.
[핵심 정리] ps 명령어 주요 옵션 및 용도 비교
| 옵션 조합 | 주요 특징 | 권장 사용 상황 |
|---|---|---|
| ps aux | CPU, 메모리 사용량 위주 출력 | 리소스 과부하 원인 파악 시 |
| ps -ef | PPID(부모 프로세스 ID) 포함 출력 | 프로세스 간 상관관계 파악 시 |
| ps -u [USER] | 특정 사용자 실행 프로세스 필터링 | 특정 계정의 활동 모니터링 시 |
2. 실무에서 바로 쓰는 ps 활용 테크닉
단순히 명령어만 치는 단계에서 벗어나, grep이나 sort와 조합하면 훨씬 강력한 도구가 됩니다.
특정 프로세스만 콕 집어 찾기
$ ps -ef | grep 'nginx'
가장 많이 쓰이는 형태입니다. 실행 중인 프로세스 중 'nginx' 문자열이 포함된 라인만 필터링합니다.
메모리 점유율이 높은 순으로 정렬하기
$ ps aux --sort=-%mem | head -n 11
시스템이 느려졌을 때 범인을 찾는 가장 빠른 방법입니다. --sort=-%mem 옵션을 통해 메모리 사용량이 높은 상위 10개 프로세스를 확인할 수 있습니다.
3. ps 출력 항목(Column)의 의미 해석
명령어를 입력했을 때 쏟아지는 영문 약어들의 의미를 알아야 정확한 진단이 가능합니다.
- PID: 프로세스의 고유 ID 번호입니다. 프로세스를 종료(kill)할 때 사용합니다.
- %CPU & %MEM: 각각 CPU와 물리적 메모리 점유율을 나타냅니다.
- VSZ: 가상 메모리 크기입니다.
- RSS: 실제 물리 메모리 점유 크기(Resident Set Size)입니다. 가장 주의 깊게 봐야 할 수치입니다.
- STAT: 프로세스의 상태입니다. (R: 실행 중, S: 수면 중, Z: 좀비 프로세스 등)
결론: 정적인 스냅샷 ps를 마스터하세요
ps 명령어는 실시간 모니터링(top)과는 또 다른 매력이 있습니다. 특정 시점의 시스템 상태를 정밀하게 기록하고 보고서를 작성하거나 스크립트를 짤 때 필수적이기 때문입니다.
지금 바로 터미널을 열고 ps aux --sort=-%cpu를 입력해 보세요. 여러분의 리눅스 시스템에서 가장 고군분투하고 있는 프로세스가 무엇인지 확인하는 것부터가 최적화의 시작입니다.
도움이 되셨나요? 리눅스 관리에 대해 더 궁금한 점이 있다면 댓글로 남겨주세요!
| 확인 사항 | 설명 |
|---|---|
| 필터링 필요 여부 | 너무 많은 결과가 나오면 | grep을 사용했는가? |
| 정렬 기준 설정 | CPU 또는 메모리 중 어떤 자원을 기준으로 볼 것인가? |
| 계층 구조 확인 | 부모 프로세스(PPID) 확인이 필요한 상황인가? (ps -ef 권장) |