Иногда серверу OES Linux не удается определить хост клиента, который неожиданно выключился из-за сбоя рабочей станции или отключения питания. Однако подключение еще остается активным в течение времени ожидания по умолчанию (приблизительно от 12 до 15 минут). Если задать количество параллельных подключений равным 1, то до повторного входа рекомендуется прервать подключение вручную или подождать, пока истечет время ожидания по умолчанию. Эта ситуация происходит, когда процессу watchdog не удается штатно закрыть подключение. Поэтому если для количества параллельных подключений задано значение 1, и подключение не закрыто процессом watchdog, пользователи не могут войти в систему. Ядро Linux предоставляет три параметры для изменения способа, которым keepalive проверяет работу с серверной стороны. Воспользуйтесь этими параметрами, чтобы практически разрешить эту проблему на уровне TCP.
Эти параметры доступны в каталоге /proc/sys/net/ipv4/ .
tcp_keepalive_time: определяет частоту отправки пакетов keepalive протокола TCP для сохранения работы соединения, если оно не используется в данный момент. Это значение используется только в том случае, если параметр keepalive включен.
tcp_keepalive_time принимает значение типа integer, которое указывает количество секунд. По умолчанию установлено значение 7200 секунд или 2 часа. Это значение хорошо подходит для большинства хостов. Оно не требует существенных сетевых ресурсов. Если задать это значение низким, ваши сетевые ресурсы будут перегружены бесполезным трафиком.
tcp_keepalive_probes: определяет частоту отправки проверочных пакетов keepalive протокола TCP перед тем как будет установлено, что подключение утрачено.
Параметр tcp_keepalive_probes принимает значение типа integer. Рекомендуется задать значение меньше 50 в зависимости от значений tcp_keepalive_time и tcp_keepalive_interval. По умолчанию задано значение на уровне 9 попыток. После этого в приложение отправляется информация о том, что соединение утрачено.
tcp_keepalive_intvl: определение продолжительности ответа для каждой попытки keepalive. Это значение важно для расчета времени, по истечение которого отправленный пакет keepalive считается утраченным.
Параметр tcp_keepalive_intvl принимает значение типа integer. По умолчанию задано значение 75 секунд. Итак, 9 попыток по 75 секунд продляться 11 минут. Значение переменных tcp_keepalive_probes и tcp_keepalive_intvl по умолчанию можно использовать для расчета времени ожидания по умолчанию, в течение которого ожидается ответ на пакеты keepalive.
Измените эти три параметры таким образом, чтобы разрешить проблему, не создавая при этом чрезмерный сетевой трафик. Ниже приведен пример такого изменения (время определения составляет 3 минуты):
tcp_keepalive_time set -120
tcp_keepalive_probes - 3
tcp_keepalive_intvl - 20
ПРИМЕЧАНИЕ.Настройки параметров следует изменять осмотрительно. Рекомендуется не настраивать параметры для тех подключений, которые действуют.
Эти настройки вступают в силу немедленно после изменения файлов. Нет необходимости перезапускать какие-либо сервисы. Однако настройки действительны только для текущего сеанса. После перезагрузки сервера настройкам возвращаются значения по умолчанию.
Чтобы окончательно изменить настройку параметра (без изменений при перезапуске), выполните указанную ниже процедуру.
В файл /etc/sysctl.conf. добавьте указанные ниже записи
net.ipv4.tcp_keepalive_time=120
net.ipv4.tcp_keepalive_probes=3
net.ipv4.tcp_keepalive_intvl=20
Мы рекомендуем использовать эти настройки только в том случае, если все клиенты и серверы подключены через локальную сеть.