Тестируем ОС в качестве веб-сервера

в 18:09, , рубрики: Apache, freebsd, linux, веб-сервер, операционные системы, тестирование, метки: , , ,

В посте речь пойдет о тестировании 6 операционных систем в качестве веб-сервера. Оси следующие: Debian, FreeBSD, CentOS, OpenSUSE, Ubuntu, и для потехи Windows 2008 R2 Standard. Почему именно такие, объясню ниже. ПО – стандартный набор: Apache2, MySQL5, PHP5 (далее AMP).

image

Работаю я в веб-студии, имеем несколько облачных серверов на 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 раз.

PHP-код теста

    $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 случайных постов. Каждый пост выбирается отдельным запросом к БД.

PHP-код теста

    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

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js