top이나 ps가 보여주는 정보가 대체 어디서 오는 걸까 궁금하지 않으셨나요? 답은 /proc 파일시스템입니다. 거의 모든 모니터링 도구가 결국 여기서 정보를 긁어다 보여주는 거예요. 그래서 도구가 막혔거나 정보가 부족할 때, /proc을 직접 cat하면 가장 원시적이고 가장 정확한 정보가 나옵니다. 오늘은 이 가상 파일시스템을 한번 탐험해 보겠습니다.
개념 / 원리
/proc는 가상 파일시스템(virtual filesystem) 입니다. 디스크 어딘가에 실제 파일로 존재하는 게 아니라, 커널이 메모리에서 실시간으로 만들어서 보여주는 인터페이스예요. mount로 보면 마운트는 되어 있지만 디스크 용량은 차지하지 않습니다.
mount | grep ^proc
# proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
크게 두 종류로 나눠서 봅니다.
/proc/<숫자>/— 프로세스별 정보. 디렉토리 이름이 PID예요./proc/<이름>— 시스템 전체 정보.cpuinfo,meminfo,loadavg같은 것들.
비유하자면 /proc은 커널의 상황판을 그대로 노출한 게시판입니다. 우리는 cat으로 게시물을 읽고, 일부 항목은 echo로 다시 적어 넣을 수도 있습니다(/proc/sys 하위).
실전 예제
시스템 전반
자주 보는 시스템 정보들입니다.
# CPU 정보 (모델명, 코어 수, 캐시 등)
cat /proc/cpuinfo | head -30
# 메모리 통계
cat /proc/meminfo | head -10
# 부팅 시간(초), 누적 idle 시간(초)
cat /proc/uptime
# 1, 5, 15분 평균 부하
cat /proc/loadavg
# 마운트된 파일시스템
cat /proc/mounts
/proc/meminfo에서 MemAvailable이 새 프로세스가 실제로 쓸 수 있는 메모리고, MemFree는 단순 미사용 메모리라 캐시까지 계산에 안 들어갑니다. 메모리 부족 판단은 MemAvailable로 합니다.
특정 프로세스 정보
PID가 12345인 프로세스를 살펴본다고 합시다.
# 상태 요약 (메모리, 상태, 우선순위)
cat /proc/12345/status | head -20
# 실행 명령어
cat /proc/12345/cmdline | tr '\0' ' '; echo
# 실행 파일 경로
readlink /proc/12345/exe
# 현재 작업 디렉토리
readlink /proc/12345/cwd
# 열린 파일 디스크립터 목록
ls -l /proc/12345/fd
# 메모리 매핑 (어떤 라이브러리가 올라왔는지)
cat /proc/12345/maps | head -20
# 사용 자원 limit
cat /proc/12345/limits
fd 디렉토리는 정말 강력합니다. 어느 파일이 열려 있는지, 소켓이 몇 개인지 다 보여서 파일 디스크립터 누수 추적에 자주 씁니다.
네트워크 정보
ss나 netstat이 없는 환경에서도 직접 볼 수 있습니다.
# TCP 소켓 정보 (16진수 출력)
cat /proc/net/tcp | head -5
# 라우팅 테이블
cat /proc/net/route
커널 파라미터 변경
/proc/sys/ 하위는 쓰기가 가능합니다.
# 임시로 ip_forward 켜기
echo 1 > /proc/sys/net/ipv4/ip_forward
# 더 안전한 방법 (sysctl 사용)
sysctl -w net.ipv4.ip_forward=1
주의할 점
/proc을 쓸 때 신경 써야 할 포인트들입니다.
첫째, /proc/sys 쓰기는 휘발성입니다. 재부팅하면 다 사라집니다. 영구 적용하려면 /etc/sysctl.conf나 /etc/sysctl.d/*.conf에 기록하고 sysctl -p로 반영하세요.
둘째, 커널 파라미터는 함부로 바꾸면 위험합니다. vm.swappiness, net.core.somaxconn 같은 건 자주 만지지만, vm.overcommit_memory 같은 건 잘못 건드리면 프로세스가 뜬금없이 죽기 시작합니다. 변경 전 현재값을 메모해 두세요.
셋째, PID가 사라지면 디렉토리도 사라집니다. 잠깐 떴다 죽는 프로세스는 cat을 치기도 전에 디렉토리가 증발해서 "No such file or directory"가 뜹니다. 짧게 떠 있는 프로세스 추적은 /proc보다 auditd나 eBPF 도구가 낫습니다.
넷째, /proc/<PID>/oom_score 는 OOM Killer가 누구를 죽일지 평가하는 점수입니다. OOM이 자주 터지는 서버에서 어떤 프로세스가 위험한지 미리 확인할 수 있어요. 값이 높을수록 먼저 죽습니다.
저는 예전에 디스크가 가득 찼는데 du로 어디가 차지하는지 안 보여서 한참 헤맸던 적이 있는데, 알고 보니 삭제된 파일을 어떤 프로세스가 계속 열고 있어서였습니다. lsof | grep deleted나 /proc/<PID>/fd에서 (deleted)로 보이는 파일을 찾아서 해당 프로세스를 재시작하면 디스크가 풀립니다. /proc을 알고 있으니 가능했던 진단이었어요.
마무리
정리하면 세 줄입니다.
/proc은 디스크에 없는 가상 파일시스템, 커널이 실시간 만들어 보여줌./proc/<PID>/안에 그 프로세스의 모든 것(메모리, 열린 fd, 매핑, 명령어)이 있음./proc/sys/쓰기는 휘발성, 영구 적용은/etc/sysctl.conf에.
'IT·리눅스 > 리눅스' 카테고리의 다른 글
| find 명령어 실전 활용 - 운영에서 진짜 쓰는 10가지 패턴 (0) | 2026.06.17 |
|---|---|
| 디스크 I/O 모니터링 - iostat과 iotop으로 병목 잡기 (0) | 2026.06.16 |
| SSH 키 인증과 ssh-agent - 비밀번호 없이 안전하게 접속하기 (1) | 2026.06.10 |
| top, htop, ps - 리눅스 모니터링 세 가지 도구 제대로 쓰기 (0) | 2026.06.08 |
| cron vs systemd timer - 정기 작업, 어느 쪽을 써야 하나 (0) | 2026.06.04 |