СоХабр закрыт.

С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.

| сохранено

Выбираем Linux-дистрибутив для VPS в черновиках

Привет, хабрасообщество! Сегодня я был озадачен проблемой выбора дистрибутива для своего дроплета на DigitalOcean и провел небольшое тестирование потребления оперативной памяти, которое может быть вам также полезно. Немного отойдя от темы, хочу сказать, что я давно искал недорогой VPS для собственных нужд и уже было хотел купить его у Hetzner, однако мне посчастливилось наткнуться на DigitalOcean, который предлагает VPS вкупе с шустрым SSD за 5$/месяц.

На данный момент сервис предоставляет на выбор пять дистрибутивов — Ubuntu, CentOS, Debian, Arch Linux, Fedora. Не так давно Arch Linux получил depricated-статус и больше не рекомендуется для создания новых дроплетов. Fedora по понятным причинам отпадает, по крайней мере для меня, как основа для веб-сервера. В итоге мы получаем на выбор три дистрибутива, которые, кстати говоря, являются самыми используемыми на веб-серверах.

Впервые попав на страницу создания дроплета полгода назад, я особо не раздумывал и выбрал CentOS 6.5 x64. Этот выбор был обоснован тем, что AWS (Amazon Web Services) отдает предпочтение CentOS и это мнение является для меня авторитетным. В течении полугода я использовал свой дроплет исключительно как LAMP-хостинг, но подошел момент, когда мне понадобилось запустить стек для Ruby On Rails, которому я отдал свое предпочтение для разработки нового стартапа. Во время установки пакетов система просто ушла в даун, сославшись на недостаток оперативной памяти. Конечно, эту проблему можно было обойти путем подключения swap-файла, но это не наш метод. Я решил сравнить потребление памяти последних версий дистрибутивов на чистых дроплетах с одной открытой ssh-сессией и попробовать переосмыслисть свой выбор для VPS в условиях весьма ограниченного объема ОЗУ (512 MB в моем случае).

Итак, что из этого вышло, смотрите под катом.



CentOS 6.5 x32


[root@centos32 ~]# uname -a
Linux centos32 2.6.32-431.1.2.0.1.el6.i686 #1 SMP Fri Dec 13 11:45:23 UTC 2013 i686 i686 i386 GNU/Linux
[root@centos32 ~]# free
             total       used       free     shared    buffers     cached
Mem:        510888      52104     458784          0       4868      27644
-/+ buffers/cache:      19592     491296
Swap:            0          0          0 


CentOS 6.5 x64


[root@centos64 ~]# uname -a
Linux centos64 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[root@centos64 ~]# free
             total       used       free     shared    buffers     cached
Mem:        502260      75488     426772          0       4464      29224
-/+ buffers/cache:      41800     460460
Swap:            0          0          0


Debian 7.0 x32


root@debian32:~# uname -a
Linux debian32 3.2.0-4-686-pae #1 SMP Debian 3.2.54-2 i686 GNU/Linux
root@debian32:~# free
             total       used       free     shared    buffers     cached
Mem:        514436      53284     461152          0       6024      29796
-/+ buffers/cache:      17464     496972
Swap:            0          0          0


Debian 7.0 x64


root@debian64:~# uname -a
Linux debian64 3.2.0-4-amd64 #1 SMP Debian 3.2.54-2 x86_64 GNU/Linux
root@debian64:~# free
             total       used       free     shared    buffers     cached
Mem:        508936      62376     446560          0       6320      31408
-/+ buffers/cache:      24648     484288
Swap:            0          0          0


Ubuntu 14.04 x32


root@ubuntu32:~# uname -a
Linux ubuntu32 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:08:14 UTC 2014 i686 i686 i686 GNU/Linux
root@ubuntu32:~# free
             total       used       free     shared    buffers     cached
Mem:        507292     193632     313660        312      17808     152596
-/+ buffers/cache:      23228     484064
Swap:            0          0          0
root@ubuntu32:~#


Ubuntu 14.04 x64


root@ubuntu64:~# uname -a
Linux ubuntu64 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
root@ubuntu64:~# free
             total       used       free     shared    buffers     cached
Mem:        501868     279348     222520        312      15428     225604
-/+ buffers/cache:      38316     463552
Swap:            0          0          0


Я не увидел смысла смотреть потребление памяти устаревших версий дистрибутивов, так как являюсь сторонником свежих версий софта из коробки. Из тех результатов, которые были получены, можно сделать несколько выводов:

1. Ubuntu 14.04 является очень прожорливой в плане потребления ОЗУ и поэтому становится сомнительным выбором для дроплета с малым объемом памяти.
2. Версии для x64 потребляют больше памяти на 20% в случае Debian и на 45% в случае CentOS и Ubuntu.

Для себя на этот раз я сделал выбор в пользу 32-битной версии Debian, однако, если рассматривать вариант с более мощным дроплетом, то мой выбор упал бы на Ubuntu x64.

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

комментарии (28)

+22
+23 –1
script88 ,  

Зачем я это прочитал?

+5
q_styler ,  

А я сразу на комментарии пролистал :-P

+2
alexeyanikanov ,   * (был изменён)

для 99% случаев подойдет Ubuntu 12.04 x86_64

0
+2 –2
crashcube ,  

Как быть с тем, что она пустая кушает 280 мб ОЗУ из доступных 512 мб?

–1
KAndy ,  

включить своп

+1
crashcube ,  

SSD хороши, но не настолько, чтобы тягаться с ОЗУ по скорости работы.

+1
KAndy ,  

нас интересует только активно используемая память
какая вам разница что засвопился ssh демон, если ви используете 5% времени

0
+2 –2
artsnz ,   * (был изменён)

То есть домашние ссд мы бережем, а на хосте, своп на ссд юзаем, чтоб жирный хостер поскорее на дисках разорился.

По сабжу, ставлю всегда дебиан х64, проблем с ним нет, на мой взгляд самый адекватный дистриб пингвинов.)

+2
Xlab ,  

Свой SSD в ноуте уже как 3й год убиваю всякими торрентами, виртуалками и тяжеловесными компиляциями всего подряд. А он жив, скотина. ЧЯДНТ?

0
alexeyanikanov ,   * (был изменён)

Да и пусть кушает)
LFS, собранная в точности как описывается в одноименной книге, кушает ~ на 15-20% меньше остальных более-менее популярных дистрибутивов. Но этот прирост не сравним с затраченным временем.
Затраты (как временные, так и финансовые) на оптимизацию потребления памяти, несравнимы с размером платы за VPS.
Советую не заморачиваться по этому поводу

+4
Nicholas ,   * (был изменён)

280мб?
В табличке для Ubuntu 14.04 x64 used: 38316 KiB; free: 452 MiB
Или вы buffers и cached в занятую память записали? Они освобождаются с такой-же скоростью, с которой выделяется свободная память, по сути это и есть свободная память.

+2
al_one ,  

Ваш комментарий должен быть самым первым к этой статье.
Для остальных — ознакомиться с материалом по ссылке: linuxatemyram.com

0
zerkms ,  

А покажите free -m для этого самого случая?

0
Eklykti ,  

-/+ buffers/cache: 38316 463552

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

0
nazarpc ,  

Использовать ZRAM, вот только почему-то в ядрах Digital Ocean он не работает…

+1
Wadik ,   * (был изменён)

однако, если рассматривать вариант с более мощным дроплетом, то мой выбор упал бы на Ubuntu x64
Очень сомнительный выбор, чем аргументируете это решение?

–4
+2 –6
crashcube ,  

Хотел написать в статье, но упустил из виду. Во-первых с ней есть больше опыта, во-вторых очень классная поддержка, куча гайдов, свежие пакеты, и даже nginx теперь есть в официальных репах, мелочь, но приятно :) Опять же, стоит учитывать, что все это в контексте персонального VPS, а не решения для highload (там уже AWS и все на этом).

0
Eklykti ,  

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

+8
rodweb ,  

Разве выбор дистрибутива основывается только на количестве потребляемой ОЗУ? А остальные критерии? Однобоко как-то.

+4
+5 –1
elliadan ,  

CentOS minimal. Case closed.

+5
hostadmin ,  

Что хотел сказать автор?

0
BupycNet ,   * (был изменён)

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

Linux debian64 3.2.0-4-amd64

Linux centos64 2.6.32-431.1.2.0.1.el6.x86_64
А мне таки кажется, что особо нет смысла использовать такие старые ядра. LTS ядро уже 3.12 к слову.
Ну и к слову зря автор арч не протестировал, насколько я помню, ядро и core пакеты в итоге будут жрать в некотором случае даже поменьше debian. Да и как я понимаю, в арче ядро будет поновее.

«Не так давно Arch Linux получил depricated-статус и больше не рекомендуется для создания новых дроплетов. » видимо имеется в виду вшитый образ при установке? Арч же rolling-release. Обновляете и получаете ядро 3.14, даже поновее чем убунта.

К слову если автор так уж заморачивается потреблением памяти — пусть соберет ядро чисто под VPS выдрав из него все лишнее.

И еще кое что, начиная с ядра 3.10 (ЕМНИП) есть zcache. Включаем эту замечательную функцию и в случае если у нас не хватает памяти, она будет сжиматься. Для однотипных процессов апача, возможно сжатие до 2-5 раз. Вот у нас уже не 512 памяти, а где то 2 гига :)

0
grossws ,  

Посмотрите на патчсет, который накладывает redhat. Это «древнее» 2.6.32-431 содержит довольно большое количество фич из современных ядер. В основном, конечно, багфиксы, вещи, связанные с поддержкой виртуализации.

Например, включены все необходимые lxc опции (а они довольно новые):

lxc-checkconfig
Kernel configuration found at /boot/config-2.6.32-431.5.1.el6.x86_64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

--- Control groups ---
Cgroup: enabled
Cgroup namespace: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
0
ivlis ,  

Там ядро грузится не с диска, так что просто не обновишь.

0
ivlis ,  

А отключить не нужные сервисы, чтобы не потребляли память не? Это от дистрибутива не зависит вообще.

То что DO отключает Arch — печаль, надо искать что-то другое теперь

+4
amarao ,  

Я правильно понимаю, что под «прожорливый» подразумевалась цифра Used " 279348"? Если так, то вам бы на хабр не писать в ближайшие так полгодика. По крайней мере в разделе «статьи». Какое вам дело сколько файлового кеша использовано при загрузке?

Ужасно, ужасно.

(hint: смотреть надо на вторую строчку — где использованная память без учёта кеша и буфферов).

0
cyreex ,  

Free — не самый лучший способ оценить использование памяти. Тем более для статьи такого типа.

cat /proc/meminfo

Анализа запущенных процессов так же нет. В общем это не статья. Это раздутая заметка в twitter.

0
svd71 ,  

Для себя на этот раз я сделал выбор в пользу 32-битной версии Debian, однако, если рассматривать вариант с более мощным дроплетом, то мой выбор упал бы на Ubuntu x64.

А чем обусловлен выбор прожорливой убунту?