Решено: Больше 1024 подключений к программе. (Проблема с max open files.)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

Всем привет.
Заметил проблему, зависает 1020 подключение на порт. Ждёт ответа и выпадает по тайм-ауту.

Предыстория.

Есть инет радио, висит на icecast2 вешает в один прекрасный момент, заметили что макс количество слушателей зависло на числе 1020.
Начали тестировать и выяснили, что 1019 подключений работают нормально, а вот с 1020 и больше ждёт ответ и вылетеает по тайм-ауту.

Сразу скажу что в конфиге указано 65000. В фаерволле все везде открыто, спецом sysctl.conf никто не правил на ограничения, сначала подумали что причина в дистрибутиве, на тестовой машине пробовал debian, centos, opensuse, ubuntu везде проблема одна та же.

Сам icecast держит и 4000 подключений, в этом можно убедится зайда на радио zaycev.fv в статистику.

Способ тестирования достаточно прост. wget слушали поток и писали его в /dev/null, потом tail мониторили логи от wget

Код: Выделить всё

#!/bin/bash

var0=0
LIMIT=1010

while [ "$var0" -lt "$LIMIT" ]
do
        wget http://127.0.0.1:8000/play16 -O /dev/null -b
        var0=`expr $var0 + 1`
done

echo

exit 0


Может быть кто нибудь сталкивался с подобной проблемой, в инете по теме ничего найти не смог, возможно не правильно искал.

Специально слушали поток 16кбит сетевая карта была загружена на 30мбит из 100.
Пробовали подключаться 100 с локалхоста, и по 100 с других компов в сети, на 1020 все встало.
При 1020 подключений сам icecast не отвечает на свой веб-доступ.
В планах поднять перед icecast какой нибудь плеер или прокси, что бы ice отдавал один поток, а другая программу уже клиентам.
Щас собираюсь попробовать сделать больше 1020 подключений на nginx или pure-ftpd.
Спасибо за то что ответили на моё сообщение.
Спасибо сказали:
distress
Сообщения: 84
ОС: RHEL5

Re: Решено: Больше 1024 подключений к программе.

Сообщение distress »

conntrack?

root@host

# cat /proc/sys/net/ipv4/ip_conntrack_max # cat /proc/sys/net/nf_conntrack_max

Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: Больше 1024 подключений к программе.

Сообщение KiWi »

Хотя не, сначала лучше посмотреть через tcpdump что происходит(не отвечает на SYN, не передаёт данные и т.д.). И в dmesg -- ядрышко может выводить туда что-нибудь интересное.
Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

Вот выхлоп dmesg

user@host

[69092.589759] possible SYN flooding on port 9000. Sending cookies. [88161.029321] ip_tables: © 2000-2006 Netfilter Core Team [88165.399253] nf_conntrack version 0.5.0 (16384 buckets, 65536 max) [88165.401489] CONFIG_NF_CT_ACCT is deprecated and will be removed soon. Please use [88165.401501] nf_conntrack.acct=1 kernel parameter, acct=1 nf_conntrack module option or [88165.401509] sysctl net.netfilter.nf_conntrack_acct=1 to enable it. [91507.650152] TCP: Peer 8.0.0.1:52150/9000 unexpectedly shrunk window 1679925620:1679926621 (repaired) [91508.251469] TCP: Peer 8.0.0.1:52150/9000 unexpectedly shrunk window 1679925620:1679926621 (repaired)



Кстати, может у меня не правильныя убунту но уменя нету

user@host

# cat /proc/sys/net/ipv4/ip_conntrack_max # cat /proc/sys/net/nf_conntrack_max



Я сделал sudo sysctl -w net.ipv4.tcp_syncookies=0 и у меня появились
/proc/sys/net/ipv4/netfilter/ip_conntrack_max и т.д.
Значемние /proc/sys/net/ipv4/netfilter/ip_conntrack_max 65535.
Спасибо за то что ответили на моё сообщение.
Спасибо сказали:
distress
Сообщения: 84
ОС: RHEL5

Re: Решено: Больше 1024 подключений к программе.

Сообщение distress »

хорошее значение. conntrack не виноват.
может icecast2 не понимает опцию конфига?
в его логах при старте можно увидеть сколько клиентов он может обслужить?
Спасибо сказали:
Аватара пользователя
SemKA
Сообщения: 114
ОС: CentOS, Fedora, Ubuntu

Re: Решено: Больше 1024 подключений к программе.

Сообщение SemKA »

Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

может icecast2 не понимает опцию конфига?
в его логах при старте можно увидеть сколько клиентов он может обслужить?


Нет, проблема не в этом.



Да похоже проблема именно в этом.
В файле $ grep WARN /var/log/icecast2/error.log

user@host

[2010-10-24 22:34:19] WARN connection/_accept_connection accept() failed with error 24: Too many open files [2010-10-24 22:34:20] WARN fserve/fserve_client_create req for file "/usr/share/icecast2/web/premium128/index.html" No such file or directory



Так же нашёл тему на сайте icecast по описанию тоже самое что и у меня.
Спасибо за то что ответили на моё сообщение.
Спасибо сказали:
test157
Сообщения: 124
ОС: Debian Lenny

Re: Решено: Больше 1024 подключений к программе.

Сообщение test157 »

нужно поднимать лимиты на кол-во открытых файлов. для этого редактируешь файл /etc/security/limits.conf

в случае с нжинкс, это выглядит примерно так

www-data hard nofile 32000
www-data soft nofile 32000

и опять же в случае с ним нужно добавить еще такую строку в конфиг: worker_rlimit_nofile 32000;

еще одно из самых главных это net.ipv4.ip_local_port_range = 10000 65000 в sysctl.conf без него быстро кончатся порты.

ну и нужно уменьшать размер таймаутов на разные сокеты вейт и тд, чтобы быстрее освобождались ресурсы. все это также в sysctl.conf
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_probes = 5

это тоже можно добавить, чтобы быстрее заюзывались отработанные сокеты.
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

после изменений sysctl.conf - sysctl -p

чтобы не бутать
Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

test157 писал(а):
24.10.2010 23:13
нужно поднимать лимиты на кол-во открытых файлов. для этого редактируешь файл /etc/security/limits.conf
в случае с нжинкс, это выглядит примерно так
www-data hard nofile 32000
www-data soft nofile 32000
после изменений sysctl.conf - sysctl -p
чтобы не бутать


Большое спасибо за ответ.
Отредактировал sysctl.conf выполнил sysctl -p /etc/sysctl.conf Правила подхватились все ок.
Добавил в файл /etc/security/limits.conf

user@host

icecast2 hard nofile 32000 icecast2 soft nofile 30000


Перезагрузил icecast2 который работает от пользователя icecast2, но проблема осталась.

Может надо применить правила в /etc/security/limits.conf ?

icecast2 = pid 9220

user@host

$ sudo cat /proc/9220/limits Limit Soft Limit Hard Limit Units ... Max open files 1024 1024 files ...

Спасибо за то что ответили на моё сообщение.
Спасибо сказали:
test157
Сообщения: 124
ОС: Debian Lenny

Re: Решено: Больше 1024 подключений к программе.

Сообщение test157 »

может просто процесс релоднулся, а не рестартнулся? может сделать СТОП / СТАРТ?
Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

test157 писал(а):
24.10.2010 23:57
может просто процесс релоднулся, а не рестартнулся? может сделать СТОП / СТАРТ?

Не помогло. Отправил систему в ребут. Ребут не помог!!! Запустил icecast2 вручную после полной загрузки системы, в $sudo cat /proc/1340/limits Max open files 1024 1024 files
Спасибо за то что ответили на моё сообщение.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: Больше 1024 подключений к программе.

Сообщение KiWi »

tierpunk писал(а):
24.10.2010 23:28
Добавил в файл /etc/security/limits.conf

Этот файл отвечает за настройки модуля pam_limits.

В общем случае -- в init-скрипте нужно вписать ulimit -n 65536.
Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

KiWi писал(а):
25.10.2010 00:23
tierpunk писал(а):
24.10.2010 23:28
Добавил в файл /etc/security/limits.conf

Этот файл отвечает за настройки модуля pam_limits.

В общем случае -- в init-скрипте нужно вписать ulimit -n 65536.

Решил вопрос тем что запустил icecast от пользователя под которым логинусь, а в limits.conf icecast2 заменил на *.
Щас cat /proc/3066/limits выдает Max open files 15000 30000 files.

Скажите пожалуйста в какую именно секцию init.d скрипта icecast2 нужно это прописать?

Вот мой /etc/init.d/icecast2

Код: Выделить всё

$ cat /etc/init.d/icecast2
#! /bin/sh
### BEGIN INIT INFO
# Provides:          icecast2
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts the icecast audio streaming server daemon
### END INIT INFO
#
# icecast2
#
#        Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#        Modified for Debian
#        by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
#        Further modified by Keegan Quinn <ice@thebasement.org>
#        for use with Icecast 2
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/icecast2
NAME=icecast2
DESC=icecast2

test -x $DAEMON || exit 0

# Defaults
CONFIGFILE="/etc/icecast2/icecast.xml"
CONFIGDEFAULTFILE="/etc/default/icecast2"
USERID=icecast2
GROUPID=icecast
ENABLE="false"

# Reads config file (will override defaults above)
[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE

if [ "$ENABLE" != "true" ]; then
    echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."
    exit 0
fi

set -e

case "$1" in
  start)
    echo -n "Starting $DESC: "
    start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
        --exec $DAEMON -- -b -c $CONFIGFILE
    echo "$NAME."
;;
  stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
    echo "$NAME."
;;
  reload|force-reload)
    echo "Reloading $DESC configuration files."
    start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
;;
  restart)
    echo -n "Restarting $DESC: "
    # Send TERM after 5 seconds, wait at most 30 seconds.
    start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --exec $DAEMON
    start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
        --exec $DAEMON -- -b -c $CONFIGFILE
    echo "$NAME."
;;
  *)
    echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
    exit 1
;;
esac

exit 0


Хочется что бы все в системе работало по true-way, а не на костылях.
Заметил что если icecast от другого пользователя запускать через init.d то max open files 1024, а если вручную icecast -c /etc/icecast.xml -b то ax open files 15000 как в limits.conf >_<
Спасибо за то что ответили на моё сообщение.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: Больше 1024 подключений к программе.

Сообщение KiWi »

tierpunk писал(а):
25.10.2010 00:35
KiWi писал(а):
25.10.2010 00:23
tierpunk писал(а):
24.10.2010 23:28
Добавил в файл /etc/security/limits.conf

Этот файл отвечает за настройки модуля pam_limits.

В общем случае -- в init-скрипте нужно вписать ulimit -n 65536.

Решил вопрос тем что запустил icecast от пользователя под которым логинусь, а в limits.conf icecast2 заменил на *.
Щас cat /proc/3066/limits выдает Max open files 15000 30000 files.

Скажите пожалуйста в какую именно секцию init.d скрипта icecast2 нужно это прописать?

Вот мой /etc/init.d/icecast2

Код: Выделить всё

$ cat /etc/init.d/icecast2
#! /bin/sh
### BEGIN INIT INFO
# Provides:          icecast2
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts the icecast audio streaming server daemon
### END INIT INFO
#
# icecast2
#
#        Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#        Modified for Debian
#        by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
#        Further modified by Keegan Quinn <ice@thebasement.org>
#        for use with Icecast 2
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/icecast2
NAME=icecast2
DESC=icecast2

test -x $DAEMON || exit 0

# Defaults
CONFIGFILE="/etc/icecast2/icecast.xml"
CONFIGDEFAULTFILE="/etc/default/icecast2"
USERID=icecast2
GROUPID=icecast
ENABLE="false"

# Reads config file (will override defaults above)
[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE

if [ "$ENABLE" != "true" ]; then
    echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."
    exit 0
fi

set -e

case "$1" in
  start)
    echo -n "Starting $DESC: "
    start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
        --exec $DAEMON -- -b -c $CONFIGFILE
    echo "$NAME."
;;
  stop)
    echo -n "Stopping $DESC: "
    start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
    echo "$NAME."
;;
  reload|force-reload)
    echo "Reloading $DESC configuration files."
    start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
;;
  restart)
    echo -n "Restarting $DESC: "
    # Send TERM after 5 seconds, wait at most 30 seconds.
    start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --exec $DAEMON
    start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
        --exec $DAEMON -- -b -c $CONFIGFILE
    echo "$NAME."
;;
  *)
    echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
    exit 1
;;
esac

exit 0


Хочется что бы все в системе работало по true-way, а не на костылях.
Заметил что если icecast от другого пользователя запускать через init.d то max open files 1024, а если вручную icecast -c /etc/icecast.xml -b то ax open files 15000 как в limits.conf >_<

Перед/после echo Starting.
Или вообще в /etc/default/icecast2 вынести.
Спасибо сказали:
tierpunk
Сообщения: 78
ОС: Ubuntu, Debian, Centos

Re: Решено: Больше 1024 подключений к программе.

Сообщение tierpunk »

Век живи Век учись, спасибо Всем кто помог разобраться с проблемой. Оперативно Быстро Качественно.
Спасибо за то что ответили на моё сообщение.
Спасибо сказали: