Назад | Перейти на главную страницу

Мой сервер вылетает, и я все проверил: что осталось?

У меня есть экземпляр m1.medium Amazon EC2, на котором запущен Apache и ведется блог Wordpress. В свою очередь, Wordpress работает с базой данных MySQL на другом экземпляре EC2. На сайте Wordpress настроен и работает W3 Total Cache, и большая часть статического контента на сайте обслуживается из CDN. На сайте регулярно проходит небольшой объем трафика, а затем иногда возникают огромные всплески трафика ... и когда эти всплески происходят (более ~ 150 человек заходят на сайт), сайт отключается. Я также могу сделать это каждый раз с помощью некоторых инструментов нагрузочного тестирования.

Вот «верх», когда главный сервер простаивает:

top - 23:21:23 up 103 days, 19:40,  3 users,  load average: 0.91, 0.60, 0.62
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.9%sy,  0.0%ni, 99.1%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3844856k total,  1756268k used,  2088588k free,   150132k buffers
Swap:        0k total,        0k used,        0k free,   833740k cached

Однако, если я провожу несколько нагрузочных тестов для имитации доступа сотен пользователей к статическому графическому файлу (который, очевидно, не запускает Wordpress, PHP или базу данных), все в порядке: нагрузка на сервер остается низкой, графический файл обслуживается быстро, и т.п.

Мои настройки Apache (3,1 ГБ памяти на сервере / ~ 8100 КБ на экземпляр httpd = ~ 400 MaxClients):

    StartServers         5
    MinSpareServers      5
    MaxSpareServers     10
    ServerLimit        400
    MaxClients         400
    MaxRequestsPerChild  0

Итак, судя по всему, проблема связана с тем, когда используются PHP или MySQL.

На сервере MySQL, что бы я ни делал, нагрузка остается практически нулевой, а журнал медленных запросов остается пустым ... так что я думаю, что там все в порядке. Вот мой «топ» для SQL-сервера:

top - 23:20:21 up 103 days, 19:12,  5 users,  load average: 0.08, 0.03, 0.05
Tasks: 115 total,   1 running, 114 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3844856k total,  1076912k used,  2767944k free,   158412k buffers
Swap:        0k total,        0k used,        0k free,   638092k cached

Все это заставляет меня думать, что имеет место один из этих маловероятных сценариев:

Я чувствую, что проверил все, что можно, и все равно не повезло. Что еще я должен проверить? Что еще можно попробовать?

Мы обслуживаем большее количество пользователей в меньшем количестве на EC2 (и использовали тест apache до 1000 одновременных сеансов).

Хорошая новость в том, что вы можете воспроизвести это.

Вы можете многое проверить:

  1. Поместите такой инструмент, как новая реликвия, на оба сервера (для начала используйте бесплатную версию, чтобы регистрировать историю ЦП / памяти). И это в любом случае хорошо для трендов.

  2. Начните с связи между 2 серверами. Сделайте несколько передач файлов и проверьте скорость.

  3. У нас была проблема с wp-cron.php, которая время от времени убивала сервер wordpress. Попробуйте отключить это, перемещая его в cron-вызов каждые несколько минут.

Сообщите о том, что вы нашли, и я могу предложить еще несколько идей.

«Лошадиная сила» m1.medium в данном случае равна одному процессору с нагрузкой 0,91, когда вы показываете вершину. Загрузка .91 означает, что «сейчас 91% работы одного процессора запрашивается процессами». Короче говоря, что-то, кажется, истощает ваш процессор, пока вы простаиваете.

Предполагая, что проблема в этом, я бы сократил количество услуг, которые потребляют ваш процессор. Если это не вариант на вашем основном сервере, я бы сделал ami вашей существующей машины, затем включил бы еще два хоста, тип экземпляра t1.micro, и удостоверился, что на нем работают только минимальные службы (в данном случае apache. ) Тогда круговой перебор DNS адреса вашего сайта. Это втрое увеличит емкость вашего серийного процессора, в то же время увеличивая базовый уровень процессора в 2 раза.