- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте,
не получается выгуглить, как задать ограничение на количество одновременно открытых соединений через сокеты.
Может кто-то уже сталкивался?
Проблема заключается в том, что несколько десятков тысяч открытых соединений выедают все доступную память и, соответственно, вся система вешается.
p.s. debian
Надо просто нанять админа и разобраться
разобраться в чем, простите?
Проблема заключается в том, что несколько десятков тысяч открытых соединений выедают все доступную память и соответственно вся система вешается.
да ладно? как измерял память израсходованную на соединения?
если узнать какая именно память наиболее расходуется, можно предложить меры.
И ты же понимаешь, что это все живые пользователи? возможно, эти меры ухудшат качество сервиса
разобраться в чем, простите?
В том почему израсходуется память и как это всё сделать/оптимизировать
проблема точно локализована.: используется скрипт (много инстансов одного и того же скрипта), который фетчит данные с другого сервера. В первый раз за пол года тот самый сервер сложился в 504 timeout. Собственно вот. Переписывать код, который пользуется сокетами слишком накладно, поэтому хочется решить максимально "дешево", то есть административными методами - ограничением, о котором спрашивалось в первом посте.
Онтарио, ну вот ограничишь соединения, а скрипт перестанет запускаться после этого?
попробуй комбинацию правил в iptables connlimit и ip назначения того сервера.
может быть лучше программно что-то придумать типа глобального таймаута: если пошел 504, то все копии должны остановиться и обождать.
Уточните эти коонекты создают легальные пользователи или это хакер вас атакует?
Если легальные пользователи, то нужно разбираться зачем они это делают.
1) В iptables есть модуль connlimit для ограничения коннектов
2) если это злономеренные действия хакера, то можно автоматически обнаруживать IP автоматически открывающие много коннектов и банить их фаерволом.
коннекты создаются вполне легальными скриптами. Решение на будущее уже написано и отлажено, но нужно дождаться когда встанет целевой сервер, а до этого времени хотелось бы поднять свои сайты, которые не используют эти скрипты.
Уточните эти коонекты создают легальные пользователи или это хакер вас атакует?
Если легальные пользователи, то нужно разбираться зачем они это делают.
1) В iptables есть модуль connlimit для ограничения коннектов
2) если это злономеренные действия хакера, то можно автоматически обнаруживать IP автоматически открывающие много коннектов и банить их фаерволом.
Проблема заключается в том, что несколько десятков тысяч открытых соединений выедают все доступную память и, соответственно, вся система вешается.
Можно настроить, так чтоб не вешалась. При этом скрипты вышедшие за предел дозволенного, будут убиты ОС.
Подойдет?
проблема точно локализована.: используется скрипт (много инстансов одного и того же скрипта), который фетчит данные с другого сервера. В первый раз за пол года тот самый сервер сложился в 504 timeout. Собственно вот. Переписывать код, который пользуется сокетами слишком накладно, поэтому хочется решить максимально "дешево", то есть административными методами - ограничением, о котором спрашивалось в первом посте.
скорее всего вы используете многопоточность, где сокет пихается в каждый поток и из-за этого ОС тратит много ресурсов?
что использует скрипт?
можно попробовать переделать, проанализировать скрипт, многопоточность - тема большая, в книгах очень многое написанного
можно переписать скрипт и использовать:
Событийно ориентированное программирование (событийно-асинхронное программирование)
Событийно-ориентированное программирование применяется в серверных приложениях для решения проблемы масштабирования на 10000 одновременных соединений и более.
В серверах, построенных по модели «один поток на соединение», проблемы с масштабируемостью возникают по следующим причинам:
* слишком велики накладные расходы на структуры данных операционной системы, необходимые для описания одной задачи (сегмент состояния задачи, стек);
* слишком велики накладные расходы на переключение контекстов.
Философской предпосылкой для отказа от потоковой модели серверов может служить высказывание Алана Кокса: «Компьютер — это конечный автомат. Потоковое программирование нужно тем, кто не умеет программировать конечные автоматы»[1].
Серверное приложение при событийно-ориентированном программировании реализуется на системном вызове, получающем события одновременно от многих дескрипторов (мультиплексирование). При обработке событий используются исключительно неблокирующие операции ввода-вывода, чтобы ни один дескриптор не препятствовал обработке событий от других дескрипторов.
на клиенте в браузере, например, если это чат:
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
...есть готовые решение...