51

Re: Большая нагрузка на сервер

Бывает...
А какой хостер?

Strawberry 1.1.1

Re: Большая нагрузка на сервер

Впринципе то там все стандартно вплоть до подключения файла новостей.
Либо это фильтры шалят, либо очень много роботов накинулись на рсс ленту...

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

53

Re: Большая нагрузка на сервер

UltraPixel пишет:

Бывает...
А какой хостер?

Multihost.ru
Короче они меня заипали smile Сваливая на впс)

54

Re: Большая нагрузка на сервер

Miksar, спасибо за наводку про права к файлам в head.php кстати. Сам бы и не додумался.
Насчёт кода в addnews.mdu есть альтернатива (она на форуме по моему Wallkman`om писалась)

$sql->update(array(
         'table'  => 'users',
         'where'  => array("username = $member[username]"),
         'values' => array('publications' => $sql->count(array('table' => 'news', 'where' => array("author = $member[username]"))))
    ));

По поводу нагрузок:
По моим наблюдениям нагрузки создает массив пользователей $user as $row при условии что их более 100.
И файл в /data - xfields-data.php.
Пришлось отказаться от использования плагинов с ним связанных.

Пока не знаю как придется с файлом setting.php

55

Re: Большая нагрузка на сервер

C xfields-data.php бы что-то придумать... Особенно когда там много инфы... Никто ничего не делал с этим?

Re: Большая нагрузка на сервер

Как же? Ант-Soft предлагал альтернативу на MySQL!

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

57

Re: Большая нагрузка на сервер

Miksar, это же нужно поиском пользоваться! Зачем, если есть добрые модераторы, которые и поищут и подскажут!

Arkuenont, http://strawberry.goodgirl.ru/forum/topic/3617/

Re: Большая нагрузка на сервер

Я вообще думаю что твою идею нужно в основные новости на сайте пустить. Чтоб она не затерялась!
Штука то поистне революционная smile

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

59

Re: Большая нагрузка на сервер

Arkuenont , я просто отключил плагины использующие xfields-data.php, очистил этот файл и загрузил онлайн-редактор  FCKeditorPHP WYSIWYG for Strawberry (прописав в CSS условия для <p>).

Пока остаётся актуальным отключения комментариев для отдельного поста.

ЗЫ. Г-да, такой вопрос... если xfields-data.php тормозит сайты , то теоретически setting.php (если там много инфы) тоже  ?

Отредактировано YurySpoloh (12 Jan 2010 15:50:15)

60

Re: Большая нагрузка на сервер

YurySpoloh, а что у нас в settings.php? Только данные настроек плагинов и прочая фигня, которая нужна только время от времени.

Тут важно соблюсти золотую середину: определиться, что по времени и по объёму быстрее - запросы к БД, или чтение данных из текстового файла.

61

Re: Большая нагрузка на сервер

Нибольшую важность имеет плагин DDB... остальное плюс-минус ...

<?
$array = array (
  'Custom_Quick_Tags' => 
  array (
    'tags' => 
    array (
      0 => 
      array (
        'name' => 'Жирный',
        'tag' => 'b',
        'complex' => '',
        'replace' => '<strong>$1</strong>',
      ),
      1 => 
      array (
        'name' => 'Наклонный',
        'tag' => 'i',
        'complex' => '',
        'replace' => '<em>$1</em>',
      ),
      2 => 
      array (
        'name' => 'Подчеркнутый',
        'tag' => 'u',
        'complex' => '',
        'replace' => '<u>$1</u>',
      ),
      3 => 
      array (
        'name' => 'Зачеркнутый',
        'tag' => 'del',
        'complex' => '',
        'replace' => '<s>$1</s>',
      ),
      4 => 
      array (
        'name' => 'Цитата',
        'tag' => 'q',
        'complex' => '',
        'replace' => '<blockquote>«<small>$1</small>»</blockquote>',
      ),
    ),
  ),
  'uhtaccess' => '',
  'Blocks' => 
  array (
    'blocks' => 'bookmarks|calendar|content/do/archives|content/do/category|content/do/else|content/do/forgot|content/do/mail|content/do/map|content/do/registration|content/do/search|content/do/users|headlines|links|main|menu|meta|output|pages|right|submenu|top5|users',
    'menu' => 'menu',
    'left' => 'useful',
    'content' => 'submenu',
    'right' => 'right|calendar',
    'head' => 'meta',
  ),
  'registration' => 
  array (
    'preventRegFlood' => true,
    'RegDelay' => 180,
    'banOnWarns' => 3,
    'regLevel' => 4,
    '127.0.0.1' => 
    array (
      'warns' => 3,
      'LastRegTime' => 1241910937,
    ),
  ),
  'Adepto_Fastload' => 
  array (
    'path_upload' => 'http://test.ru/upload/attach',
    'delete_files' => '1',
    'deny_files' => '.cgi .pl .shtml .shtm .php .php3 .php4 .php5 .phtml .phtm .phps',
  ),
  'CN2LJ' => 
  array (
    'title' => '{title}',
    'story' => '{story}{nl}{nl}<p style="text-align: right;"><a href="{link}" style="color: #666;font-size: 9px;" title="&laquo;{title}&raquo;">{hometitle}</a>',
  ),
  'CommSpy' => 
  array (
    'subj' => 'На сайте {page-title} новый комментарий от {author}',
    'body' => 'Здравствуйте.{nl}{nl}Вы подписались на получение новых комментариев с сайта {page-title}. Кто-то оставил там новый комментарий.{nl}{nl}{nl}Комментарий:{nl}----------------{nl}{comment}{nl}{nl}{nl}URL: {link}',
  ),
  'Baners' => 
  array (
    1 => 
    array (
      'name' => 'Верхний  баннер',
      'position' => 'top_banner',
      'posts' => '',
      'link' => 'http://site.ru',
      'text' => '<p><img src="http://test.ru/content/data/upimages/Banners/topbanner.jpg" width="640"></p>',
      'baner' => '1',
    ),
    2 => NULL,
  ),
  'rating' => 
  array (
    'ip_lock' => 'yes',
    'cookie_lock' => 'yes',
  ),
  'image_manager' => 
  array (
    'align' => 'none',
    'popup' => '0',
    'update' => '0',
    'replace' => '1',
    'replace_template' => '<i>{date:d.m.Y}: <b>{image}</b> was removed.</i>',
    'video_width' => '640',
    'video_height' => '600',
    'auto_start' => 'yes',
    'uimode' => 'full',
    'media_extensions' => 'avi,mp3,swf',
  ),
);

?>

Отредактировано YurySpoloh (12 Jan 2010 15:59:54)

62

Re: Большая нагрузка на сервер

Поделюсь наблюдениями про нагрузку на сервер, после переезда на vds.
VDS - Проц 1280 Мг, оперативка 1024 мб, диск 32 гб.
CentOS, Apache2, Mysql, php5.
Короче после того, как я взял vds, не оптимизированный и не настроенный, только с установленным вышеперечисленным ПО, я залил туда все сайты и они грузили проц примерно на 5-6 процентов. Далее я немного разобрался и провел небольшую оптимизацию. Настроил файл my.cnf и установил eaccelerator. После этого проц грузится примерно на 1 процент. Правда хавает оперативку. Но в любом случаее свободной оперативки примерно 20 мб и плюс оперативки выделенной под кеш около 600.

А на виртуальном хостинге меня отключали по несколько раз в день и говорили. что гружу проц на 97 процентов. Вот так вот...

63

Re: Большая нагрузка на сервер

Хостинг: mchost.ru, сайт посещаемостью 1500 уников, 2200 посещений, кеширование включено и работает.
Информация по нагрузке за последние сутки:

16.02.2010 23:50 51% 
16.02.2010 23:40 479% 
16.02.2010 23:30 469% 
16.02.2010 23:20 109% 
16.02.2010 23:10 43% 
16.02.2010 23:00 66% 
16.02.2010 22:50 68% 
16.02.2010 22:40 128% 
16.02.2010 22:30 124% 
16.02.2010 22:20 50% 
16.02.2010 22:10 81% 
16.02.2010 22:00 79% 
16.02.2010 21:50 102% 
16.02.2010 21:40 61% 
16.02.2010 21:30 107% 
16.02.2010 21:20 156% 
16.02.2010 21:10 88% 
16.02.2010 21:00 96% 
16.02.2010 20:50 164% 
16.02.2010 20:40 163% 
16.02.2010 20:30 122% 
16.02.2010 20:20 86% 
16.02.2010 20:10 149% 
16.02.2010 20:00 120% 
16.02.2010 19:50 122% 
16.02.2010 19:40 106% 
16.02.2010 19:30 132% 
16.02.2010 19:20 110% 
16.02.2010 19:10 132% 
16.02.2010 19:00 151% 
16.02.2010 18:50 195% 
16.02.2010 18:40 133% 
16.02.2010 18:30 151% 
16.02.2010 18:20 138% 
16.02.2010 18:10 146% 
16.02.2010 18:00 129% 
16.02.2010 17:50 122% 
16.02.2010 17:40 134% 
16.02.2010 17:30 148% 
16.02.2010 17:20 109% 
16.02.2010 17:10 191% 
16.02.2010 17:00 126% 
16.02.2010 16:50 152% 
16.02.2010 16:40 111% 
16.02.2010 16:30 120% 
16.02.2010 16:20 98% 
16.02.2010 16:10 111% 
16.02.2010 16:00 95% 
16.02.2010 15:50 139% 
16.02.2010 15:40 130% 
16.02.2010 15:30 125% 
16.02.2010 15:20 113% 
16.02.2010 15:10 152% 
16.02.2010 15:00 87% 
16.02.2010 14:50 107% 
16.02.2010 14:40 92% 
16.02.2010 14:30 143% 
16.02.2010 14:20 119% 
16.02.2010 14:10 135% 
16.02.2010 14:00 115% 
16.02.2010 13:50 138% 
16.02.2010 13:40 106% 
16.02.2010 13:30 166% 
16.02.2010 13:20 95% 
16.02.2010 13:10 138% 
16.02.2010 13:00 158% 
16.02.2010 12:50 102% 
16.02.2010 12:40 89% 
16.02.2010 12:30 109% 
16.02.2010 12:20 116% 
16.02.2010 12:10 121% 
16.02.2010 12:00 107% 
16.02.2010 11:50 99% 
16.02.2010 11:40 102% 
16.02.2010 11:30 76% 
16.02.2010 11:20 114% 
16.02.2010 11:10 74% 
16.02.2010 11:00 68% 
16.02.2010 10:50 87% 
16.02.2010 10:40 107% 
16.02.2010 10:30 96% 
16.02.2010 10:20 108% 
16.02.2010 10:10 87% 
16.02.2010 10:00 107% 
16.02.2010 09:50 122% 
16.02.2010 09:40 78% 
16.02.2010 09:30 111% 
16.02.2010 09:20 90% 
16.02.2010 09:10 109% 
16.02.2010 09:00 183% 
16.02.2010 08:50 107% 

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

Strawberry 1.1.1

64

Re: Большая нагрузка на сервер

UltraPixel пишет:

16.02.2010 23:40 479%

Это круто! Как можно загрузить проц. больше чем на 100%??? Хостер должен аппаратно это отрубать.

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

1. Создаёте в корне сайта файл robots.txt с таким содержанием:

User-agent: *
Disallow: /images/
Disallow: /strawberry/

images и strawberry - имена ваших папок с рисунками и клубникой. Если есть другие папки, содержание которых не нужно индексировать, можете тоже добавить их в список.

2. В мета-тегах заголовка файла index.php (главной страницы сайта) пишете:

<meta name="robots" content="noindex,nofollow">
<meta name="revisit-after" content="5 days">

Всё, роботы отрублены!

А лучше купите нормальный хостинг с неограниченным исходящим траффиком и принципиальным отсутствием в описании услуг такого понятия, как "нагрузка на процессор"!

Почитайте здесь (на правах рекламы).

65

Re: Большая нагрузка на сервер

дык... smile
Я не камикадзе, чтобы роботов отрубать)))
Я их люблю и всегда рад видеть)) big_smile

Оптимизация и нужна, чтобы сайт роботами хорошо индексировался... wink
А вот как _еще_ нагрузку сбить ума не приложу... roll
На сайте кешируется всё, что можно, в секретные директории роботы не лезут, поиском не пользуются)
НТхостом пользовался, скажу "нет, спасибо!" - после заражения всех php скриптов и html файлов на аккаунте по вине хостинга, больше на него в жизни не перейду...
Остается МастерХост, видимо... Официальный сайт Клубнички на нем и работает... smile

Strawberry 1.1.1

Re: Большая нагрузка на сервер

UltraPixel пишет:

НТхостом пользовался, скажу "нет, спасибо!" - после заражения всех php скриптов и html файлов на аккаунте по вине хостинга, больше на него в жизни не перейду...

Сразу видать, что человек не умеет заботится о безопасности файлов.
А все просто. На не исполняемые (в том числе инклюдящиеся) ставим права 444.

А на индексы, которые открываем в браузере - 555. Ффсе. Если индексы 555 еще могут с грехом пополам перезаписать, но 444 - нет. Из личного опыта )) Ибо так же ломали.
Но не совсем на хост грешу. А на новые вирусы, которые системой антивиря еще не ловятся - открываешь тотал коммандер, делаешь коннект - все. дело сделано. Через 10 мин делаешь реконнект - все файлы перезаписаны... (было это давно, с тех пор к вопросу о безопасности информации подхожу строго).

Вы скажите - да окуеть можно от того количества файлов, на которые надо переустановить права.
Тут уж вам решать...

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

Re: Большая нагрузка на сервер

По моим наблюдениям нагрузки создает массив пользователей $user as $row при условии что их более 100.

Время загрузки подскочило до 8-13 секунд.
Было 700 пользователей от спам-ботов.
Удалил лишних пользователей. Оставил 20 аккаунтов.
Время загрузки СРАЗУ упало до 2-3 секунды.

Есть такая штука как IceStrawberry 1.04 b. Можете юзать на свой страх и риск... или слямзить что-то. Мне фиолетово.

Re: Большая нагрузка на сервер

Согласен, cmd, я обращал внимание на постоянно использующиеся массивы в системе - то как пользователи и категории. Кстати - такого не в одной кмс не встречал ))

Это дело можно отрубить делая запрос только там где надо - но это будет много мест - где надо будет дописывать...

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

Re: Большая нагрузка на сервер

Strawberry  1.1.1

Вопрос не сколько прямой по "Большой нагрузке на сервер", но "почти" в тему:

Есть несколько сайтов на Strawberry ( для примера страницы - flover.org.ua/plants/indoor/lukov/amarillis-prekrasnyi.html , myronivka.com.ua/rozdumy/zamuzhem-v-ameryke.html ), работает всё нормально ( тьфу-тьфу пока... ).... Так вот, решил снова оптимизировать сайты и вот что заметил - на страницах вывода новости несколько раз идёт загрузка prototype.js , cute.js и код:

<script>
function insertext(open, close, spot){
    msgfield = document.forms['comment'].elements['comments'];

    // IE support
    if (document.selection && document.selection.createRange){
        msgfield.focus();
        sel = document.selection.createRange();
        sel.text = open + sel.text + close;
        msgfield.focus();
    }
..........

Это происходит после вывода новостей из активной категории:

<?php
ob_start();
$number = 10;
$template = 'right22';
include rootpath.'/show_news.php'; 
if ($post['category']){ // узнаём, открыта ли какая-то новость и в категории ли она вообще
   $static['skip'] = 0;
   $static['template'] = 'right22';
   $static['number'] = 10;
   $static['category'] = $post['category'];
   include rootpath.'/show_news.php'; 
}
$news_from_categ = ob_get_clean();
?>

Информация выводится так:

<?=$news_from_categ; ?>

В шаблоне right22 заполнен только файл - active.tpl , остальные по нулю...

Соответственно загружаются *.js файлы по несколько раз - возрастает время загрузки страницы и видимо нагрузка.

Как можно выйти из этого тупика?

Отредактировано olafsen (10 Sep 2010 23:16:23)

Re: Большая нагрузка на сервер

НАГРУЗКА- Это реальная проблема!
За год поменять 3 прописки и 3 раза умалять разблокировать сайт- не смешно уже... и все по причине нагрузки.

Re: Большая нагрузка на сервер

Причина почти одна - хостеры КОЗЛы.
Они набирают от жадности студентов для администрирования серверов. А те грамотные очень, начинают свои гениальные эксперименты применять, можно только так сказать. Хотя им пофиг, они не раз писали - покупайте выделенный сервер...

Re: Большая нагрузка на сервер

как отрубить не нужных ботов?
пробовал через robots.txt:,
User-agent: YandexBlogs
Disallow: /

User-agent: StackRambler
Disallow: /

Но они все равно ходят по сайту.
По лог-файлам у них наибольшая нагрузка.
Есть другие способы, чтобы наверняка не сувались?
По IP в .htaccess не канает, т.к. они меняют их частенько

Отредактировано dMark (25 Oct 2010 13:59:44)

73

Re: Большая нагрузка на сервер

dMark, раз уже начали лазить по сайту, то очевидно, что они роют не корень сайта, на который действует robots.txt, а конкретные файлы, например index.php.

В заголовках своих страниц допишите

<meta name="robots" content="noindex,nofollow">
<meta name="revisit-after" content="5 days">

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

А robots.txt сделайте таким:

User-agent: * 
Disallow: /

Новые не залезут, а старые и так в курсе ваших дел.

Re: Большая нагрузка на сервер

content="noindex,nofollow"
и
User-agent: *
Disallow: /

Это слишком жестко, подобный камикадзе.
Напрягает YandexBlogs.
А все советы этого и других постов уже проделаны.
Хочу найти главный червь нагрузки, и задушить его суку..
У меня бессоница уже 3месяца, хостеры гоняют, блокируют, штрафуют...эээх

Нашел такую штуку:

    <?php
    /*
    *--------------------------------------------------------
    * Модуль antiddos.php V3.1.3 Вт 16 Март 2010
    * Copyright (C) Андрей Якушев, 2006. http://avy.ru
    *--------------------------------------------------------
    * Модуль предназначен для ограничения доступа к сайту или
    * к страницам, где он включён.
    * Принцип работы в том, что запоминается ip-адрес и время
    * обращения с этого адреса. И если в течение заданного
    * времени происходит обращение с того же адреса, то ему
    * выдаётся ошибка 503.
    * Если количество недопустимых обращений подряд превышает
    * определённое число, ip-адрес закрывается через файл
    * .htaccess
    * Модуль необходимо подключать к скрипту самым первым.
    * Этим обеспечивается быстрота его работы.
    *--------------------------------------------------------
    */

    /* Директория для временных файлов. Необходимо указать
       отдельную директорию, т.к. большое количество файлов
       в одной папке змедляет скорость обращения к ней. */
    define ('AD_DIRNAME', $_SERVER['DOCUMENT_ROOT'] . '/tmp_path');
    /* Время задержки в секуднах, в течение которого нельзя
       обращаться к сайту. */
    define ('AD_DELAY', 2);
    /* Количество запрещённых повторений, после которых ip-адрес
       будет забанен. Нужно обратить внимание на то, что некоторые
       программы чтения RSS-каналов считывают все ссылки, помещённые
       в канале сразу. Поэтому, если на сайте есть такие каналы,
       это число необходимо поставить больше, чем максимальное
       количество элементов в канале. */
    define ('AD_TRYING', 35);

    /*
    *---------------------------------------------------------------
    * Список поисковых роботов.
    * Очень не хорошо, если поисковый робот будет натыкаться
    * на ошибки на сайте. Ему это может сильно не понравиться.
    * Поэтому пишем список ip-адресов роботов; добавляем или
    * удаляем, что нужно.
    * IP-адреса:
    * Alta Vista - см. Yahoo
    * Aport - 194.67.18.
    * Gigabot - 66.231.188. (66.231.188.0/24)
    * Google - 209.85.128.0 - 209.85.255.255 (209.85.128.0/17),
    *    72.14.192.0 - 72.14.255.255 (72.14.192.0/18), 
    *    66.249.64.0 - 66.249.95.255 (66.249.64.0/19),
    *    64.68.80.0 - 64.68.87.255 (64.68.80.0/21),
    *    66.102.0.0 - 66.102.15.255 (66.102.0.0/20),
    *    64.233.160.0 - 64.233.175.255 (64.233.160.0/19),
    *    216.239.32.0 - 216.239.63.255 (216.239.32.0/19)
    * Mail.Ru - 195.239.211.0 (195.239.211.0/24),
    *    94.100.181.128 - 94.100.181.255 (94.100.181.128/25)
    * msnbot - 65.52.0.0 - 65.55.255.255 (65.52.0.0/14),
    *     207.46.0.0 - 207.46.255.255 (207.46.0.0/16)
    * Rambler - 81.19.64.0 - 81.19.66.255 (81.19.64.0/19)
    * Yahoo - 74.6.0.0 - 74.6.255.255 (74.6.0.0/16),
    *    69.147.64.0 - 69.147.127.255 (69.147.64.0/18)
    *    72.30.64.0 - 72.30.255.255 (72.30.0.0/16)
    *    67.195.0.0 - 67.195.255.255 (67.195.0.0/16)
    * Yandex - 213.180.214.128 - 213.180.214.255 (213.180.192.0/19),
    *    77.88.22.0 - 77.88.23.255 (77.88.0.0/18)
    *    93.158.128.0 - 93.158.191.255 (93.158.128.0/18)
    *    95.108.128.0 - 95.108.255.255 (95.108.128.0/17)
    *    87.250.224.0 - 87.250.255.255 (87.250.224.0/19)
    * LiveInternet - 88.212.202.0 - 88.212.202.63 (88.212.202.0/26)
    * Ip-адреса и маски к ним кодируются в виде строки из 4 символов
    * Это сделано из-за того, что невозможно в PHP использовать
    * стандартными (простыми) процедурами 32-битное целое число
    * без знака. А использование специальных библиотек усложнит
    * работу и сделает скрипт зависимым от этих библиотек.
    *---------------------------------------------------------------
    */
    $ad_Robots_IP = array(
       'Aport'      => array(
          sprintf('%c%c%c%c', 194, 67, 18, 0),
          sprintf('%c%c%c%c', 255, 255, 255, 0)
       ),
       'Gigabot'   => array(
          sprintf('%c%c%c%c', 66, 231, 188, 0),
          sprintf('%c%c%c%c', 255, 255, 255, 0)
       ),
       'Google1'   => array(
          sprintf('%c%c%c%c', 209, 85, 128, 0),
          sprintf('%c%c%c%c', 255, 255, 128, 0)
       ),
       'Google2'   => array(
          sprintf('%c%c%c%c', 72, 14, 192, 0),
          sprintf('%c%c%c%c', 255, 255, 192, 0)
       ),
       'Google3'   => array(
          sprintf('%c%c%c%c', 66, 249, 64, 0),
          sprintf('%c%c%c%c', 255, 255, 224, 0)
       ),
       'Google4'   => array(
          sprintf('%c%c%c%c', 64, 68, 80, 0),
          sprintf('%c%c%c%c', 255, 255, 248, 0)
       ),
       'Google5'   => array(
          sprintf('%c%c%c%c', 66, 102, 0, 0),
          sprintf('%c%c%c%c', 255, 255, 240, 0)
       ),
       'Google6'   => array(
          sprintf('%c%c%c%c', 64, 233, 160, 0),
          sprintf('%c%c%c%c', 255, 255, 224, 0)
       ),
       'Google7'   => array(
          sprintf('%c%c%c%c', 216, 239, 32, 0),
          sprintf('%c%c%c%c', 255, 255, 224, 0)
       ),
       'Mail.Ru1'   => array(
          sprintf('%c%c%c%c', 195, 239, 211, 0),
          sprintf('%c%c%c%c', 255, 255, 255, 0)
       ),
       'Mail.Ru2'   => array(
          sprintf('%c%c%c%c', 94, 100, 181, 128),
          sprintf('%c%c%c%c', 255, 255, 255, 128)
       ),
       'msnbot1'   => array(
          sprintf('%c%c%c%c', 65, 52, 0, 0),
          sprintf('%c%c%c%c', 255, 252, 0, 0)
       ),
       'msnbot2'   => array(
          sprintf('%c%c%c%c', 207, 46, 0, 0),
          sprintf('%c%c%c%c', 255, 255, 0, 0)
       ),
       'Rambler'   => array(
          sprintf('%c%c%c%c', 81, 19, 64, 0),
          sprintf('%c%c%c%c', 255, 255, 224, 0)
       ),
       'Yahoo1'   => array(
          sprintf('%c%c%c%c', 74, 6, 0, 0),
          sprintf('%c%c%c%c', 255, 255, 0, 0)
       ),
       'Yahoo2'   => array(
          sprintf('%c%c%c%c', 69, 147, 64, 0),
          sprintf('%c%c%c%c', 255, 255, 192, 0)
       ),
       'Yahoo3'   => array(
          sprintf('%c%c%c%c', 72, 30, 0, 0),
          sprintf('%c%c%c%c', 255, 255, 0, 0)
       ),
       'Yahoo4'   => array(
          sprintf('%c%c%c%c', 67, 195, 0, 0),
          sprintf('%c%c%c%c', 255, 255, 0, 0)
       ),
       'Yandex1'   => array(
          sprintf('%c%c%c%c', 213, 180, 192, 0),
          sprintf('%c%c%c%c', 255, 255, 224, 0)
       ),
       'Yandex2'   => array(
          sprintf('%c%c%c%c', 77, 88, 0, 0),
          sprintf('%c%c%c%c', 255, 255, 192, 0)
       ),
       'Yandex3'   => array(
          sprintf('%c%c%c%c', 93, 158, 128, 0),
          sprintf('%c%c%c%c', 255, 255, 192, 0)
       ),
       'Yandex4'   => array(
          sprintf('%c%c%c%c', 95, 108, 128, 0),
          sprintf('%c%c%c%c', 255, 255, 128, 0)
       ),
       'Yandex5'   => array(
          sprintf('%c%c%c%c', 87, 250, 224, 0),
          sprintf('%c%c%c%c', 255, 255, 224, 0)
       ),
       'LiveInternet' => array(
          sprintf('%c%c%c%c', 88, 212, 202, 0),
         sprintf('%c%c%c%c', 255, 255, 255, 192)
       ),
    );

    /*
    *----------------------------------------------------------
    * Функция создаёт в указанной директории файл, начинающийся
    * с буквы a (для отличия от других возможных файлов) и
    * содержащий в имени ip-адрес клиента.
    * Если количество обращений подряд с данного адреса
    * превысило допустимый предел, адрес закрывается через файл
    * .htaccess
    * При желании может быть отослано письмо на специальный
    * адрес, в котором будет передана информация о действиях
    * с заблокированного адреса.
    *----------------------------------------------------------
    */
    function ad_WriteIP($counter)
    {
       $counter++;
       if ($counter > AD_TRYING)
       {
          //Баним ip-адрес
          $f = fopen($_SERVER['DOCUMENT_ROOT'] . '/.htaccess', 'a');
          fwrite($f, "\ndeny from " . $_SERVER['REMOTE_ADDR']);
          fclose($f);
          // Открыть комментарии, если нужно уведомлять по почте
          /*
          //Получаем хост (в некоторых логах он может быть вместо ip
          $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
          $mess = 'Заблокирован адрес ' . $_SERVER['REMOTE_ADDR'] .
             ' (' . $host . ")\n\n";
          //Выполняем запрос к логам. Нужно указать путь и имя лог-файла
          exec('cat /home/your_dir/logs/access_log | egrep \'(' .
             str_replace('.', '\\.', $_SERVER['REMOTE_ADDR']) . ')|(' .
             str_replace('.', '\\.', $host) . ')\' | sort -k 4 >' .
             AD_DIRNAME . '/dump.txt');
          $mess .= file_get_contents(AD_DIRNAME . '/dump.txt');
          @ unlink(AD_DIRNAME . '/dump.txt');
          $email = 'my_box@myhost.ru'; //Укажите свой e-mail
          mail($email, 'IP-address was banned', $mess, "From: " . $email .
             "\nReply-To: " . $email .
             "\nContent-Type: text/plain; charset=Windows-1251" .
             "\nContent-Transfer-Encoding: 8bit");
          */
       }
       else
       {
          //Записываем файл с ip-адресом и количеством обращений
          $f = fopen(AD_DIRNAME . '/a' . $_SERVER['REMOTE_ADDR'] . '_' .
             $counter, 'w');
          fclose($f);
       }
    }
    /*
    *----------------------------------------------------
    * Проверка на отношение ip-адреса к сетям поисковиков
    *----------------------------------------------------
    */
    $ad_IsRobot = false;
    $ad_IP = explode('.', $_SERVER['REMOTE_ADDR']);
    $ad_IPMatch = sprintf('%c%c%c%c', $ad_IP[0], $ad_IP[1], $ad_IP[2], $ad_IP[3]);
    foreach ($ad_Robots_IP as $ad_match)
    {
       //Если на входящий адрес наложить маску операцией "и",
       //то он должен будет совпасть с начальным адресом сети.
       if (($ad_IPMatch & $ad_match[1]) == $ad_match[0])
       {
          $ad_IsRobot = true;
          break;
       }
    }

    /*
    *---------------------------------------------------------
    * Поисковые роботы не любят, когда к адресу страницы
    * добавляется переменная сессии. Поэтому, если на сайте
    * используются сессии, то их лучше включать, если агент -
    * не робот.
    * Если сессии не используются, то этот кусок можно убрать.
    *---------------------------------------------------------
    */
    /*
    if (!$ad_IsRobot)
    {
       session_start();
    }
    else
    {
       // Чтобы поисковый робот не сильно загружал сайт,
       //делаем ему задержку
       sleep(AD_DELAY);
    }
    */

    if (!$ad_IsRobot)
    {
       /*** Чтение каталога и удаление старых файлов ***/
       $ad_dir      = opendir(AD_DIRNAME) or
          die('Отсутствует директория для временных файлов');
       $ad_forbid   = time() - AD_DELAY;
       /* IP-адрес в имени файла, начинающегося на букву a,
       а время обращения - время изменения файла */
       $ad_before_trying = 0;
       while (false !== ($ad_FName = readdir($ad_dir)))
       {
          if (ereg('^a[1-9]', $ad_FName))
          {
             if (@ filemtime(AD_DIRNAME . '/' . $ad_FName) < $ad_forbid){
                @ unlink(AD_DIRNAME . '/' . $ad_FName);
             }
             elseif (ereg('^a' . str_replace('.', '\\.',
                $_SERVER['REMOTE_ADDR']) . '_([0-9]+)$', $ad_FName, $ad_match))
             {
                //Если файл есть, то читаем, сколько раз к нму обращались
                $ad_before_trying = intval($ad_match[1]);
                @ unlink(AD_DIRNAME . '/' . $ad_FName);
             }
          }
       }
       closedir($ad_dir);
       /*** Выводить или не выводить сообщение об ошибке ***/
       if ($ad_before_trying > 0)
       {
          /* Если обращение было недавно, то выводим сообщение об ошибке */
          header ('HTTP/1.0 503 Service Unavailable');
          header ('Status: 503 Service Unavailable');
          header ('Retry-After: ' . $ad_delay * 3);
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <title>Ошибка 503</title>
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
    </head>
    <body>
    <h1>Ошибка 503 (Service Unavailable)</h1>
    <p>Сервер не может в данный момент выдать запрашиваемую Вами страницу.
    Попробуйте вызвать эту страницу позже (клавиша F5).</p>
    </body>
    </html>
    <?php
          ad_WriteIP($ad_before_trying);   // Перед выходом записываем ip
          exit;
       }else{
          ad_WriteIP($ad_before_trying);
       }
    }
?>

Создайте папку tmp_path в корневой.
Вставляем код После <? include ($_SERVER["DOCUMENT_ROOT"]."/news/head.php"); ?>
Сейчас на стадии наблюдения, но вроде люди довольны.
Источник http://avy.ru/ftopic1870.html

Отредактировано dMark (25 Oct 2010 21:14:06)

Re: Большая нагрузка на сервер

FormatSwitcher (выбор формата новости) - самый аццкий плагин, создающий дикую нагрузку на сервер. В первую очередь смотрите на него. Он к каждой новости обращается несколько раз при каждом выводе, даже со включенным кэшированием в настройках. Если на странице много новостей/блоков - тут хостеру и трындец может случиться. Я принудительно выставил только один формат новости, а остальное все закомментировал нафиг - и количество запросов сразу уменьшилось во много раз.

И кэширование тоже рулит.  На форуме была тема "Альтернативный кэш" - я сделал так, как там предлагали, и нагрузка на сервер тоже прилично упала, в несколько раз.

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