Как стать автором
Обновить

Комментарии 80

Центось недополучает память, потому что у неё альтернативно одарённое ядро с поддержкой всякой античной хрени. Ядро получает всё, что дали, но из-за странных memblocks, которые резервируются на ранних этапах инициализации ядра, userspace (и основная часть ядра) видит меньше.

Все правильно. Теперь можно отключить файл подкачки.


Выводы такие – добавление памяти улучшает производительность системы, наличие файла подкачки также влияет положительно.


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

Ой, ну вот не надо на те статьи ссылаться !

Их авторы в комментариях под ними так и не смогли объяснить зачем нужен своп когда оперативки хоть попой ешь !

Конечно для случая который рассматривается в этой статье своп отключать не стоит. И да - для экономных/бережливых (или бедных/жадных - тут уж как посмотреть :) ) действительно теория о вреде отключения свопа верна.

Но !

Если оперативки реально много то отключение свопа не только не вредно, но и полезно !

free -h
              total        used        free      shared  buff/cache   available
Mem:            62G        2,9G         44G        2,6G         15G         56G
Swap:            0B          0B          0B

Вот на моём сервере такая ситуация (это под нагрузкой).

И зачем мне своп :) ?

С ТАКИМИ пропорциями использования RAM конечно своп никакой не нужен, это очевидно. Но случай как у вас скорее исключение, чем правило.

А это вы не сталкивались с приложениями, которым нужен разом большой блок памяти, хотя он весь и не используется. Попробуйте, скажем, дамп планеты OpenStreetMap (размером 58 гигабайт в бинарном формате на сегодня) распарсить, узнаете.

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

На здоровой системе должен существовать хотя бы минимальный объём свопа (512MiB-1GiB) чтобы система могла выгрузить страницы памяти, которые используются чрезвычайно редко или не используются совсем (Например, когда приложение забирает небольшую часть памяти во время запуска, но больше к ней не обращается).

не должен. Обсасывали неоднократно. Своп может быть, а может и не быть — от требований зависит

У меня доступ к рабочей станции на RHEL по работе, 64Gb оперативки и такой же своп. И да, во время работы сожрать 30+Gb оперативки - это не фантастика (хотя и не регулярно), а я на этой станции не единственный пользователь работающий одновременно. Я более чем допускаю ситуацию когда съедят всю оперативку и половину свопа, ты всё ещё хочешь посоветовать нашим АСУ-шникам потушить своп?

ты всё ещё хочешь посоветовать нашим АСУ-шникам потушить своп?

Это из серии "А Вы уже перестали пить коньяк по утрам ?"

Я разве писал что хочу что-то советовать вашим АСУ-шникам ?

Простите, но у Вас явные проблемы с восприятием информации изложенной в текстовом виде.

Что в моей фразе Вам непонятно ?:

Вот на моём сервере такая ситуация (это под нагрузкой).

Общего в моём и вашем случае только общее кол-во оперативки. У Вас под нагрузкой "30+Gb оперативки - это не фантастика", а уменя как в приведённом мной вывое команды free -h. И разумеется в вашем случае своп отключать вредно и ненужно, а в моём можно и полезно :)

Так доступно объяснил ?

@ju5tevg3niy Экономия на спичках

@morijndael Запас карман не тянет :)

@N-Cube Да, есть такие приложения и что ? У меня-то на сервере их нет ! Разумеется если Вы в работе используете такое то Вам своп отключать не стоит - но это и так понятно. Ко всему надо с головой подходить. Теоретическое наличие таких приложений в мире (при отсутвии их на сервере в продакшене) не делает утверждение "своп никогда нельзя отключать" верным !

@Evengard Спасибо за понимание :) !

Ну да, это не про рам-бояр. Где же такого мецената найти? Свой проект запустить - у детишек отобрать кусочек хлебушка.

покупаем списанный 1u сервак с 64 гигами RAM
ставим его в колокол
окупается за 12 месяцев на разнице между ценой аренды и ценой колокола своего сервера

Колокол? Я минут пять тупил, что это сокращение от коллокейшен ((((

Посмотрел цены на сервера


1013.9999999999999 руб./месяц

какая прелесть :)

Я не программист и не финансист, но и я знаю, что деньги считают в интегерах и копейками/центами.
А не в формате numeric? У него есть 2 параметра в базах обычно: общее число цифр и число цифр после запятой. В интах хранить и делить (а в финансах надо 6 знаков хранить после запятой, а иногда и больше) не удобно и костыльно.
On Twitter, Michael Dyrynda writes:

️ Never ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever ever store currency as a float in your database

I completely agree with this statement.

Отсюда.
В большинстве же баз есть как раз money, чтобы удобно оперировать с копейками.
Кроме БД еще есть и язык программирования на котором написан сервис и например PHP (хз как с другими языками) имеет проблему с точностью float.
www.php.net/manual/en/language.types.float.php

0.1 * .1 results in 0.010000000000000002
0.7 + .1 results in 0.7999999999999999
1.1 + .1 results in 1.2000000000000002


Сервис может например доставать цену из БД, а НДС (или другие операции) на лету считать.
Это не косяк конкретно PHP. в JS тоже самое, например. И в питоне.
Это проблема уровня процессора, а если быть совсем точным — периодических дробей, которыми в двоичной системе являются многие десятичные дроби.
Например 7/10
Верно, но это причина.
А для разработчика это может быть проблемой. Особенно если он не знает, что такие проблемы бывают и как их решать.

Так пусть разбирается

Нам о таких проблемах ещё в 10 классе на уроке информатики рассказывали. И в универе рассказывали. И на хабре регулярно раз в несколько месяцев статьи об этом появляются. Ещё остались программисты, которые этого не знают?!
свитчеры могут и не знать.
Да и к тому же, рассказывали !== услышали и запомнили
Это особенности стандарта IEEE 754 на представления числе с плавающей точкой. Почему-то люди часто грешат на языки программирования, хотя такое поведение вполне логично.
Да, точно.
Есть так называемые fixed point типы данных, в противоположность floating point они обеспечивают предсказуемость операций, и при этом дают возможность работать с вещественными числами (тот же numeric или decimal). Цитата явно только про float.
О, спасибо, на знал.
NASDAQ использует в некоторых местах интегер перенося запятую на 4 знака влево при вводе/выводе. Это стало известно, когда они приостановили показ котировок при цене за акцию $421 420 так как их система обмена данными может передавать максимум $429 496,7295 которое хранится как $4294967295 что представляет собой максимум (0xFFFFFFFF).

Создадут новую валюту «Баффет», с курсом, привязанным к курсу его акций. Уж точно не будут софт переписывать :D

Уже выкатывают обнову, и не только на нью-йоркской бирже.

Билайн берет при тарифе Москва-Калуга в 10р 19коп за 2 минуты разговора 20р 39коп и не парится.
Девочка на тех поддержке утверждает, что внутри оно считается до 4 знаков после запятой, и повышенная точность приводит вот к таким эффектам.

Ну да, они округляют вниз, но точная цена 10.1999 руб/мин. :D

я ни разу не devops и не особо глубоко разбираюсь в Linux

Спасибо, я понял что мне еще расти и расти в этом смысле хотя бы до вас :)

а я вообще чуть не всплакнул :)

автор, спасибо.

Как видите, это оказалось вполне возможно.

— вывод получился в стиле может увижу динозавра на улице, а может не увижу. Очень странно делать выводы о производительности, не замерив скорость работы: дисковой подсистемы, CPU и RAM. Теоретически, можно в сервер запихать шайтан NVMe у которого скорость будет «максимально приближенная к скорости RAM». В этом случае VPS с 1Гб RAM и свопом на 4 Гб будет чувствовать себя прекрасно. Дополните пост замерами, хоть какие то выводы можно будет сделать.

Дык в скринах видно, что диск у него NVMe, что означает, что добавление свапа стоит где-то вдвое больше по времени относительно добавления памяти(!), естественно при таком диске мониторинг хоть как-то возможен. Вот воткни он на своей ВМке HDD вместо NVMe (SSD при таких нагрузках скорее всего справится с бешеным свапом), сразу будет видно, что он жестко уперся в гиг и никуда не может дальше взлетать, а заодно задержки на запись всей телеметрии на хард будут тормозить его приложение ещё больше.

Даже при заявленных NVMe необходимо выполнять тесты замера производительности, например Sysbench. NVMe не выдается ВМ в монопольный доступ. На том же самом NVMe может сидеть куча ВМ. При проведение любого тестирования, необходимо максимально точно описывать среду в которой проводится тест, для возможности сравнения и оценки. Многие периодические издания проводят тесты CPU,RAM, и т.д. Они описывают условия при которых были получены результаты. В результате, на основание полученных таблиц, любой другой может оценить как будет справляться то железо с его задачей в подобных условиях.
Коротко, для «академической» объективности необходимы замеры скорости работы ВМ без нагрузки.

Юнит тестов нет, приложение запущено просто в докере (а как же кубирнэтис?), деплой просто клоном? Вы серьезно? Кто же без женкинса это делает?

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

Но, в общем, зачёт. Золотое правило выполнено - 90% ресурсов под инфраструктуру, остатки под приложения. Если начнет тормозить, можно просто вбросить в виртуалку памяти... А нет, это слишком сложно, в облаках же просто тип машины меняется. Там автоматом и пару ядер процессора накинется. Главное потом заглянуть в наши 100500 метрик графаны... Ну, ладно ладно, в те две CPU(%) и RAM(free) (остальные нужны просто чтобы дашборд красивый как кокпит самолёта с кнопочками был) и убедится, что оптимизация выполнена успешно и, даже, база данных в контейнере (которой мы конечно не выделяли никаких приоритетов и отдельных ресурсов в кластере) начала что-то там по select'у выводить.

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

Седой и строгий клепатель «настоящих программ» на с++ к нам пожаловал?
Docker на одной «ручной» виртуалке не нужен. 1 ГБ ОЗУ — давайте-ка поставим ещё абстракций. Ну-ну.

К сожалению, я пришел в выводу, что с ним проще, чем без него.
С ним сильно уменьшается сложность инфраструктуры кодом (а она себя окупает даже на виртуалке, когда вы любите эксперименты). С ним упрощается деплоймент.


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

Молодой блондин-маркетолог, понимающий разницу между языками программирования, такими как C++, и средствами для автоматизации развертывания инфраструктуры, как, например, Jenkins или Docker.

Я разве где-то написал, что Jenkins и Docker - это языки программирования? Ладно, я понял, слишком тонкая шутка для нашего цирка, не только лишь каждый понял.

Чет не пойму прикола, объясните популярно: vps о 4 ядрах, 6 Гб оперативки и примерно 10 гб на винте стоит порядка 2-3 тыр в месяц. Набор железа с подобными ттх стоит нуу.. можно собрать в сравнимых ценах за пару-тройку месяцев аренды в пределах порядка. Не проще собрать две таких системы (вторую на резерв) и гонять бесплатно на своем железе, с которым делай что хочешь?? Ну, в разумном кругу задач, ессно.

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

PS TCO включает помимо железок ещё кучу всего. Питание, кондиционирование, гарантию на замену сгоревших компонентов, лицензии, Интернет, ФОТ тех, кто это добро будет мониторить и чинить, если что… Так что в краткосрочной перспективе, или когда нагрузка непонятна (а вдруг выстрелит, и надо будет x10 по железу?) может вполне быть оправданно такие OPEX тащить.
Короче говоря, это выгодно для бизнеса, чтобы прощупать перспективы создания определенного сервиса без лишних затрат? А то непонятно, в наше время даже крупный IT бизнес пользуется услугами датацентров и облаков типа Azure, Amazon и т.д., но недавние выборы в США показали обратную сторону медали, что будет с теми, кто не поддерживает политику партии.
Верно, либо при очень «сезонной» нагрузке, когда надо масштабироваться вверх и потом вниз. Например для ритейла с его сезонными распродажами, праздничными пиками и мёртвыми периодами. Или для разработки, когда вообще непонятно, сколько нужно ресурсов даже в первом приближении. В большинстве остальных случаев на отрезках от 3-х лет и выше выгоднее вкладываться в своё.

Сказки про «всё ушли в облака» хорошо продаются. Но считать надо обязательно. Как аргумент «за» стоит рассматривать требования по SLA инфраструктуры. Если нужны четыре девятки и выше, то начальные вложения могут выступить отсекающим порогом. Упрощённо: на свою квартиру не накопить, и даже на первоначальный взнос для ипотеки не вложиться, остаётся по съемным шариться.

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

Ну теперь понятно. Просто для мелких задач возникали вопросы, что лучше. Электричество — с современными платформами вопрос несложный, ибо 3000+ в месяц за выделенный сервер не сравнить с ценой света, если вменяемая система укладывается ватт в 60 по среднему потреблению, то за свет можно сказать копейки выходит. Интернет в наше время тоже вопрос такой, для сервиса с емкостью ну условно до 1000 пользователей в день хватит и 100 мегабит, при желании можно и больше достать, с внешним IP. UPS — тоже не проблема в наше время. И ты никак не зависишь от политики и воли хостера. Но то, видимо, больше для личного пользования или стартапа выходит удобнее, когда ты контролируешь всё. А для бизнеса, как понимаю, всё наоборот.
Берёте требуемые параметры SLA, считаете, в какую TCO это выльется и решаете.
Пример: UPS тянет 15-30 минут. Если электричество пропало на 1 час, то что выгоднее, потерять клиентов, или заранее купить бензогенератор/дизель? А сколько на цену этого ДГУ облачной аренды можно было бы купить? И что нам в данном конкретном случае интереснее?
Другой вариант. Нужно GPU «на погонять». Что нынче интереснее, арендовать или купить дико переоцененные карточки, чтобы свои были?
В общем, нет общего рецепта. Есть алгоритм принятия решения. А бизнес там или стартап какой — без разницы.
Раз уж пошла речь о минимальных ресурсах, то вместо Prometheus лучше взять VictoriaMetrics.
В остальном написано хорошо, забросил в закладки (тот случай, когда про Loki и Tempo читал, но руки не доходили толком разобраться).

Зачем платить за 1 core 1 ram и использовать какого-то непонятного провайдера для тестов, если в,можно сказать,эталонном AWS это free tier? :)

Вместо Prometheus лучше использовать VictoriaMetrics, который менее требователен к ресурсам и более шустр + умеет нормально долго хранить метрики (если это конечно нужно) и много что ещё. Для некоторых моих проектов полностью заменил Prometheus in place, т.е. Grafana с ним работает как с Prometheus без дополнительных настроек.

вы же в курсе что free tier там только за машинное время инстанса? передача данных, внешний айпишник и еще много чего интересного совсем не бесплатные и могут вылиться в круглую по меркам проекта сумму

Сетевым трафиком для такого теста можно пренебречь.

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

Справедливости ради в aws free tier shared , а не dedicated instance, но там есть способы определения того, как и когда эти ресурсы используются и это точно лучше noname hosting.

А докер он насколько много памяти жрёт? И процессора? Может быть в таки условиях имеет смысл от него отказаться и всё заработает в 100 раз быстрее? Или он практически не заметен?

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

А минимальные и рекомендуемые требования к количеству оперативной памяти тогда что означают? Почему они такие высокие?

Можно заменить на подман и ничего не изменится, удобство сохранится.

>первым делом я установил докер
На виртуальную машину 1 ядро 1Гб — это ошибка разворачивать сервисы в Докер, каждый контейнер отдельная ОС, которая отнимает ценные ресурсы. Да это удобно, ковыряться в совместимости пакетов не нужно, легко обновлять, но теряется производительность.
каждый контейнер отдельная ОС, которая отнимает ценные ресурсы

это не так. Докер — это всего лишь изоляция на базе cgroups & namespaces, что и так есть в ядре линукса. С одной стороны — действительно докер не дает оверхеда поэтому, с другой — есть граничные случаи (сеть/диск), когда снижение производительности может быть значительно (из-за особенностей работы bridge сетей и/или overlayfs)

Вообще пишут, что у Докера околонулевой оверхед по производительности. Docker is nearly identical to native performance and faster than KVM in every category (из отчета IBM примерно 6 летней давности — может конечно что-то изменилось с тех пор).

Вообще пишут, что у Докера околонулевой оверхед по производительности.

Допустим приложение в контейнере работает с той же скоростью, что и без контейнера. Но сам то Докер тоже потребляет ресурсы. Не зря же у него в требованиях минимум 512 мегабайт и рекомендованных 2 гигабайта?

Docker использует механизмы разграничения, которые есть в ядре Linux. Docker все это красиво упаковывает. Сами службы Docker особо не потребляют ресурсы. Возможно пару процентов от CPU съедает Docker, но это максимум. Нюанс использование Docker заключается в лишних экземплярах ПО. Допустим Вы нативно устанавливаете Wordpress. Сервер NGINX на ноде будет в единственном экземпляре.
В случае с Docker, вы можете создать два контейнера с полным набором web-server+php. В результате, то же самое, в Docker будет занимать больше RAM.
В случае с Docker, вы можете создать два контейнера с полным набором web-server+php. В результате, то же самое, в Docker будет занимать больше RAM.

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

У меня Docker прекрасно работает с 1 Гб ОЗУ на плате Banana Pi BPI-M64. На VPS сервере с кучей контейнеров, тоже с 1 Гб ОЗУ прекрасно работает. Можете на локальном компьютере запустить Docker в ВМ с 512 Мб ОЗУ и сами убедиться насколько Docker «тормозит» систему.

Откажитесь от демона Докера и используйте подман. Нет демона, нет оверхеда.

Можно использовать голый runc без докера и крутить контейнеры с буквально нулевым оверхедом :)
Даже за демона «платить» не надо, потому что демона нет.
Мне просто спокойней платить фиксированную сумму и иметь в своем распоряжении все ресурсы, которые дает VPS

берешь и устанавливаешь ОКметер — для одного сервера у них даже бесплатный тариф есть (был?)

Будет немного странно наверно платить $19 в месяц за мониторинг сервера, который стоит ~ $5 в месяц. Да, у них есть триал, но триал обычно лимитирован по времени (не стал уточнять, потому что для этого надо регистрироваться)

довольно странно иметь сервер за 5$ и трястись за него, если ты не готов платить. Ну, простой пример — чтобы нормально замониторить сервер, нужно еще два. Оба с мониторингом, чтобы они еще друг друга мониторили. А вдруг сервер мониторинга накроется? И тогда в случае проблем ты о них не узнаешь.

доброшу альтернативу для маленьких проектов:
1) у облачного мониторинга newrelic есть бесплатный план для небольших сетапов на 100гб данных в месяц (что много, если без логов), умеет в мониторинг, трейсинг и логи
2) netdata и netdata cloud

поддержу — нетдата — прекрасна!

Странный хостинг, предлагают купить абстрактный vCPU, и нигде на первых страницах сайта не понять какой именно. Что там у них за железо, дадут мне целое ядро или кусочек. Ничего не ясно. Лучше бы об этом написали.
У нас виртуальные серверы на базе виртуализации KVM, частота ядра до 3.4 ГГц для серверов на AMD и до 4.5 ГГц для серверов на процессорах Intel. vCPU — это тред, т.е. не полноценное физическое ядро.
Довольно интересная статья, спасибо!

На всякий случай хочу предупредить — prometheus иногда любит жрать много памяти на тяжелых запросах. Если метрик много, хранятся долго, и в графане есть большие дашборды — то случайно выбрав период времени "последний год" можно получить неприятный сюрприз (если оно уже год работает и retention policy разрешает столько хранить). Поэтому рекомендую как минимум настроить квоты на использование памяти, чтобы если что — хотя бы падал только prometheus.

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