LINUX.ORG.RU
ФорумAdmin

Запуск нескольких экземпляров приложения


0

1

Ситуация следующая: есть приложение обрабатывающее UDP запросы.
Разработчики, когда его делали, посчитали, что «640К хватит всем», в итоге процесс может обработать максимум 500 тысяч запросов, занимая при этом около 3.5 гигов памяти.
500 тысяч это мало, сервер может потянуть гораздо больше, но лимит на количество соединений жёстко задан в коде.
Ограничение можно обойти запустив несколько экземпляров приложения (выделив другие адреса и порты), вопрос в том, что при запуске приложение проверяет, что другой экземпляр уже не запущен.
Это можно обойти переименовыванием бинарника и правкой стартовых скриптов, но что-то это как-то совсем в лоб и скучно, если я решу запустить их штук 10 сразу
Может есть какой-то стандартный велосипед покрасивее сделать так, чтобы процессы работали изолированно и друг о друге ничего не знали?

★★★★★

Ответ на: комментарий от adriano32

Мм...не уверен что улавливаю мысль - сделать 10 копий каталога приложения и загнать каждую в chroot?

zolden ★★★★★
() автор топика
Ответ на: комментарий от adriano32

Я как-нибудь попробую для эксперимента, но такой вариант сразу кажется сложнее, чем сделать 10 папок с переименованными бинарниками.
Судя по интернетам тут подошло бы нечто вроде LXC контейнеров, но ядро у меня слишком старое, там таких наворотов не поддерживается
Начинаю думать, что к задаче не с той стороны подхожу...

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

велосипед покрасивее

И попробуй поспорить что operating system-level virtualization это некрасиво :)

adriano32 ★★★
()
Ответ на: комментарий от zolden

именно. прога открытая? тогда пропатчить как надо. т.е. поднять/убрать лимит и/или вырезать проверку.

коль нет, копировать тоже не обязательно: ln is your friend ;)

beastie ★★★★★
()

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

поменять? не?

И да:

UDP запросы

максимум 500 тысяч запросов

это как?

drBatty ★★
()

в итоге процесс может обработать максимум 500 тысяч запросов, занимая при этом около 3.5 гигов памяти.

Он течет так, что ли?

baverman ★★★
()

luke робким голоском произносит слово «Дизассемблер».

luke ★★★★★
()

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

fragment
()
Ответ на: комментарий от beastie

Не открытая. Вот такой вот ынтерпрайз :)

zolden ★★★★★
() автор топика
Ответ на: комментарий от visual

Соединения на уровне приложения, а не на транспортном уровне.
Есть протоколы работающие поверх UDP.

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

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

baverman ★★★
()

> Это можно обойти переименовыванием бинарника и правкой стартовых скриптов, но что-то это как-то совсем в лоб и скучно, если я решу запустить их штук 10 сразу

Запускать от разных пользователей. Есть какие-то патчи, не дающие пользователям видеть процессы друг друга. Что в лоб, что по лбу, все едино.

ansky ★★★★★
()
Ответ на: комментарий от zolden

Симлинков на нее понаделай с разными названиями типа binary.1/.2/.3 и запускай, самый простой способ. Остальные способы дадут понижение производительности (виртуализация, патчи и т.п.) или не сработают вовсе (чрут, т.к. прога скорее всего читает /proc на предмет наличия такой же) и так далее.

blind_oracle ★★★★★
()
Ответ на: комментарий от visual

conntrack он штука такая - даже для ICMP свои «соединения» делает...

а если серьезно, то да, к UDP говорить соединения мягко говоря некорректно... если придираться, то я бы сказал, что это «потоки»(flows)

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

некорректно говорить про соединения в рамках UDP на транспортном уровне, поверх же транспорта, где-нибудь на 7м уровне может происходить всё что угодно - соедининения/разъединения/маги/эльфы и прочие чудеса

zolden ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.