Советы по производительности сервера LAMP

Какие советы по производительности могут быть предложены кому-то, работающему с сервером LAMP?

В том случае, если что-то относится к дистрибутиву, я нацеливаюсь на Debian

3 ответа

Решение

Это действительно зависит от вашей рабочей нагрузки.

  • для части L

    • получить много памяти,
    • если вы можете перейти более 4 ГБ, перейдите 64 бит.
    • для разделов, где ваш контент, журналы и данные MySQL используются параметры монтирования: noatime, nodiratime.
    • используйте отдельные физические диски / наборы рейдов, в идеале сохраняйте данные SQL, журналы, контент, который вы обслуживаете - каждый на отдельном шпинделе.
  • для части A вашего стека - ну, может быть, вы хотите полностью заменить ее на nginx или lighthttpd, или просто оставить Apache для динамического содержимого и иметь отдельный сервер (например, два или mathopd) для статического содержимого. Посмотрите здесь для большего количества вариантов. Если вы собираетесь запустить Apache и другой сервер в одном и том же окне, пригодится второй IP-адрес. Чтобы уменьшить задержку для конечного пользователя, используйте http/1.1 с keep-alive. Подумайте об использовании CDN для статического контента.

  • для части M вашей лампы - взгляните на http://mysqlperformanceblog.com/. от макушки моей головы:

    • регистрировать медленные запросы,
    • дать достаточно памяти,
    • рассмотреть возможность использования 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.

Другие вопросы по тегам