Andrey
Вы запускаете контейнер, верно? У вас есть readme.md или что то типа того, может даже bash скрипт написали, что вы ещё пытаетесь усовершенствовать?
Я пытаюсь наоборот упростить. Чтобы не нужна была ридмишка и обвяз скриптовый. Чтобы работало максимально прозрачно. Дали лимит, берем, не дали, живем дальше.
Andrey
О, кажись нашел! cat /sys/fs/cgroup/memory/memory.limit_in_bytes
Maxim
Я пытаюсь наоборот упростить. Чтобы не нужна была ридмишка и обвяз скриптовый. Чтобы работало максимально прозрачно. Дали лимит, берем, не дали, живем дальше.
Вы один параметр указали снаружи, а теперь вы хотите придумать как этот параметр проверить изнутри с помощью сложных алгоритмов в место того что бы так же как первый параметр передать его снаружи, где логика? Зачем так делать?
Andrey
Вы один параметр указали снаружи, а теперь вы хотите придумать как этот параметр проверить изнутри с помощью сложных алгоритмов в место того что бы так же как первый параметр передать его снаружи, где логика? Зачем так делать?
Логика в том что эти лимиты я буду передавать на окружениях. А например те же разрабы знать не знают о них, а если бы знали, не с пользовали бы. Потому что в плане разработки на них почти плевать. Так вот зачем в такой ситуации заставлять всех страдать с передачей этих параметров если им это не надо?
Andrey
Создайте bash скрипт, что вас останавливает?
Зачеееем? Зачем писать скрипт если его можно не писать? Можно просто взять лимиты внутри и не усложнять запуск снаружи.
Andrey
Kiss и все такое.
Maxim
Зачеееем? Зачем писать скрипт если его можно не писать? Можно просто взять лимиты внутри и не усложнять запуск снаружи.
Наверное вы правы и нет никакой необходимости писать bash скрипты, они же сложные и только мешают
Maxim
Kiss и все такое.
Точно, kiss все решает
Maxim
Теперь пишем программу которая внутри увидет что вы снаружи указали 100mb
Andrey
Наверное вы правы и нет никакой необходимости писать bash скрипты, они же сложные и только мешают
Ну ок, давайте сравним 2 решения. Мое: Приложение при запуске читает /sys/fs/cgroup/memory/memory.limit_in_bytes и просто использует его. На этом все. Ваше: Баш скрипт запуска и установки этой переменной снаружи. Еще некий скрипт чтения этой переменной. А еще обязательно обработка ситуации когда лимит таки не передали (например запустили просто руками через docker run) И в завершение еще написать ридми чтобы этим мог воспользоваться каждый.
Maxim
Давайте.
Пришлите скрин где вы выделяете 100mb контейнеру, пожалуйста
Rainbow
В контейнере Java? 😅
Andrey
Но тут пока без кубиков
Да особо без разницы. Хоть в кубе крутить его, хоть без. Мое решение автоматом будет работать везде. Для вашего надо будет думать как в каждом конкретном случае сунуть переменную окружения. Да, это не сложно, но работа все же лишняя.
Andrey
У вас есть пример или как?
Пример чего вам нужен? Как докер запустить?))
Maxim
В контейнере Java? 😅
С java отдельная песня
Maxim
Пример чего вам нужен? Как докер запустить?))
Пример запуска контейнера или сервиса
Rainbow
Мне что-то кажется что он для Java хочет выставлять лимиты тип 90% от контейнера))
Andrey
Как вы выделяете 100mb
Писал же, например docker run --memory 100m или лимиты в кубике, или еще в каком нибудь оркестраторе.
Maxim
Maxim
Мы же вам пытаемся помочь
Andrey
Мне что-то кажется что он для Java хочет выставлять лимиты тип 90% от контейнера))
Смысл тот же, тока nodejs. Фронты написали каку которая жрет все что дают, прям как джава. 🤣
Andrey
Мы же вам пытаемся помочь
Вы уже по моему пытаетесь переубедить меня в том что надо написать скриптов вместо того чтобы юзать нативные инструменты.)
Andrey
У вас есть пример?
Нет, прямо под рукой нет. Но я не вижу разницы от того что будет внутри контейнера. Не важно что пойдет и прочитает файлик с sysfs.
Andrey
https://firstvds.ru/habrahabr/evans_11.pdf
Неее, этим уже пусть разрабы занимаются)
Andrey
У вас есть пример?
Если без примера прям совсем сложно то давайте предположим что есть внутри контейнера некая команда /app --memory-limit, которая ждет значение лимита.
Maxim
Если без примера прям совсем сложно то давайте предположим что есть внутри контейнера некая команда /app --memory-limit, которая ждет значение лимита.
Вы сказали что вы запускаете контейнер командой где четко указываете --memory 100mb, я правильно помню? Это ваш пример?
Maxim
https://firstvds.ru/habrahabr/evans_11.pdf
Коллега, очень ржачная штука!
Andrey
Вы сказали что вы запускаете контейнер командой где четко указываете --memory 100mb, я правильно помню? Это ваш пример?
Нет не правильно. Я просто говорю о том что мне нужно получить лимиты внутри. Не важно как они установлены, руками через docker run, через лимиты k8s или как-то еще. Просто есть ситуация, контейнер с лимитами, их надо сообщить приложению.
Maxim
Вы меня троллите?)))
Я ещё даже не начинал, я сообщил вам что неправильно вас понял и попросил рассказать о задаче которую вы пытаетесь решить
Svyatoslav
клонит в сон, по этому могу что-то не доглядеть в сообщении
Svyatoslav
остальные лимиты ток тут https://docs.docker.com/config/containers/resource_constraints/ + cgroups
Andrey
Так, ребят. У меня 3 часа ночи, но я вроде еще адекватен. Задача, дать приложению в контейнере понять сколько памяти ему можно жрать==какой лимит памяти стоит у контейнера. Я нагуглил решение с чтением /sys/fs/cgroup/memory/memory.limit_in_bytes внутри контейнера. На текущем этапе дискуссии уже просто хочу узнать, есть ли минусы такого решения, подводные камни.
Petr
блин я эти лимиты когда ставил, приложение жестоко тупить начинало
Svyatoslav
по задаче выше уже выданы все нужные ответы и ссылки
Maxim
по задаче выше уже выданы все нужные ответы и ссылки
Мне что то подсказывает что тут поиски оправдания своего решения)
Svyatoslav
))
Andrey
Мне что то подсказывает что тут поиски оправдания своего решения)
Скорее попытки понять, зачем писать скриптовый обвяз если его можно не писать?
Andrey
У вас лишний шаг - "прочитать"
Эммм, как как можно взять параметр не читая его? 🤣🤣
Maxim
Эммм, как как можно взять параметр не читая его? 🤣🤣
Представьте что его там может не оказаться
Maxim
Эммм, как как можно взять параметр не читая его? 🤣🤣
Передайте необходимое вам значение, а не читайте
Andrey
Какие ваши действия?
Перед этим я почитаю доку и что-то мне подсказывает что вероятность этого намного ниже чем забывчивый разраб который не передал env. Или кривой темплейт в оркестраторе.
Maxim
🤦‍♂️
Вы мышкой в консоль тыкаете?
Andrey
sysfs у меня будет всегда в рамках одной версии докера. Переменные окрудения, доп сущность которую надо не забыть везде где деплоишь образ
Andrey
Как у вас с bash?
Да что-ж вы все меня за баш то троллить пытаетесь. 5 строк написать может слепой виндузятник не видевший даже powershell. Суть в том что можно не вымазывать все скриптами, а юзать нативное.
Andrey
Давайте поговорим о bash? Отличная же штуковина
Или любовь к портянкам так сильна что без скриптика уже никуда?
Andrey
А потом этот контейнер поедет в кубер, и оппа, милые сердцу портянки на bash уже некуда и присунуть то, везде новомодный yaml/json. Не страшно?))
Maxim
Или любовь к портянкам так сильна что без скриптика уже никуда?
Вы ни разу не понимаете что такое bash, хоть и пользуетесь этим ежедневно, вы сами себя троллите и глумите тем что не хотите принять эту действительность, вы пользуетесь bash но не понимаете что вы делаете
Andrey
Ладно, на этом закончим. Свою проблему я решил.
Andrey
Maxim
И bash'у!11
Наверное, не могу точно сказать, не уверен просто
Andrey
Наверное, не могу точно сказать, не уверен просто
"...пользуетесь этим ежедневно, вы сами себя троллите и глумите тем что не хотите принять эту действительность, вы пользуетесь bash но не понимаете что вы делаете."