procfs와 sysfs — proc, sys로 커널 정보 읽기
리눅스에서는 커널 정보를 파일처럼 읽을 수 있습니다.
/proc/cpuinfo,/sys/class/net같은 경로가 모두 가상 파일 시스템입니다. cat 명령 하나로 커널 내부 상태를 들여다볼 수 있습니다.
가상 파일 시스템이란
/proc과 /sys는 디스크에 실제 파일이 존재하지 않습니다. 커널이 실시간으로 생성하는 가상 파일 입니다.
일반 파일: cat /etc/hostname → 디스크에서 읽음
가상 파일: cat /proc/cpuinfo → 커널이 실시간으로 생성하여 반환
procfs (/proc)
프로세스 정보와 커널 상태 를 제공합니다.
프로세스 정보 (/proc/[PID])
# 프로세스 목록 (각 PID가 디렉토리)
ls /proc/ | grep '^[0-9]'
# PID 1234의 정보
cat /proc/1234/status # 프로세스 상태 (메모리, 스레드 수 등)
cat /proc/1234/cmdline # 실행 명령
cat /proc/1234/maps # 메모리 맵 (가상 주소 공간)
cat /proc/1234/fd/ # 열린 파일 디스크립터
cat /proc/1234/io # I/O 통계
cat /proc/1234/limits # 리소스 제한
시스템 정보
# CPU 정보
cat /proc/cpuinfo
# 메모리 정보
cat /proc/meminfo
# MemTotal, MemFree, MemAvailable, Buffers, Cached, SwapTotal 등
# 시스템 부하
cat /proc/loadavg # 1분, 5분, 15분 평균 부하
# 파일 시스템 마운트
cat /proc/mounts
# 네트워크 통계
cat /proc/net/dev # 네트워크 인터페이스별 트래픽
cat /proc/net/tcp # TCP 연결 목록
# 커널 버전
cat /proc/version
# 시스템 가동 시간
cat /proc/uptime
커널 파라미터 (/proc/sys)
# 네트워크 관련
cat /proc/sys/net/ipv4/ip_forward # IP 포워딩
cat /proc/sys/net/core/somaxconn # TCP 백로그 큐 크기
# 메모리 관련
cat /proc/sys/vm/swappiness # 스왑 사용 성향
cat /proc/sys/vm/overcommit_memory # 메모리 오버커밋 정책
# 커널 파라미터 변경 (임시)
echo 1 > /proc/sys/net/ipv4/ip_forward
# 영구 변경
sysctl -w net.ipv4.ip_forward=1
# 또는 /etc/sysctl.conf에 추가
sysfs (/sys)
디바이스와 드라이버 정보를 계층적으로 제공합니다. procfs보다 구조화되어 있습니다.
/sys/
├── block/ # 블록 디바이스 (sda, nvme0n1 등)
├── bus/ # 버스 유형 (pci, usb, i2c 등)
├── class/ # 디바이스 클래스
│ ├── net/ # 네트워크 인터페이스
│ ├── block/ # 블록 디바이스
│ └── thermal/ # 온도 센서
├── devices/ # 디바이스 트리
├── firmware/ # 펌웨어 인터페이스
├── fs/ # 파일 시스템 정보
├── kernel/ # 커널 오브젝트
└── module/ # 로드된 커널 모듈
# 네트워크 인터페이스 정보
cat /sys/class/net/eth0/address # MAC 주소
cat /sys/class/net/eth0/speed # 링크 속도 (Mbps)
cat /sys/class/net/eth0/mtu # MTU
# 블록 디바이스 정보
cat /sys/block/sda/queue/scheduler # 디스크 스케줄러
cat /sys/block/sda/size # 디스크 크기 (섹터)
# CPU 주파수
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
# 온도 (밀리도)
cat /sys/class/thermal/thermal_zone0/temp
procfs vs sysfs
| 항목 | procfs (/proc) | sysfs (/sys) |
|---|---|---|
| 도입 시기 | Linux 초기 | Linux 2.6 |
| 주 용도 | 프로세스 정보, 커널 상태 | 디바이스/드라이버 정보 |
| 구조 | 다소 혼잡 | 체계적 계층 구조 |
| 파일당 값 | 여러 값 포함 가능 | 원칙: 파일당 하나의 값 |
활용
# 서버 트러블슈팅 시
cat /proc/loadavg # 부하 확인
cat /proc/meminfo | grep -E "MemAvailable|SwapUsed" # 메모리 확인
cat /proc/net/sockstat # 소켓 상태 통계
cat /proc/sys/fs/file-nr # 열린 파일 수 / 최대값
핵심 포인트
- /proc은 실제 파일이 아님: 커널이 동적으로 생성하는 가상 파일 시스템
- top, ps 같은 도구의 원리: 내부적으로 /proc을 읽어서 정보를 표시
- /proc/sys로 커널 파라미터 조정: sysctl은 /proc/sys의 래퍼
정리
/proc과 /sys는 리눅스 커널과 소통하는 인터페이스입니다. 시스템 모니터링 도구들이 내부적으로 이 파일들을 읽고, 커널 파라미터 튜닝도 여기서 합니다. "특정 프로세스의 메모리 사용량을 어떻게 확인하나요?"에 대해에 대한 답이 바로 /proc/[PID]/status입니다.