Введение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Источник https://habrahabr.ru/company/simbirsoft/blog/271485/ 0) Резюмируем, с какими ситуациями мы сталкиваемся и какие задачи нужно уметь решать: — Подбор сервера под приложение и нагрузку — Оценка возможностей имеющегося сервера — Уметь ответить на вопрос «Почему так медленно?» 1) От чего в большей степени зависит производительность веб-приложения: Скорость работы связки CPU + RAM Скорость дисковой подсистемы Производительность среды исполнения языка (в нашем случае это PHP) Настройка базы данных (у нас это MySQL или PostgreSQL) И, конечно, от самого приложения (от того, какие ресурсы оно использует) Нам нужно иметь четыре инструмента, которые бы могли замерить скорость работы по отдельности: для компонентов сервера: CPU+RAM и Дисковая подсистема для программных компонентов: MySQL и PHP 2) Инструменты измерений sysbench - позволяет быстро получить представление о производительности системы без установки сложных бенчмарков и специальных инструментов github.com/akopytov/sysbench Можно установить из пакетов: apt-get install sysbench Можно скомпилировать: $ ./autogen.sh $ ./configure $ make |
Пример использования теста для CPU:
1 |
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 run - Тест CPU (вычисление двадцати тысяч простых чисел на двух потоках (--num-threads=2)) |
Пример использования теста для HDD:
1 2 3 4 5 6 |
HDD sysbench --test=fileio --file-total-size=70G prepare - Подготовка файлов для теста HDD. !Размер должен заметно превосходить объем оперативной памяти, !чтобы на результат тестирования не влиял кэш операционной системы. sysbench --test=fileio --file-total-size=70G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run - Тест быстродействия HDD sysbench --test=fileio cleanup - очистка ранее созданого мусора для теста. |
Пример использования теста для MYSQL:
1 2 3 4 5 6 7 8 9 |
!Тест проверяет скорость выполнения транзакций MySQL сервера, !причем каждая транзакция состоит как из запросов на чтение, так и на запись. !Очень удобно изменять параметры сервера в my.cnf, перезапускать его и прогонять серию тестов, !— сразу видно, как меняется производительность. !Параметр --oltp-read-only можно установить в значение on, тогда будут выполняться только запросы на чтение, !что позволит оценить скорость работы СУБД в режиме, например, slave-базы. !Самый интересный параметр в отчете — это количество транзакций в секунду (transactions per sec). sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass prepare - Подготовка к тестированию sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=pass --max-time=60 --oltp-read-only=off --max-requests=0 --num-threads=8 run - Запуск теста |
Пример использования теста для PostgreSQL:
1 2 3 4 |
!Ключи команды означают, что 4 клиента будут выполнять 5000 транзакций в 4 потока. В итоге будет выполнено 20000 транзакций. !Самое главное здесь — это tps pgbench -h localhost -U test_user -i -s 100 test - Для создания тестовых данных pgbench -h localhost -U test_user -t 5000 -c 4 -j 4 test - Запуск тестирования |
Пример использования теста для PHP:
1 2 3 4 5 6 7 8 |
!Имеется скрипт !Скрипт выполняет десять тестов, разделенных на три группы: !Первая группа — это общие операции (циклы, rand, создание/удаление объектов) !Вторая группа тестов проверяет строковые функции, implode/explode, вычисление хешей !Третья — работа с массивами !Все измерения выполняются в секундах wget github.com/florinsky/af-php-bench/raw/master/build/phpbm.phar - сам скрипт берем тут php phpbm.phar - запускаем так. |
atop и iostat:
1 2 3 4 5 6 7 8 9 10 |
Для анализа поведения сервера во времени нам помогают atop и iostat. Копим статистику за несколько дней (или больше), после чего можно её просмотреть. atop atop -w /tmp/atop.raw 1 60 - Запись данных в файл atop -r /tmp/atop.raw - Прочитать запись iostat iostat -c 1 - Замер загрузки CPU iostat -xd /dev/sda 1 - Замер загрузки дисковой подсистемы |