Назад | Перейти на главную страницу

Переполнен ошибками «TCP: переполнение таблицы периодов ожидания». Что я могу сделать, чтобы их уменьшить?

У меня есть устаревшая система под управлением Debian 7 (proxmox), в которой размещены контейнеры OpenVZ, и я вижу неприятную проблему, когда система перегружена открытыми соединениями с контейнером VZ, на котором запущен интерфейс apache.

Когда это происходит, журнал на сервере заполняется тысячами ошибок «TCP: переполнение таблицы времени ожидания (CT233)». Это сочетается с медленными ответами веб-сервера. Могу ли я что-нибудь сделать, чтобы решить эту проблему?

После поиска в Google я внес некоторые изменения в различные настройки conntrack, но я не хотел делать что-либо слишком радикальное, не понимая, каковы могут быть последствия (или, действительно, действительно ли это может быть полезно в любом случае)

Чтобы понять, какова ситуация, вот результат "sysctl -a | grep conntrack", когда это происходило сегодня:

net.netfilter.nf_conntrack_generic_timeout = 480
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 345600
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_tcp_loose = 1
net.netfilter.nf_conntrack_tcp_be_liberal = 0
net.netfilter.nf_conntrack_tcp_max_retrans = 3
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 180
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_acct = 0
net.netfilter.nf_conntrack_events = 1
net.netfilter.nf_conntrack_events_retry_timeout = 15
net.netfilter.nf_conntrack_max = 131072
net.netfilter.nf_conntrack_count = 128397
net.netfilter.nf_conntrack_buckets = 32768
net.netfilter.nf_conntrack_checksum = 1
net.netfilter.nf_conntrack_log_invalid = 0
net.netfilter.nf_conntrack_expect_max = 256
net.nf_conntrack_max = 131072

Это включает в себя несколько изменений, которые я сделал сегодня: я удвоил nf_conntrack_buckets с 16384 до 32768, я сократил conntrack_generic_timeout с 600 до 480 секунд и conntrack_tcp_timeout_established с 5 до 4 дней.

Подавляющее большинство открытых подключений в любой момент времени находятся в TIME_WAIT.

Я надеюсь, что есть что-то, что может предложить кто-то с большим знанием настройки TCP / ядра, чем я могу рекомендовать.

Спасибо!

Я закончил настройку двух других переменных, удвоив каждую из них: «net.ipv4.tcp_max_tw_buckets» и «net.ipv4.tcp_max_tw_buckets_ub», и после внесения этих изменений ошибки «переполнение таблицы периода ожидания» больше не повторялись. Однако я буду следить за этим в течение следующей недели или около того и посмотрю, действительно ли это устранило проблему.