도구 세 개 다 문법 검증 통과했어. linkstats awk 파서도 샘플로 테스트했고.
Latency 10.04ms avg / 99% 36.77ms, Requests/sec 285.5 (목표 300)
파이프라인 완성이야. 이전 localhost 경로에서 700 RPS가 7.07초였던 걸 생각하면 완전히 다른 시스템이 됐어. timeout 2395는 서버 문제가 아니라 -c 512가 300 RPS엔 과한 것 — 커넥션당 1.7초에 한 번꼴이라 유휴 커넥션이 타임아웃으로 집계돼. WRK_C_AUTO=on이 처리해.
TOTAL 694 → 954 → 1088 MB (30초, 계속 상승 중)
유휴 44MB만 보고 "워킹셋 없다"고 한 건 완전히 틀렸어. 실제 실험(400s warmup + 180s measure, 더 높은 RPS)이면 훨씬 커질 거고.
그런데 이 숫자에 네 top3set 제안을 뒷받침하는 게 들어 있어:
| 서비스 | RSS (3번째 샘플) | 비중 |
|---|---|---|
| reservation | 347 MB | 32% |
| search | 274 MB | 25% |
| rate | 261 MB | 24% |
| 위 3개 소계 | 882 MB | 81% |
| profile | 184 MB | 17% |
| geo | 22 MB | 2% |
네가 지목한 그 3개가 B 워킹셋의 81%야. geo/profile을 A로 돌려보내도 티어링 대상 메모리는 19%만 줄어. 반면 rate/reservation의 DB·캐시 왕복은 전부 사라지고. 링크 측정 결과를 보기 전인데도 이미 근거가 꽤 강해 — 네 감이 맞았어.
OUTPUT 체인은 이 트래픽을 안 봐. B가 192.168.77.1:27021로 붙으면 패킷은 PREROUTING에서 DNAT돼서 컨테이너로 가고, 응답은 컨테이너 네임스페이스에서 생성돼. 호스트 입장에선 전부 **FORWARD**야. OUTPUT은 호스트가 직접 만든 패킷만 지나가.
FORWARD로 옮겨도 안 돼. 응답 패킷의 source port는 SNAT 복원 전이라 mongo 네 개가 전부 27017로 보여서 구분이 안 돼.