Article ID: 118693, created on Dec 13, 2013, last review on May 11, 2014

  • Applies to:
  • Operations Automation
  • Panels
  • Virtuozzo
  • Virtuozzo containers for Linux
  • Virtuozzo hypervisor

Вопрос

В файле /var/log/messages на физическом сервере присутствуют следующие сообщения:

[2814258.430156] TCP: time wait bucket table overflow (CT101) 
[2814258.449661] TCP: time wait bucket table overflow (CT101) 
[2814258.450743] TCP: time wait bucket table overflow (CT101) 
[2814258.475297] TCP: time wait bucket table overflow (CT101)

Что они означают и как от них избавиться?

Ответ

Эти сообщения означают, что TCP-сокеты со статусом TIME_WAIT (time wait buckets) исчерпали свой лимит памяти ядра.

Количество текущих подключений TIME_WAIT (tw_count) можно выяснить с помощью утилиты netstat:

[root@vz ~]# netstat -antp | grep TIME_WAIT
tcp        0      0 127.0.0.1:8080              127.0.0.1:35550             TIME_WAIT   -
tcp        0      0 127.0.0.1:8080              127.0.0.1:35562             TIME_WAIT   -
tcp        0      0 127.0.0.1:8080              127.0.0.1:35568             TIME_WAIT   -
tcp        0      0 ::ffff:127.0.0.1:37849      ::ffff:127.0.0.1:25         TIME_WAIT   -

[root@vz ~]# netstat -antp | grep TIME_WAIT | wc -l
4

Такая проблема может возникнуть в одном из следующих случаев:

1) Системное значение tw_count больше, чем системный лимит max_tw_buckets:

    [root@vz ~]# sysctl -a | grep tcp_max_tw_buckets
    net.ipv4.tcp_max_tw_buckets = 262144

Этот лимит довольно высок, поэтому его превышение маловероятно. Тем не менее при необходимости этот sysctl можно увеличить.

2) Лимит max_tw_buckets превышен на уровне виртуальной среды:

    [root@vz ~]# sysctl -a | grep tcp_max_tw_buckets_ub
    net.ipv4.tcp_max_tw_buckets_ub = 16536

Для устранения этой проблемы увеличьте sysctl.

3) tw_buckets в виртуальной среде потребляют слишком много памяти (больше, чем разрешенный процент от kmemsize)

    [root@vz ~]# vzctl exec 101 sysctl -a 2>/dev/null| grep net.ipv4.tcp_max_tw_kmem_fraction
    net.ipv4.tcp_max_tw_kmem_fraction = 384

384 означает 38,4 % от kmemsize.

Попробуйте увеличить параметр kmemsize для данного контейнера и проверьте, пропали ли сообщения.

4) Нехватка kmemsize в виртуальной среде - в этом случае для параметра kmemsize должны быть зарегистрированы новые счетчики сбоев. Проверьте, так ли это:

    [root@vz ~]# awk '$6' /proc/bc/101/resources
                kmemsize                 16587096             18132992             24299200             26429120                    126

В последней колонке показано, сколько раз был превышен этот параметр. Если лимит превышен, увеличьте параметр kmemsize для данного контейнера.

a26b38f94253cdfbf1028d72cf3a498b 2897d76d56d2010f4e3a28f864d69223 d02f9caf3e11b191a38179103495106f e8e50b42231236b82df27684e7ec0beb 5356b422f65bdad1c3e9edca5d74a1ae caea8340e2d186a540518d08602aa065 0dd5b9380c7d4884d77587f3eb0fa8ef 614fd0b754f34d5efe9627f2057b8642 56797cefb1efc9130f7c48a7d1db0f0c

Email subscription for changes to this article
Save as PDF