LINUX.ORG.RU

Rust приложение раздуло в 20 раз при запуске в Kubernetes/CoreOS

 , , , ,


0

9

Написал два Hello World вебприложения. Одно на Go - самое простое, другое на Rust - на Iron Framework. Оба возвращают одно и то же на любой HTTP запрос.

Запускаю оба сервера в docker.

Go жрет 4 МБ, Rust - 7 MB памяти. Rust по идее должен быть более экономным, но в данном случае в Go используется стандартный сервер, а в Rust - сторонний фреймворк. В любом случае разница - мелочь.

Запускаю все в Kubernetes, тоже в docker. Rust раздувает до 130 МБ (RSS), в Go ничего не поменялось. Думаю, ну наверное Go - статический бинарь без libc, а Rust - зависит на glibc. Ведь дейсвительно, Go запускается в образе Busybox, а Rust - в Ubuntu. Memory sharing показывает малый и там и там, и даже на локалке. Даже если запустить 3 процесса с Rust - все жрут 130 MB. Rust бинарь собирал в Gentoo, запускал на Ubuntu. Оно запороло какую-то оптимизацию?

И тут я сделал третий эксперимент. Я сделал такой-же сервер на Python. Он благополучно выжрал 13 MB в Kubernetes. D 10 раз меньше Rust

Я смотрю Rust готов к продакшну по полной программе. У меня руки не доходят его собрать с Musl, посмотреть.

Идеи, предложения? Ведь Rust таки жрал 7 MB на локальном докере в Gentoo. Почему так раздуло с Ubuntu libc на ядре CoreOS, причем только его одного?

Update: Пересобрал в статический бинарь с Musl и засунул в голый Busybox образ в котором даже каталогов /lib и /usr/lib нету. Локально стало меньше жрать, жрет 1.5MB. В Kubernetes - 130MB все равно.

Solved: Rust cоздавал 64 потока, потому что у него количество потоков - num_cpu * 8. На локальной тачке тоже, но непонятно почему локально не использовалось так много памяти

Solved2: man overcommit

★★★★★

Последнее исправление: vertexua (всего исправлений: 7)
Ответ на: комментарий от redixin

Мне кажется тут странно не как раздуло - мы установили что все по честному, как написано - так и работает. Странно что на домашней Gentoo тоже было 70 потоков, а жрало 10 метров. Какая-то магия в ядре или при сборке?

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

Какая-то магия в ядре или при сборке?

А так это не один и тот же бинарь? Тогда это уже почти не странно.

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

Посмотри, может у тебя в ядре включено UKSM. Если да — оно объединяет одинаковые страницы памяти, может причина на генте в нем.

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

В каких-то случаях рулят. А в каких-то лучше многопоточность. В последней букве LAMP же рулят исключительно микросервисы, т.к. другого не дано. Не раз встречал в блогах идею «threads sucks», причем все блогреры, были из стана «P»

Вон гитхаб на руби написан и ничего

«„Микро"сервисы на Rails?

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 2)

Есть же асинхронная версия hyper поверх tokio. С ней как дела?

Gorthauer ★★★★★
()

гуртовщики мыши

зависит на

А ведь такое даже вживую приходится слышать. Что за злодолбучая калька, чем «зависит от» не устраивает?

rebforce
()
Ответ на: комментарий от makoven

Ты совершенно не понимаешь, в чём суть микросервисов. Микросервисы - это не «давайте с кандачка этот модуль вынесем в отдельный контейнер». Микросервисы - это не микроядра, это не микрокод, и даже в общем случае не код на компилируемых языках. Микросервисы - это архитектура, в которой люди могут побыть девопсами. Ужасными, чудовищными, бесчеловечными девопсами, которыми они на самом деле и являются.

Апач выпустил новый хттпд - мы смеёмся. Апач же выпустил новый зукипер - мы деплоим. Индусы налабали феерический быдлокод на говножабе - мы пакуем в докер и просим ещё. Мы бездушно зальём в облако что угодно, наши предпочтения не основаны на здравом смысле, распределённые сети - наша стихия, мы - истинное лицо клауд-компьютинга.

rebforce
()
Ответ на: комментарий от vertexua

Kernel overcommit на генте наверно включен. Виртуальная память под стек резервируется, но не выделяется пока не понадобится.

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

Почему нет? Вон гитхаб на руби написан

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

Вообще ориентироваться на гигантов рынка в утверждениях XXX написан на YYY - дело неблагодарное. Там такой тяжелый стэк технологий/языков/платформ - что даже инсайдеры не смогут сказать что важнее и какой язык используется больше.

ioway
()
Ответ на: комментарий от rebforce

Теперь это ЗАСМЕЯЛСЯ - НА PHP 5.3 ОСТАЛСЯ тред? )

Микросервисы - это архитектура, в которой люди могут побыть девопсами

Хорошо сказано. но и в рамках одного микросервиса могут понадобиться треды

makoven ★★★★★
()
Последнее исправление: makoven (всего исправлений: 1)
Ответ на: комментарий от ioway

Там такой тяжелый стэк технологий/языков/платформ - что даже инсайдеры не смогут сказать что важнее и какой язык используется больше.

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

rebforce
()
Ответ на: комментарий от makoven

но и в рамках одного микросервиса могут понадобиться треды

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

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

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

Кстати да, и это не проблема энтерпрайза. Просто сложный проект иногда требует компромиссов вроде:
«блин, времени на раздумья нет, ставим корявый костыль, а потом в понедельник/через недельку/в следующем квартале сядем и сделаем красиво»

Время идет и тут через годик натыкаешься на эту «одноглазую буратину», смотришь в список задач, вздыхаешь и проходишь мимо.

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

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

Помнятся истории успеха, как системы ускоряли в 2 раза переписав с Python на Java, а потом через пару лет - с Java на Python. А дело то было не в языке, а в переписывании с учетом опыта и с удалением накопившихся ненужных legacy сценариев. Но истории успеха успевали распиарить как заслуги ЯП

vertexua ★★★★★
() автор топика
Последнее исправление: vertexua (всего исправлений: 1)

Go запускается в образе Busybox

Вот не врубаюсь в такое. Сэкономить 200 мегабайт памяти, зато отрубить у себя возможность интроспекции и траблшутинга. Разве это стоит того?

unlog1c ★★★
()
Последнее исправление: unlog1c (всего исправлений: 1)
Ответ на: комментарий от ioway

Ну так если бы эрланг, хаскель или (в моём случае) ребол стали бы промышленным стандартом вместо нео-ассемблеров типа жабы с пыхом, всем жилось бы гораздо проще.

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

всем жилось бы гораздо проще.

Да ладно? Всё равно появлялись бы «новые модные штуки». Или ты думаешь, что с эрланга/хаскеля/ребола никому не захотелось бы слезать?

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

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

Потому что “There's only really one metric to me for future software development, which is — do you write less code to get the same thing done?”

rebforce
()
Ответ на: комментарий от vertexua

Нет, увы, не связано. Потому что... см. мой коммент сразу выше.

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

Нет, я считаю, что эволюция всегда имеет место

Дык, о том и речь, что облегчение было бы временным. (:

Представить распространение эрланга/хаскеля/ребола ещё могу, а вот постоянно переписывание проектов - нет.

и с ребола можно (и нужно) слезть на Red,

Мне казалось, что Red будет более-менее «совместим»? Ведь они даже учиться языку советую по реболовским мануалам.

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

Ну да, Red будет более-менее совместим (и в синтаксис там вроде никаких новых элементов, кроме макросов, не добавят). Просто ядерное API уже другое. Тот же parse, например, работает совершенно иначе.

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