ограничение количества подключений через сокеты

Онтарио
На сайте с 30.06.2009
Offline
37
4424

Здравствуйте,

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

Может кто-то уже сталкивался?

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

p.s. debian

M
На сайте с 01.12.2009
Offline
235
#1

Надо просто нанять админа и разобраться

Администратор Linux,Freebsd. построения крупных проектов.
Онтарио
На сайте с 30.06.2009
Offline
37
#2

разобраться в чем, простите?

N
На сайте с 06.05.2007
Offline
419
#3
Онтарио:


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

да ладно? как измерял память израсходованную на соединения?

если узнать какая именно память наиболее расходуется, можно предложить меры.

И ты же понимаешь, что это все живые пользователи? возможно, эти меры ухудшат качество сервиса

Кнопка вызова админа ()
M
На сайте с 01.12.2009
Offline
235
#4
Онтарио:
разобраться в чем, простите?

В том почему израсходуется память и как это всё сделать/оптимизировать

Онтарио
На сайте с 30.06.2009
Offline
37
#5

проблема точно локализована.: используется скрипт (много инстансов одного и того же скрипта), который фетчит данные с другого сервера. В первый раз за пол года тот самый сервер сложился в 504 timeout. Собственно вот. Переписывать код, который пользуется сокетами слишком накладно, поэтому хочется решить максимально "дешево", то есть административными методами - ограничением, о котором спрашивалось в первом посте.

N
На сайте с 06.05.2007
Offline
419
#6

Онтарио, ну вот ограничишь соединения, а скрипт перестанет запускаться после этого?

попробуй комбинацию правил в iptables connlimit и ip назначения того сервера.

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

zexis
На сайте с 09.08.2005
Offline
388
#7

Уточните эти коонекты создают легальные пользователи или это хакер вас атакует?

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

1) В iptables есть модуль connlimit для ограничения коннектов

2) если это злономеренные действия хакера, то можно автоматически обнаруживать IP автоматически открывающие много коннектов и банить их фаерволом.

Онтарио
На сайте с 30.06.2009
Offline
37
#8

коннекты создаются вполне легальными скриптами. Решение на будущее уже написано и отлажено, но нужно дождаться когда встанет целевой сервер, а до этого времени хотелось бы поднять свои сайты, которые не используют эти скрипты.

zexis:
Уточните эти коонекты создают легальные пользователи или это хакер вас атакует?
Если легальные пользователи, то нужно разбираться зачем они это делают.

1) В iptables есть модуль connlimit для ограничения коннектов

2) если это злономеренные действия хакера, то можно автоматически обнаруживать IP автоматически открывающие много коннектов и банить их фаерволом.
Andreyka
На сайте с 19.02.2005
Offline
822
#9
Онтарио:

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

Можно настроить, так чтоб не вешалась. При этом скрипты вышедшие за предел дозволенного, будут убиты ОС.

Подойдет?

Не стоит плодить сущности без необходимости
rtyug
На сайте с 13.05.2009
Offline
263
#10
Онтарио:
проблема точно локализована.: используется скрипт (много инстансов одного и того же скрипта), который фетчит данные с другого сервера. В первый раз за пол года тот самый сервер сложился в 504 timeout. Собственно вот. Переписывать код, который пользуется сокетами слишком накладно, поэтому хочется решить максимально "дешево", то есть административными методами - ограничением, о котором спрашивалось в первом посте.

скорее всего вы используете многопоточность, где сокет пихается в каждый поток и из-за этого ОС тратит много ресурсов?

что использует скрипт?

можно попробовать переделать, проанализировать скрипт, многопоточность - тема большая, в книгах очень многое написанного

можно переписать скрипт и использовать:

  • на событиях ядра FreeBSD (kqueue/kevent), linux (epoll/poll)
  • библиотеки Event loop, Any Event

Событийно ориентированное программирование (событийно-асинхронное программирование)

Применение в серверных приложениях

Событийно-ориентированное программирование применяется в серверных приложениях для решения проблемы масштабирования на 10000 одновременных соединений и более.

В серверах, построенных по модели «один поток на соединение», проблемы с масштабируемостью возникают по следующим причинам:
* слишком велики накладные расходы на структуры данных операционной системы, необходимые для описания одной задачи (сегмент состояния задачи, стек);
* слишком велики накладные расходы на переключение контекстов.

Философской предпосылкой для отказа от потоковой модели серверов может служить высказывание Алана Кокса: «Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы»[1].

Серверное приложение при событийно-ориентированном программировании реализуется на системном вызове, получающем события одновременно от многих дескрипторов (мультиплексирование). При обработке событий используются исключительно неблокирующие операции ввода-вывода, чтобы ни один дескриптор не препятствовал обработке событий от других дескрипторов.

на клиенте в браузере, например, если это чат:

  • push server, long-pull, aka Comet (есть решение)
  • websockets (фреймворк Mojo Mojolicious)

http://cpansearch.perl.org/src/MSERGEANT/IO-KQueue-0.34/examples/chat.pl (kqueue/kevent)

http://cpansearch.perl.org/src/AWWAIID/Continuity-1.1.1/eg/chat-ajax-push.pl (Jquery push server + EventLoop )

http://cpansearch.perl.org/src/AWWAIID/Continuity-1.1.1/README

...есть готовые решение...

Спалил тему: Pokerstars вывод WMZ, etc на VISA 0% или SWIFT + Конверт USD/GBP,etc (net profit $0,5 млрд) (https://minfin.com.ua/blogs/94589307/115366/) Monobank - 50₴ на счет при рег. тут (https://clck.ru/DLX4r) | Номер SIP АТС Москва 7(495) - 0Ꝑ, 8(800) - 800Ꝑ/0Ꝑ (http://goo.gl/XOrCSn)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий