Я создал веб-приложение с Symfony 3.1 и PHP 7. На моем собственном компьютере он работает нормально, но на веб-сервере он работает очень медленно. Теперь я хочу знать почему. Не только для того, чтобы это веб-приложение работало быстрее, но и для того, чтобы лучше понять саму программу
Мой собственный компьютер имеет процессор Intel i7 и 8 ГБ оперативной памяти, работающие на Ubuntu 16.10. Сервер имеет два ядра, 4 ГБ оперативной памяти и работает на CentOS 6.
Они различаются как с точки зрения аппаратного, так и программного обеспечения, поэтому я не ожидаю, что они будут абсолютно одинаковыми, но я не понимаю, почему между ними существует огромная разница: инициализация Symfony в 13 раз быстрее, рендеринг Twig шаблоны в 25 раз быстрее.
Я использовал профилировщик Symfony и Blackfire.io, чтобы выяснить, почему мое приложение работает медленно, но это только объясняет производительность самого приложения. Поскольку страница на моем компьютере работает намного быстрее, я должен выяснить, почему приложение медленнее на моем веб-сервере.
я нашел этот блог как проверить производительность диска с помощью fio
, Я обнаружил, что мой компьютер работает примерно в 20 раз лучше, чем сервер (19.9K / 6718 против 1056/375 iops). Это похоже на IOPS это горлышко бутылки.
Одно из решений очень простое: получить сервер с лучшей производительностью iops.
Но как мне узнать, как я могу улучшить свое приложение? Или, может быть, настройки моих веб-серверов? Я установил Opcache и, насколько я могу видеть (используя этот инструмент), работает нормально.
1 — Проверьте, активирован ли opcache и правильно ли он настроен. Увеличить значение opcache.max_accelerated_files
по максимуму, потому что Symfony загружает тонны файлов.
2 — Создайте более богатую карту классов для процесса автозагрузки, запустите эту команду: composer dump-autoload --optimize
,
3 — Получить SSD-диск на вашем сервере. Вам не нужно много места, 128 ГБ достаточно для Symfony, и используйте обычный диск для своих ресурсов, если вам нужно много дополнительного места.
4 — Используйте кэш RAM, например Redis или Memcache. Например, я сократил на 200% время загрузки в Windows после того, как я установил Redis и правильно настроил Doctrine в моем config.yml
файл
orm:
auto_generate_proxy_classes: "%kernel.debug%"auto_mapping: true
metadata_cache_driver:
type: service
id: doctrine.cache
query_cache_driver:
type: service
id: doctrine.cache
result_cache_driver:
type: service
id: doctrine.cache
И служебный файл:
doctrine.cache:
class: Doctrine\Common\Cache\PredisCache
arguments: [ "@redis" ]
Если ничего не работает, получите другой сервер 🙂
Других решений пока нет …