Слайд 2Проблематика
Виртуальный хостинг
Высокая конкуренция за кеш
БД вынесена на отдельный сервер
Выделенный сервер
Высокая конкуренция блокировок
![Проблематика Виртуальный хостинг Высокая конкуренция за кеш БД вынесена на отдельный сервер](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-1.jpg)
в БД
Слайд 3Цель
Увеличение производительности
“Битрикс: Управление сайтом”:
уменьшение количества запросов ядра продукта
оптимизация php кода ядра
уменьшение количества
![Цель Увеличение производительности “Битрикс: Управление сайтом”: уменьшение количества запросов ядра продукта оптимизация](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-2.jpg)
запросов в модулях
оптимизация компонент
Слайд 4Инструменты
xdebug
отладчик, представляющий собой расширение php.
Kcachegrind
инструмент, визуально представляющий информацию, собранную
отладчиком
$DBDebugToFile
переменная, определяемая в файле
![Инструменты xdebug отладчик, представляющий собой расширение php. Kcachegrind инструмент, визуально представляющий информацию,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-3.jpg)
dbconn.php
show_page_exec_time=Y&show_include_exec_time=Y
show_sql_stat=Y
встроенный в продукт инструментарий для профилирования и
отладки запросов к БД
ab
утилита, входящая в состав популярного веб сервера Apache.
Слайд 5Интерактивный отладчик
show_page_exec_time=Y
show_include_exec_time=Y
show_sql_stat=Y
![Интерактивный отладчик show_page_exec_time=Y show_include_exec_time=Y show_sql_stat=Y](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-4.jpg)
Слайд 6Платформа
Intel Celeron 2.5GHz / 512Mb RAM
ОС: Debian sid 2.6.18
БД: Mysql 5.0.24
(стандартная сборка/пакет
![Платформа Intel Celeron 2.5GHz / 512Mb RAM ОС: Debian sid 2.6.18 БД:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-5.jpg)
deb из репозитария)
Веб сервер: Apache 1.3.34
(стандартная сборка/пакет deb из репозитария)
PHP4/PHP5
APC: 3.0.10
(сборка из pecl со всеми опциями по умолчанию)
Битрикс: Управление сайтом
демоверсия в исходных кодах 5.0.9
Слайд 7Процесс оптимизации
Создание нагрузки
Анализ выполнения
Внесение изменений
Повторное создание нагрузки
Сравнение результатов
Принятие решения о внесении изменений
![Процесс оптимизации Создание нагрузки Анализ выполнения Внесение изменений Повторное создание нагрузки Сравнение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-6.jpg)
Слайд 8Создание нагрузки: ab
ab -n 100 -c 5 http://192.168.0.43:4004/about/index.php
This is ApacheBench, Version 2.0.41-dev
![Создание нагрузки: ab ab -n 100 -c 5 http://192.168.0.43:4004/about/index.php This is ApacheBench,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-7.jpg)
<$Revision: 1.141 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.0.43 (be patient).....done
Server Software: Apache/1.3.34
Server Hostname: 192.168.0.43
Server Port: 4004
Document Path: /about/index.php
Document Length: 30308 bytes
Concurrency Level: 5
Time taken for tests: 7.639576 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 3107100 bytes
HTML transferred: 3030800 bytes
Requests per second: 13.09 [#/sec] (mean)
Time per request: 381.979 [ms] (mean)
Time per request: 76.396 [ms] (mean, across all concurrent requests)
Transfer rate: 397.14 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.6 0 10
Processing: 268 374 116.2 349 1053
Waiting: 243 342 106.5 328 963
Total: 268 374 116.1 349 1053
Percentage of the requests served within a certain time (ms)
50% 349
66% 367
75% 382
80% 393
90% 425
95% 490
98% 1041
99% 1053
100% 1053 (longest request)
Слайд 10Процесс оптимизации
Создание нагрузки
Анализ выполнения
Внесение изменений
Повторное создание нагрузки
Сравнение результатов
Принятие решения о внесении изменений
![Процесс оптимизации Создание нагрузки Анализ выполнения Внесение изменений Повторное создание нагрузки Сравнение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-9.jpg)
Слайд 11Уменьшение количества запросов ядра продукта
Статическая страница
Запросы ядра продукта к базе данных
Оптимизация за
![Уменьшение количества запросов ядра продукта Статическая страница Запросы ядра продукта к базе](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-10.jpg)
счет изменения программной логики
Оптимизация за счет кэширования
Слайд 12Управляемый кэш
Объекты кеширования – словарные таблицы
Сброс кеша – происходит автоматически
Настройка – посредством
![Управляемый кэш Объекты кеширования – словарные таблицы Сброс кеша – происходит автоматически](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-11.jpg)
набора констант
Хранение - /bitrix/managed_cache
Ручная очистка – на странице настройки главного модуля
define("CACHED_b_lang", 3600);
define("CACHED_b_option", 3600);
define("CACHED_b_lang_domain", 3600);
define("CACHED_b_site_template", 3600);
define("CACHED_b_event", 3600);
define("CACHED_b_agent", 3660);
define("CACHED_menu", 3600);
define("CACHED_b_file", false);
define("CACHED_b_file_bucket_size", 100);
Слайд 13Агенты и события
Агенты
Отправка событий
Блокировка
Особенности кеширования
b_event
b_agent
![Агенты и события Агенты Отправка событий Блокировка Особенности кеширования b_event b_agent](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-12.jpg)
Слайд 14b_file
Класс Cfile
Таблица b_file
Функция ShowImage
select * from b_file where ID=
define("CACHED_b_file", 3600);
define("CACHED_b_file_bucket_size", 100);
![b_file Класс Cfile Таблица b_file Функция ShowImage select * from b_file where](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-13.jpg)
Слайд 15Управляемый LRU кеш
Кеширование данных с большой вариативностью
Ограничение на объем кеша
![Управляемый LRU кеш Кеширование данных с большой вариативностью Ограничение на объем кеша](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-14.jpg)
Слайд 16Оптимизация php кода
Оценка покрытия кода ядра
Уменьшение числа системных вызовов
Уменьшение числа вызовов функций
Вынесение
![Оптимизация php кода Оценка покрытия кода ядра Уменьшение числа системных вызовов Уменьшение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-15.jpg)
инвариант за пределы цикла
Перестановка выражений в условиях
Кэширование вычислений
Наиболее ресурсоемкие функции переписаны полностью с сохранением бизнес-логики
Слайд 17Преимущество PHP5
Поддержка autoload
Использование прекомпиляторов
![Преимущество PHP5 Поддержка autoload Использование прекомпиляторов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-16.jpg)
Слайд 18Оптимизация модулей
Интернет-магазин
Опросы, голосования
Блоги
Валюты
Техподдержка
Торговый каталог
Реклама, баннеры
![Оптимизация модулей Интернет-магазин Опросы, голосования Блоги Валюты Техподдержка Торговый каталог Реклама, баннеры](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-17.jpg)
Слайд 20Оптимизация модуля статистики
Оптимизация кода
Уменьшение количества запросов
Индексы
Поддержка autoload
![Оптимизация модуля статистики Оптимизация кода Уменьшение количества запросов Индексы Поддержка autoload](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-19.jpg)
Слайд 22Рекомендации разработчикам
Использование интерактивного встроенного отладчика
Отладка на самых ранних стадиях разработки
Нагрузочное тестирование на
![Рекомендации разработчикам Использование интерактивного встроенного отладчика Отладка на самых ранних стадиях разработки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/408811/slide-21.jpg)
реальных объемах
Администрирование базы данных