지식
Linux
/proc/sys 완전 탐방 — 커널이 열어놓은 가상 파일시스템
/proc 가상 파일시스템의 구조와 프로세스 정보 파일들, /proc/sys 내 kernel·vm·net·fs 네임스페이스의 주요 파라미터를 실습 중심으로 살펴봅니다.
지난 글에서 sysctl 명령으로 /proc/sys 파일들을 읽고 쓰는 법을 배웠습니다. 이번에는 한 발 더 들어가 /proc 가상 파일시스템 전체를 탐방합니다.
/proc란
/proc는 **procfs(Process Filesystem)**로, 디스크에 실제 존재하지 않는 가상 파일시스템입니다. 커널이 내부 상태를 사용자 공간에 파일 인터페이스로 노출하기 위해 마운트합니다.
# /proc 마운트 확인
mount | grep proc
# proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
# 디스크 공간 차지 없음
df -h /proc
# Filesystem Size Used Avail Use% Mounted on
# proc 0 0 0 - /proc
모든 파일은 커널이 요청 시 동적으로 생성하므로 크기가 0으로 표시되지만 실제로 내용은 있습니다.
프로세스별 디렉터리
숫자로 된 디렉터리가 각 PID를 나타냅니다.
# PID 1 (systemd/init) 정보
ls /proc/1/
# cmdline cwd environ exe fd maps mem net root stat status ...
# 실행 중인 명령어 (null 구분자 → 공백 변환)
cat /proc/1/cmdline | tr '\0' ' '
# /usr/lib/systemd/systemd --system --deserialize=31
# 메모리 사용 요약
cat /proc/$$/status | grep -E 'VmRSS|VmSize'
# VmSize: 16384 kB (가상 메모리)
# VmRSS: 3072 kB (실제 RAM 사용)
# 열린 파일 디스크립터
ls -la /proc/$$/fd/
# 0 → /dev/pts/0 (stdin)
# 1 → /dev/pts/0 (stdout)
# 2 → /dev/pts/0 (stderr)
/proc/sys 네임스페이스 탐방
kernel — 시스템 식별과 보안
# 호스트명 읽기 (hostname 명령과 동일)
cat /proc/sys/kernel/hostname
# 최대 PID 값 확인
cat /proc/sys/kernel/pid_max
# 4194304
# 주소 공간 무작위화 (ASLR)
# 0=off, 1=부분, 2=완전 무작위
cat /proc/sys/kernel/randomize_va_space
# 2
# Magic SysRq 키 활성화 여부
cat /proc/sys/kernel/sysrq
# 176 (bitmask)
vm — 가상 메모리 정책
# 스왑 적극성 (기본 60, 낮을수록 RAM 유지)
cat /proc/sys/vm/swappiness
# 페이지 캐시 회수 압력
# 100=기본, 낮추면 캐시 더 오래 유지
cat /proc/sys/vm/vfs_cache_pressure
# 더티 페이지 플러시 임계값
cat /proc/sys/vm/dirty_ratio # 전체 RAM 대비 % (hard limit)
cat /proc/sys/vm/dirty_background_ratio # 백그라운드 flush 시작점
# OOM Killer 동작
cat /proc/sys/vm/overcommit_memory
# 0=휴리스틱, 1=항상 허용, 2=엄격
net — 네트워크 스택
# 연결 큐 최대 크기
cat /proc/sys/net/core/somaxconn
# 4096
# SYN 쿠키 (SYN Flood 방어)
cat /proc/sys/net/ipv4/tcp_syncookies
# 1
# IPv4 포워딩 (컨테이너/VM 호스트 필수)
cat /proc/sys/net/ipv4/ip_forward
# TCP TIME_WAIT 소켓 수
cat /proc/sys/net/ipv4/tcp_max_tw_buckets
fs — 파일시스템 한도
# 시스템 전체 오픈 파일 수 한도
cat /proc/sys/fs/file-max
# 현재 오픈 파일 수 / 오픈 가능 최대 / file-max
cat /proc/sys/fs/file-nr
# 8384 0 2097152
# inotify 감시 한도
cat /proc/sys/fs/inotify/max_user_watches
/proc 루트의 시스템 파일들
# CPU 정보
cat /proc/cpuinfo | grep 'model name' | head -1
# 메모리 상세 정보
cat /proc/meminfo | head -10
# MemTotal: 32768 MB
# MemFree: 8192 MB
# MemAvailable: 16384 MB
# Buffers: 512 MB
# Cached: 8192 MB
# 부하 평균 (uptime의 데이터 소스)
cat /proc/loadavg
# 0.52 0.48 0.42 3/312 12345
# 1분 5분 15분 실행중/전체 최근PID
# 커널 버전
cat /proc/version
# 부팅 후 경과 시간 (초)
cat /proc/uptime
/proc/net — 네트워크 상태
# 열린 TCP 연결 (ss/netstat의 원본 데이터)
cat /proc/net/tcp | head -5
# ARP 테이블
cat /proc/net/arp
# 라우팅 테이블
cat /proc/net/route
# 네트워크 인터페이스 통계
cat /proc/net/dev
활용 팁
# 프로세스가 열고 있는 파일 추적 (lsof 대체)
ls -la /proc/$(pgrep nginx)/fd/
# 메모리 누수 의심 프로세스의 매핑 확인
cat /proc/$(pgrep mysqld)/maps | grep -c 'r--p'
# 컨테이너 내 proc 격리 확인
ls /proc/1/ns/
# cgroup ipc mnt net pid uts ...
/proc는 커널 내부를 들여다보는 창입니다. ps, top, netstat, lsof 등 모든 시스템 모니터링 도구가 실제로는 이 파일들을 파싱해 동작합니다.
지난 글: sysctl — 커널 파라미터를 런타임에 조정하기
다음 글: dmesg와 부트 로그 — 커널 링 버퍼 읽기
읽어주셔서 감사합니다. 😊