3.2 Reclaim, swap, PSI
Memory pressure는 free memory가 0이 되는 순간이 아니라 reclaim 때문에 task가 늦어질 때 드러납니다. PSI는 CPU, memory, I/O 자원을 기다리느라 task가 정체된 시간을 보여 줍니다.
cat /proc/pressure/memory
vmstat 1
sar -B 1
PSI의 some은 적어도 하나의 task가 지연된 시간, full은 모든 non-idle task가 동시에 해당 자원 때문에 stall된 시간을 나타냅니다. avg10, avg60, avg300과 total counter를 workload latency와 비교합니다.
vmstat에서 si와 so는 swap in/out입니다. Swap 사용량이 있다는 사실만으로 현재 pressure를 뜻하지 않습니다. 오래전에 밀려난 cold page가 남아 있을 수 있습니다. 지속적인 swap I/O, major fault, memory PSI 상승이 함께 있는지 봅니다.
PostgreSQL에서의 영향
- Backend working set이 밀려 query latency가 흔들립니다.
- Page cache가 줄어 storage read가 증가합니다.
work_mem이 큰 concurrent query가 reclaim을 촉발합니다.- OOM 직전에는 SSH와 monitoring agent도 느려질 수 있습니다.
SELECT pid, usename, state, wait_event_type, query_start,
left(query, 100) AS query
FROM pg_stat_activity
ORDER BY query_start NULLS LAST;
Memory pressure가 시작된 시간에 실행된 hash, sort, maintenance 작업을 확인합니다. Swap을 즉시 끄거나 cache를 drop하기 전에 원인 workload와 memory limit을 먼저 찾습니다.