트래픽 몰리면 커넥션이 끊기고 nf_conntrack table full이 dmesg에 찍힙니다
조회 0 · 댓글 0
사내 API 게이트웨이로 쓰는 리눅스 서버 한 대 문제로 질문드립니다. 평소에는 멀쩡한데 특정 시간대 트래픽이 몰리면 클라이언트 쪽에서 간헐적으로 커넥션 타임아웃이나 connection refused가 뜹니다. 패킷이 아예 유실되는 느낌이라 애플리케이션 로그에는 별다른 흔적이 없습니다.
환경은 Ubuntu 22.04(kernel 5.15), 이 서버에서 iptables로 NAT와 포워딩을 걸어 뒤쪽 WAS들로 분배하고 있습니다. 평상시 동시 연결은 수만 수준이고 짧은 커넥션(connect 후 바로 close)이 많은 편입니다.
증상이 날 때 dmesg를 보면 이런 메시지가 쌓여 있습니다.
[Mon Nov 10 14:22:31 2026] nf_conntrack: table full, dropping packet
[Mon Nov 10 14:22:31 2026] nf_conntrack: table full, dropping packet
[Mon Nov 10 14:22:32 2026] nf_conntrack: table full, dropping packet현재 값은 이렇습니다.
$ cat /proc/sys/net/netfilter/nf_conntrack_max
262144
$ cat /proc/sys/net/netfilter/nf_conntrack_count
262140
$ cat /proc/sys/net/netfilter/nf_conntrack_buckets
65536count가 max에 거의 붙어 있는 상태입니다. ss로 보면 ESTABLISHED는 그렇게 많지 않은데 TIME_WAIT이나 짧게 끝난 세션이 꽤 보입니다.
일단 급해서 sysctl -w net.netfilter.nf_conntrack_max=524288로 올려두니 당장은 에러가 안 납니다. 그런데 이게 근본 처방인지 모르겠습니다. max만 두 배로 올리면 되는 건지, buckets도 같이 손봐야 하는 건지, 아니면 커넥션이 테이블에서 너무 오래 안 빠지는 쪽(타임아웃)을 봐야 하는 건지 판단이 안 섭니다. count가 왜 이렇게 금방 차는지, 어디부터 봐야 할까요?
로그인 후 답글을 남길 수 있습니다.