본문으로 건너뛰기

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, avg300total counter를 workload latency와 비교합니다.

vmstat에서 siso는 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을 먼저 찾습니다.

참고: Pressure Stall Information