Как ускорить загрузку 1 или нескольких (не всех) страниц, чтобы отдавалась без друпала

Главные вкладки

Аватар пользователя andribas74 andribas74 6 ноября 2012 в 15:48

Здравствуйте!
подскажите, пожалуйста, что можно сделать:
без нагрузки сайт работает нормально, но стоит одной новости стрельнуть, как валит толпа народа и сайт не падает, но вместо 1 секунды получается 16 сек на загрузку, процессор получает 93% нагрузки, в топе висит куча процессов php-fpm.
как-то можно эту одну новость конкретно закешировать, чтобы она как-то сразу отдавалась?
сейчас ситуация такая:
Cpu(s): 19.2%us, 1.7%sy, 0.0%ni, 78.8%id, 0.2%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 12326976k total, 5240516k used, 7086460k free, 123820k buffers

на что хоть посмотреть, что сделать можно?
новость про отставку сердюкова, обычный пресс-релиз.

тестирование прямо на серваке
ab -n 100 -c 100 url
показывает:
Concurrency Level: 100
Time taken for tests: 8.756 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 7478700 bytes
HTML transferred: 7430500 bytes
Requests per second: 11.42 [#/sec] (mean)
Time per request: 8755.606 [ms] (mean)
Time per request: 87.556 [ms] (mean, across all concurrent requests)

еще по всякому попробовал, 1 запрос быстро выполняется - меньше секунды, что посоветуете посмотреть?
пользователи все анонимы, стоит memcached, apc и т.д.
сайт не вешается - просто еле тащит - как ускорить можно?

Комментарии

Аватар пользователя chilic chilic 6 ноября 2012 в 16:01

"kalabro" wrote:

ой, ну положите в fastcgi_cache секунд на 30 — для анонимов всё летать будет


Тоже вариант Smile
Но у человека есть мэмкэш, есть подозрение что он просто не работает Smile

Аватар пользователя andribas74 andribas74 6 ноября 2012 в 16:03

"kalabro" wrote:
ой, ну положите в fastcgi_cache секунд на 30 — для анонимов всё летать будет

вроде отлично должно помочь, а есть пример такой настройки для друпала?

Аватар пользователя andribas74 andribas74 6 ноября 2012 в 16:05

"chilic" wrote:
Но у человека есть мэмкэш, есть подозрение что он просто не работает :)

мемкеш для cache_* таблиц, страницы туда не ложатся

Аватар пользователя andribas74 andribas74 6 ноября 2012 в 17:50

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

Странно ибо по утилизации порта вы занимали 20% от всей полосы.
Если мы можем ещё чем нибудь помочь, будем рады.

странно, откуда возьмется 20% полосы при такой нагрузке? понятно, что майл.ру не самая адекватная статистика, и картинок на той странице немного вроде. cacti, к сожалению, отключена была на сервере - она после обновления заглючила, не перенастроил. т.е. нагрузка думаю была побольше чем на графике в несколько раз.

я хотел узнать все-таки про cache_page - какая практика - его кешируют или нет, когда настраивали пару лет назад, там всякие глюки вылезали с аяксом, с капчей, еще с какими-то модулями совместимость плохая была - на production его используют или нет?

сейчас кешируется так:

<?php$conf = array(
  'cache_inc' => './sites/all/modules/memcache/memcache.inc',
  'session_inc' => './sites/all/modules/memcache/memcache-session.inc',
  'memcache_servers' => array(
    'localhost:11211' => 'default',
    'localhost:11212' => 'block',
    'localhost:11213' => 'content',
    'localhost:11214' => 'filter',
    'localhost:11215' => 'form',
    'localhost:11216' => 'menu',
    'localhost:11217' => 'session',
    'localhost:11218' => 'users',
  ),
  'memcache_bins' => array(
    'cache' => 'default',
    'cache_block' => 'block',
    'cache_content' => 'content',
    'cache_filter' => 'filter',
    'cache_form' => 'form',
    'cache_menu' => 'menu',
    'session' => 'session',
    'users' => 'users',
  ),
);
?>

я правильно понимаю, чтобы включить этот cache_page, мне надо включить кеш страницы в нормальный (сейчас отключено) и допустим еще один инстанс мемкеша создать? (их много, но там по 16-32 метров всего, просто, чтоб друг другу не мешали, - сколько для страниц объем лучше сделать?)

Аватар пользователя chilic chilic 6 ноября 2012 в 18:21

Кэш страниц нужен, каптча просто его отключает (попал на этот косяк, думал чёэто у меня кэш не работает).

Я делал так:

  1. отключал мэмкэш
  2. смотрел размер таблиц в БД
  3. заводил инстансы мэмкэша из расчёта размер таблицы в БД + запас
  4. запускал мэмкэш
Аватар пользователя andribas74 andribas74 6 ноября 2012 в 18:36

"chilic" wrote:
Я делал так:

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

с users не помню как было, но вроде работает), наверно вы правы, лишнее это.

ну у вас с cache_pages норм все работает?

cache_content:

echo stats | nc 127.0.0.1 11213 | grep get
STAT cmd_get 19110848
STAT get_hits 10178090
STAT get_misses 8932758

странно, получается пополам - или долго не живет, или места мало?
сейчас на 75% занят.

Аватар пользователя chilic chilic 6 ноября 2012 в 18:40

Когда капчу убрал со всех страниц, заработал cache_page

'localhost:11218' => 'cache_page',
'cache_page' => 'cache_page',

Ещё ошибочка нашлась: sessions

Аватар пользователя andribas74 andribas74 6 ноября 2012 в 18:44

"chilic" wrote:
Ещё ошибочка нашлась: sessions

у вас может версия другая?
я где-то на д.орг это подсмотрел, все работает и users там тоже в кеш пихают, не знаю, правда - почему. вот например - http://drupal.org/node/1181968

Аватар пользователя andribas74 andribas74 7 ноября 2012 в 13:13

всем спасибо за советы!
добавил cache_page и стало летать.
пока потестирую - добавил модуль cacheexclude
и в модуле поменял правило - не кешировать ничего, а кешировать только новости (по паттерну news/*)
вроде работает норм.

Аватар пользователя andribas74 andribas74 15 февраля 2013 в 11:12

Сегодня метеорит возле челябинска упал, блин((

полчаса был забит канал с пиком до 80 мегабит, админка еле грузилась, нагрузка сервера доходила до 76%. все что написано выше было сделано, сейчас пик спал - летает как обычно. что еще может помочь в пик нагрузки?

Аватар пользователя andribas74 andribas74 15 февраля 2013 в 14:16

убрал РЕШЕНО из этой темы, т.к. проблема не решена, подключили второй канал 100 мегабит, не совсем понял правда как в ДНС прописать 2 ip, чтобы равномерно нагрузка шла, но откуда нагрузка на проц в 80% была в пике? если включен memcached и все работает? еще можт картинки куда-нить на cdn закинуть, есть простой способ, или только сложные?

Аватар пользователя chilic chilic 15 февраля 2013 в 14:20

Для двух каналов Вам нужен балансировщик.

"andribas74" wrote:
нагрузка на проц в 80%

Что за проц? ну и что вы хотите при 80 мегабитах.

memcached - не понацея и тоже потребляет ресурсы.

Аватар пользователя andribas74 andribas74 15 февраля 2013 в 14:36

проц 2 xeon e5620.

мне про 2 канала объяснили, что если в днс прописать 2 ip, то выбирается случайным образом, не обязательно равномерным на 2 канала. гигабит на 2 дня не подключишь, только на месяц, а он 40 000 в месяц стоит(( - но затык раньше начался чем сеть забилась, т.к. 100 мегабит датацентр гарантирует необрезанный канал

nginx честно отдавал 502 ошибку, немного подумав, наверное php-fpm не успевал за нагрузкой.

вроде бы есть решение для nginx + memcached связки без php или только сырое?

Аватар пользователя andribas74 andribas74 15 февраля 2013 в 21:35

Пасиб вам большое за комменты. заметил, что все изменилось за пару лет, в том числе и посты на друпале. запостил свою проблему здесь - http://groups.drupal.org/node/283048 надеюсь, что-нибудь подскажут.

Аватар пользователя andribas74 andribas74 16 февраля 2013 в 10:35

Предлагают попробовать микрокеширование как описано здесь - http://fennb.com/microcaching-speed-your-app-up-250x-with-no-n

здесь адаптация для друпала - https://github.com/perusio/drupal-with-nginx

попробую, о результатах отпишусь - вроде это как раз то, что я и искал, и замечательно дает ответ на вопрос в заголовке темы.