В посте речь пойдет о тестировании 6 операционных систем в качестве веб-сервера. Оси следующие: Debian, FreeBSD, CentOS, OpenSUSE, Ubuntu, и для потехи Windows 2008 R2 Standard. Почему именно такие, объясню ниже. ПО – стандартный набор: Apache2, MySQL5, PHP5 (далее AMP).
Работаю я в веб-студии, имеем несколько облачных серверов на Selectel’e, все они работают на Debian. Но почему именно он? Не знаю, возможно, эта ось более популярна, да и изначально опыт работы был только с ней. Сейчас появилась нужда еще в 1 облачном сервере и в локальном сервере. Данная ситуация и побудила меня произвести тестирование на предмет скорости и требовательности к ресурсам. Может есть что то лучшее?
Описание тестов. Все операционные системы устанавливались в VirtualBox, в качестве клиента использовался Firefox на оси-хосте. Все операционные системы 32-битные, устанавливались последних стабильных версий «из коробки», без тюнинга. Версии AMP’а примерно все одинаковые, устанавливались последние версии стандартными менеджерами пакетов (linux), из портов (bsd) и win32 версии для Windows (сам он x64). Все тесты мои собственные, стандартных решений не применял, мне было интересно изготовить их самому, надеюсь, они вам понравятся. Каждый тест производился по 5 раз, приведены только средние значения.
Возвращаюсь к вопросу, почему выбраны именно эти оси. А потому что из выбранных линуксов Selectel предлагает именно их, к FreeBSD я давно присматриваюсь, может на локальный сервер установлю, а Windows я добавил просто для сравнения, ничего более. Может кто-то возразит, что все линуксы одинаково работают! А вот и нет, переходим к тестированию.
Комплексные тесты
Самые интересные, на мой взгляд, тесты. На сервер устанавливается wordpress, в первый же пост загружаются 5 стандартных windows-картинок через админку.
Затем в футер странички добавляется js-код, который по window.onload перезагружает страницу. Суть теста заключается в подсчете времени загрузок 50 страниц. Перезагрузка происходит 2 вариантами: location.href=’/’ и location.reload(true). Когда выставляем параметр forceGet в true, браузер перезагружает все ресурсы на страничке (картинки, стили, скрипты). Тест через file_get_contents: на ОС-хосте выполняется php-скрипт, который загружает 50 страниц с тестируемой машины посредством функции file_get_contents.
Для всех тестов приведу по 2 гистограммы: для результатов со 128 мб оперативной памяти, и с 256 мб. Сделал это потому, как оказалось не всем операционкам хватило 128 мб для обслуживания 1 клиента. Например, CentOS вообще зависала при варианте через file_fet_contents (реальная цифра не 160 секунд, а бесконечность, я не дождался окончания теста). В довесок к тестам с 128 мб добавил результаты работы монстра современного «осестроения» Windows 2008 R2. У него размеры RAM сделал 512 мб и не менял.
Как видим, все примерно выровнялись, однако, CentOS опять подкачал в тесте с reload: 2 теста выполнив по 13-15 секунд, а остальные 3 скатившись до 20-21.
В данном тесте победителями оказались FreeBSD и Ubuntu, легко справившись с нагрузкой и при 128 мб.
Тесты работы с БД
В данном разделе 2 теста: запись и чтение.
Запись. Из куска текста формируем случайный текст (длина его постоянна) и записываем текст в базу. Была взята таблица wp_posts. Операции повторяются 5000 раз.
$lib = "bla bla bla";
$q = "delete from wp_posts where id > 10";
mysql_query($q);
for ($j = 0; $j < 5000; $j++) {
$content = "";
for ($i = 0; $i < 100; $i++) {
$start = rand(0, strlen($lib));
$content .= substr($lib, $start, 15);
}
$content = mysql_escape_string($content);
$start = rand(0, strlen($lib));
$title = substr($lib, $start, 15);
$title = mysql_escape_string($title);
$q = "
insert into wp_posts set
post_content = '$content',
post_title = '$title',
…
";
mysql_query($q);
}
Чтение. В таблице wp_posts содержится 300 постов ранее сгенерированных. Тест заключается в выборке 50 случайных постов. Каждый пост выбирается отдельным запросом к БД.
for($i=0;$i<50;$i++){
$q = "select * from wp_posts where id = (select id from wp_posts t order by rand() limit 1)";
$r = mysql_query($q);
$ar = mysql_fetch_assoc($r);
}
Результат со 128 мб. Обратите внимание на OpenSUSE и Ubuntu: скорость записи очень медленная. Я попытался выяснить причину: сравнивал конфиги MySQL на Debian и Ubuntu, оказались абсолютно идентичные. Решил глянуть на файловую систему: на Debian ext3, на Ubuntu ext4, но на CentOS опять же ext4. Дело не в файловой системе. Оказалось что на OpenSUSE и Ubuntu установлена MySQL 5.5.xx, а на всех остальных 5.1.xx.
Почти все отработали немного быстрее. Хотелось бы отметить то, что результаты довольно точные, погрешность примерно 0.05 секунды. В данных тестах победителя выявить не удалось, результаты примерно одинаковы, не считая результатов записи в MySQL 5.5. Все же номинальных победителей определим: Запись CentOS, чтение OpenSUSE.
Итого
Подводя итоги приведу таблицу рейтинга по каждому тесту.
Итак, в версии 128мб победила Ubuntu, хотя FreeBSD судя по относительным цифрам выглядел тоже очень неплохо. В версии 256мб побеждает FreeBSD, OpenSUSE и Ubuntu тоже держатся молодцом.
P.S.
Я свой выбор сделал: FreeBSD на локальный сервер, Ubuntu на облачный (хотя, наверное, везде предпочтительнее использовать одни ОС и ПО). Надеюсь, не породил своим постом вечных холиваров, что лучше, что хуже. Повторюсь, все устанавливалось «из коробки», как есть. Возможно, если заняться тюнингом, лидеры изменятся.
P.P.S.
Скажу пару слов про особенности/удобство тестируемых систем.
FreeBSD оказался не таким уж сложным, как мне всегда казалось. После кое-какого опыта работы с линуксом у меня проблем не возникло. Большое отличие в способе установки ПО – порты и компиляция из исходников.
CentOS поразил меня тем, что не захотел вообще устанавливаться на машине с RAM менее 512 мб, для установки пришлось увеличить. В целом CentOS мне показался очень простым в работе, как и Ubuntu или Debian.
OpenSUSE – я не сразу нашел вариант установки как сервер (без иксов). Говоря об этой оси, нельзя не упомянуть о Yast. Это крутая утилита, помимо того, что это менеджер пакетов, через нее можно настраивать практически все (я настраивал firewall, открывал 80 порт). Yast даже в консольном режиме отображается как графический интерфейс, с меню, кнопками, списками и т.д. Очень интересно, мне понравилось.
Ubuntu – вот пример простоты установки. Мне даже AMP не пришлось устанавливать, при установке система сама спрашивает какое ПО установить на сервер: sshd, веб-сервер, smbd, еще что-то, не запомнил.
Кстати, в результате проделанных манипуляций у меня родились 5 руководств по установке и настройке AMP на всех вышеперечисленных системах (кроме Win). Могу поделиться.
Автор: DenisTheGreat