Это действительно зависит от вашей рабочей нагрузки.
для части L
- получить много памяти,
- если вы можете перейти более 4 ГБ, перейдите 64 бит.
- для разделов, где ваш контент, журналы и данные MySQL используются параметры монтирования: noatime, nodiratime.
- используйте отдельные физические диски / наборы рейдов, в идеале сохраняйте данные SQL, журналы, контент, который вы обслуживаете - каждый на отдельном шпинделе.
для части A вашего стека - ну, может быть, вы хотите полностью заменить ее на nginx или lighthttpd , или просто оставить Apache для динамического контента и иметь отдельный сервер (например, два или mathopd ) для статического контента. Посмотрите здесь для большего количества вариантов. Если вы собираетесь запустить Apache и другой сервер в одном и том же окне, пригодится второй IP-адрес. Чтобы уменьшить задержку для конечного пользователя, используйте http / 1.1 с keep-alive. Рассмотрите возможность использования CDN для статического контента.
для части M вашей лампы - взгляните на mysqlperformanceblog . от макушки моей головы:
- регистрировать медленные запросы,
- дать достаточно памяти,
- рассмотрите возможность использования innodb.
- если у вас много текста для поиска - используйте sphinx и получите пакетное задание, которое перестраивает индекс.
- рассмотрите возможность уничтожения запросов, которые выполняются дольше, чем XYZ секунд. Лучше расстроить 1% пользователей, чем разрушить весь сайт в часы пик. Но это действительно зависит от того, обрабатываете ли вы кассовые операции или показываете красивые картинки.
- используйте memcached, если можете, для кэширования результатов более «дорогих» SQL-запросов. Не забывайте аннулировать кеш при изменении содержимого SQL. С другой стороны, у меня довольно мало сайтов, где все данные удобно помещаются в памяти, и для этого MySQL работает быстро и не требует дополнительного кэша.
для P
- установить время выполнения для скриптов.
- рассмотрите возможность использования некоторого ускорителя PHP / кэш-кода операции. Я был вполне доволен xcache , но сейчас я им не пользуюсь.
- если у вас интенсивная загрузка процессора - кэшируйте результаты и сохраняйте их в SQL или memcached
Не совсем совет по производительности, но делать резервные копии вне сайта. В самом деле.
Я действительно предлагаю разделить MySQL и Apache / PHP на двух разных машинах.
Например, у меня была одна машина (C2D E6600), которая всегда достигала 2,0 и выше средней нагрузки. Я поставил MySQL на второй компьютер (P4C 3Ghz), и после этого оба средних значения нагрузки не превысили 0,2-0,3. Таким образом, я перешел с очень медленного сайта на быстрый сайт с двумя серверами с большим запасом производительности.
источник
Для части P вы можете рассмотреть кеширование кода операции с помощью APC . Можно также рассмотреть mod_fastcgi с php вместо стандартного mod_php.
источник