У нас есть VPS (2 ГБ ОЗУ / 2 виртуальных процессора). Это обслуживает форум phpBB на PHP 5.6, Centos 6, Apache 2.2. Однако иногда форум очень медленно отвечает. Используя сетевой браузер Chrome, я обнаружил, что TTFB иногда достигает 30 секунд. Как ни странно, эта проблема есть и у кешированных элементов. (см. скриншот)
Я уже пробовал:
Я пинговал сервер: около 10 мс
установить zend opcache (99,9% совпадений)
Я установил mytop, чтобы проверить, не является ли проблема MySQL, но, насколько я понимаю, MySQL мало что делает.
Запросы: 6.0M qps: 26 Медленно: 4,0 Se / In / Up / De (%): 75/02/08/01 qps сейчас: 2 Медленные qps: 0,0 Потоки: 1 (1/0) 00/00/00 / 00 Эффективность ключа: 99,4% Вход / выход бит / с: 4,4 тыс. / 51,1 тыс. Сейчас вход / выход: 48,4 / 7,5 тыс.
Поскольку это не всегда так, единственный способ воспроизвести эту проблему - это спамить F5, хотя я не уверен, что это действительно воспроизводит проблему. Я мог бы в меньшей степени (2s ttfb) воспроизвести это с той же копией страницы в html (удалена динамическая часть).
http://s21.postimg.org/ql6eywn3b/ttfb.png
У меня включен keepalive (максимум 100, 15 секунд), максимальное количество клиентов - 30. Куда мне дальше идти?
Куда мне идти дальше?
Профилирование. Существуют различные инструменты профилирования PHP. Мне нравится blackfire.io - он легко и четко определит любые узкие места, будь то код PHP, запросы MySQL или их комбинация. Без профилирования вы случайно пробуете что-то в темноте.
Вместо F5ing вы также можете провести нагрузочное тестирование с помощью таких инструментов, как ab, yandex tank, Siege и т. Д.
Еще одна вещь, которую нужно сделать, чтобы убедиться, что эта проблема реальна, - это протестировать на webpagetest.org и повторить тест несколько раз (дополнительные настройки, количество запусков). Или через их API.
Проблема была комбинированной:
VPS был переведен на более качественную систему ввода-вывода, а брандмауэр не был настроен так строго, и проблема была решена. Я также отключил memcached, поскольку MySQL явно не был узким местом)