Оптимизируйте apache/php/mysql, работающий на VPS для большой нагрузки

Взгляд на использование SQL Server Profiler и монитора производительности Windows Server прослеживает вместе. SQL Server 2005 позволяет Вам взаимосвязывать эти два файла вместе. Эта статья описывает, как сделать это хорошо.
В дополнение к этому, Если Вы используете имя приложения = параметр в Вашей строке подключения SQL Server, можно получить, это в Профилировщике прослеживает & используйте это в качестве способа передать информацию из Вашего приложения asp.net/asp как то, какое имя файла выполняется.

17
задан 20 June 2009 в 17:08
6 ответов

Для PHP существует 2 важных вещи, которые увеличат способность:

  1. Усовершенствованное кэширование PHP (APC), как был упомянут. Это - то, что мы используем в Yahoo!. Существуют другие подобные проекты, но этот - ребенок Rasmus.
  2. FastCGI вместо mod_php. Существуют дебаты по этой проблеме, поскольку mod_php является обычно самым быстрым. Однако я предположил бы, что у Вас есть единственный сервер Apache, поставляя и динамичный PHP довольный и статические активы (JS, CSS, флэш-память, изображения, PDFs, и т.д.). Запросы на те статические активы не должны использовать столько же памяти, но потому что PHP является модулем, это находится в каждом потоке Apache.

Для Apache:

  1. Используйте рабочего MPM
  2. Включите KeepAlive

Можно также пойти, насколько рассмотреть переключение от Apache до Lighttpd или Nginx. Я люблю Apache. Я использую дурака из многих из, его - расширенные функции. Я принимаю его издержки, потому что мне нужно в том, что они предлагают. Для общего стека LAMP это - больше, чем необходимо и трата ресурсов.

Для MySQL:

  1. Ваши усилия по оптимизации будут выплата 10 сгибов, когда потрачено анализируя и исправляя запросы, вместо того, чтобы настроить Ваши значения my.cnf. Я не говорю, что не важно получить Ваше кэширование, соединения, и т.д. исправить..., но для большинства людей это - только 9% проблемы.
  2. Во время Вашего QA включите вход в систему общего запроса Ваш staging/dev mysqld для получения всех отправленных запросов. (Не делайте этого на своем производстве mysql сервер!)
  3. Используйте ОБЪЯСНЯЮТ для анализа запросов. Особенно, если Вы будете использовать платформу с ORM (краткие обзоры далеко DB, и мешает Вам писать свой собственный SQL), то необходимо будет вычистить посторонние СОЕДИНЕНИЯ, ВЫБИРАЕТ без оператора Where, ПОРЯДОК BYs, которые вызывают 'использование filesort' и запросы, которые не используют индексов.
  4. Если Вы используете MySQL 5.1, обманывают профилировщика запроса.

Другие инструменты достойные рассмотрения являются mk-visual-explain

Я процитировал 10 больших ссылок. Эти вещи должны получить Вас гул. Сообщает нам, как это складывается.

18
ответ дан 2 December 2019 в 20:29

Несколько вещей приходят на ум.

Кэш кода операции всегда является хорошей идеей. Я предпочитаю http://eaccelerator.net/ по APC. Если Вы не разрабатывали с APC, по пути пытаясь включить его, является почти всегда болезненным. Eaccelerator, в то время как не, поскольку воображение просто, кажется, работает.

Обратный прокси является также хорошей идеей, но необходимо следить за Использованием оперативной памяти. Я нахожу, что Apache 2.2 с mpm-рабочим поднимает изрядное количество RAM на своем собственном. В Вашем случае я рекомендовал бы что-то легче как Nginx и выполнил бы Apache с PHP как FASTCGI или просто оставил бы его согласно процессу. Идея с использованием Лака, Сквида, Nginx, и т.д. состоит в том, чтобы сделать, чтобы они служили статическому содержанию, соглашению с пользовательскими соединениями, и только передали запросы PHP Apache, который Вы рассматриваете как сервер приложений.

При выполнении довольно последней версии Mysql 5.1 как по крайней мере 5.1.24 у Вас теперь есть доступ к sub вторым медленным журналам. Я запустил бы long_query_time в 1 или 2 и затем понизил бы его до 0,5, поскольку Вы разобрались с действительно длинными. Существует также много общей информации о настройке о сети для Mysql, но у Вас нет RAM, чтобы сделать много. Вы увеличили какой-либо то, чтобы сходить со значения по умолчанию? Большая часть значения по умолчанию my.cnf файлы настроена для использования приблизительно 64 МБ RAM. Это очень наименьшее я повысил бы key_buffer с 16 МБ до 64 МБ.

Дополнительно Вы используете таблицы Myisam или Innodb? Если Вы сохраните сессию в DB, то Вы захотите изменить таблицу сессии на Innodb (или сделать это cookie вместо этого), а не оставите это таблицей Mysiam, которая действительно представляет в виде таблицы блокировку уровня, а не блокировку уровня строки. В основном любая таблица, которая является большим количеством больше чем 20%-й записи к 80%-м чтениям, является кандидатом на перемещение в Innodb. Помните, что необходимо будет сбалансировать сумму RAM между таблицами Myisam и таблицами Innodb, потому что буферы для каждого настроены отдельно.

И наконец еще 512 МБ RAM имели бы большое значение в Вашей установке или даже еще 512 МБ VPS для выполнения Mysql в том, если это более дешево или примерно та же цена. Я на самом деле склонился бы к второму экземпляру, потому что это удвоит доступный диск IO. Одной из проблем с серверами VPS является Ваш IO, не защищен от других людей на том же физическом сервере.

Хм мое сообщение весь вид легкомысленных, но дает Вам много мест для взгляда.Удачи.

5
ответ дан 2 December 2019 в 20:29
  • Используйте кэш кода операции для php как apc.
  • Используйте http акселератор как сквид или лак.
2
ответ дан 2 December 2019 в 20:29

В низкой ситуации с памятью (512 МБ является низким, для сервера интенсивного трафика) это достойно рассмотрения Ваш выбор механизма DB и веб-сервера.

Lighttp легче из поля, чем Apache может обычно делаться после большой тонкой настройки, и существуют более легкие опции, чем это даже. Это, конечно, не возможно, если существуют функции Apache, Вы зависите от этого, не поддержка в других серверах.

sqlite намного более труден, чем MySQL, и быстрее при многих условиях также. Проверьте, поддерживает ли механизм, который Вы используете, это, а также и если он действительно дает ему попытку.

Другая опция, легкая опция, состоит в том, чтобы получить больше RAM в VM, если можно предоставить его.

1
ответ дан 2 December 2019 в 20:29

Переместите свои файлы сессии PHP в tmpfs, используйте APC (или другой) и удалите все модули PHP, в которых Вы не нуждаетесь. Удалите все модули Apache, в которых Вы не нуждаетесь/используете.

Создать tmpfs (каталог в RAM!)

mkdir /tmpfs; chmod 777 /tmpfs
mount -t tmpfs -o size=256M tmpfs /tmpfs

В/etc/fstab добавляют строку ниже для создания его на перезагрузке!

tmpfs     /tmpfs    tmpfs   size=256m,mode=0777    0       0

В /etc/apache2/php.ini корректируются для хранения сессий в RAM (tmpfs)!

session.save_handler = files
session.save_path = "/tmpfs"

Примечание: С Вашими файлами PHP И файлами сессии в RAM Вы едва касаетесь диска!

Используйте expires_module в апаче, таким образом, браузеры будут кэшировать большинство вещей.

ExpiresActive On
ExpiresDefault "access plus 90 days"
ExpiresByType image/gif "access plus 90 days"
ExpiresByType image/ico "access plus 90 days"
ExpiresByType image/png "access plus 90 days"
ExpiresByType image/jpeg "access plus 90 days"
ExpiresByType image/x-icon "access plus 90 days"
ExpiresByType text/css "Access plus 90 days"
ExpiresByType text/html "Access plus 90 days"
ExpiresByType application/x-shockwave-flash "Access plus 90 days"
ExpiresByType application/x-javascript "Access plus 90 days"

Не используйте .htaccess файлы! Вместо этого трудно кодируйте их в vhost файле конфигурации! Решительно устранит/уменьшит дисковые проверки на все запросы HTTP... это действительно складывает.

Options FollowSymLinks 
AllowOverride None

Пример .htaccess используется в Вашем vhost.conf файле...

<Directory /home/user/www/site.com/secure>
    Order Allow,Deny
    Deny from All
</Directory>
6
ответ дан 2 December 2019 в 20:29

Вне больших предложений здесь, нужно отметить, что все VPS' не создаются равные. По моему опыту, PHP оказался тяжелым ЦП.

Сравнительный тест AB Wordpress (ab-n 500-c 25 http://domain.com/index.php) nginx/apc/phpfpm/mysql (локального) на EC2, приведшем к ~2 запросам/секунда на их начальном уровне "2 ГБ RAM/1, Вычисляет Сервер Единицы".

Тот же Контрольный прогон против того же точного стека (развернутый сценарием на идентичной ОС) на 512 МБ Rackspace Cloudserver возвращает ~80 req/second. Так 4x Меньше поршня, 40x производительность в этом элементарном эксперименте.

Просмотр вершины во время AB, Вы видите, что EC2 просто не мог обработать параллелизм, и сразу поразит 100%-ю загрузку ЦП и запрется. Просмотр вершины на Сервере 512 МБ (виртуализировал четырехъядерный ЦП) во время того же сравнительного теста, ядра поразит Загрузку на ~60% и гладко обработает сравнительный тест.

VPS's чрезвычайно легко вращать и выключить без обязательства, не повреждает помещать инфраструктуру, в которой находится Ваш VM/VPS к тесту!

РЕДАКТИРОВАНИЕ 1: Кроме того, "Высокий ЦП EC2" Маленький Экземпляр только смог привести к ~10/req секунде с ЦП, все еще являющимся узким местом. Мое заключение состояло в том, что Вы жертвуете производительностью за устойчивость/устойчивость с EC2, и существует, конечно, много примеров использования, которые призывают к такой среде.

1
ответ дан 2 December 2019 в 20:29

Теги

Похожие вопросы