Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Вопросы по работе системы (http://forum.sape.ru/forumdisplay.php?f=13)
-   -   Нагрузка на сервер (http://forum.sape.ru/showthread.php?t=9922)

big.bon 10.03.2008 13:56

Переписывайте код обновления links.db на CRON, а вывод ссылок с unserialize на include или mem_cache.

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

Сколько у вас в сутки хитов на ВЕСЬ сайт? Если больше 30к, то представьте, что функция unserialize обрабатывает файл размером в 100кбайт (примерно на 1000 ссылок) при каждом вызове страницы. Это очень много и это очень напряжно для сервера при такой посещаемости.

Skipper 10.03.2008 14:23

Да, нагрузку создает код обновления ссылок. Я глянул на sape.php - и как понимаю в любом случае ссылки не будут обновлятся чаще чем раз в час. Сейчас поставил раз в 10 часов - и хостер открыл площадку. К вечеру соберется статистика за сутки - посмотрим что скажет хостер.

Цитата:

Сколько у вас в сутки хитов на ВЕСЬ сайт? Если больше 30к, то представьте, что функция unserialize обрабатывает файл размером в 100кбайт (примерно на 1000 ссылок) при каждом вызове страницы. Это очень много и это очень напряжно для сервера при такой посещаемости.
Хитов порядка 1к-1,5к в сутки. Ну в пике 4к может быть.

И я не знаток программирования на php, но вроде там вот такой код

Код:

        if (filemtime($this->_db_file) < (time()-$this->_cache_lifetime) || filesize($this->_db_file) == 0) {

            // Чтобы не повесить площадку клиента и чтобы не было одновременных запросов
            @touch($this->_db_file, (time() - $this->_cache_lifetime + $this->_cache_reloadtime));

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

big.bon 10.03.2008 14:33

Нагрузка может возникать, когда в скрипте запустилась процедура обновления ссылок одновременно при нескольких запросах. В этом коде нету проверки блокировки файла, так что даже теоретически все посетители в онлайне могут вызвать обновление кода, потому что процедура обновления файла происходит минимум 2-3 секунды. Так что в таком промежутке могут быть ещё запросы к сайту, и следовательно ещё запросы на обновление ссылок.

polgete 10.03.2008 14:36

хотелось бы потом услышать как ситуация разрешилась и что за хостер (без рекламы чур :))

Skipper 10.03.2008 14:47

Хм. По идее перед началом запроса делается touch на файл и меняется его время его изменения. И проверка

Цитата:

if (filemtime($this->_db_file) < (time()-$this->_cache_lifetime) || filesize($this->_db_file) == 0) {
По идее уже не должна проходить.

Если я правильно понимаю код конечно.

Пока просле запроса хостера я предложил переименовать sape.php и разблокирова аккаут. В течении часа мне разблокировали аккаут и предложили переименовать файл самому. Я пока увеличил в десять раз $_cache_lifetime и $_cache_reloadtime и попросил промониторить загрузку. На что мне ответили что через 24 часа дадут ответ.

Хостер mirhosting.ru

sergey9 10.03.2008 16:17

Цитата:

Сообщение от Skipper (Сообщение 99417)
Хостер mirhosting.ru

меня они тоже блокировали (было это давным-давно, когда ещё и сапе не было) хостов в день было тысяч 5, и сайт был без базы данных даже, и повышение тарифа не помогло..

Skipper 12.03.2008 11:21

Цитата:

Сообщение от Skipper (Сообщение 99417)

Пока просле запроса хостера я предложил переименовать sape.php и разблокирова аккаут. В течении часа мне разблокировали аккаут и предложили переименовать файл самому. Я пока увеличил в десять раз $_cache_lifetime и $_cache_reloadtime и попросил промониторить загрузку. На что мне ответили что через 24 часа дадут ответ.

Хостер mirhosting.ru

На следующий день нагрузка упала, но еще через день возобновилосась. Хотелось все же услышать что нибудь от администрации Сапы - есть какие либо советы что делать? Писал вам кто нибудь с такими проблемами?

seocore 12.03.2008 13:51

Цитата:

Сообщение от Skipper (Сообщение 99080)
Но в этом ли дело? Может произошел какой либо сбой - и при каждом запросе каждые десять минут ($_cache_reloadtime) - происходил запрос в САПЕ?

правильно уже выше писали, например инициировался index.php, он начал скачивать огромный links.db ... на это у него ушло допустим секунд 30, если в эти 30 секунд еще парочка запросов пришло к index.php, то инициировалось столько процессов "обновления"... - что и вызвало перегруз :)

виной всему (я думаю) - кривой и перегруженный DNS, т.е. gethostbyaddr() очень долго отрабатывался для конвертации hostname=>ip - я такое наблюдал уже на ВПСке в мирхостинге, когда банальный gethostbyaddr("yandex.ru") отрабатывался аж 10 секунд :)

Skipper 12.03.2008 14:02

Цитата:

Сообщение от seocore (Сообщение 100461)
правильно уже выше писали, например инициировался index.php, он начал скачивать огромный links.db ... на это у него ушло допустим секунд 30, если в эти 30 секунд еще парочка запросов пришло к index.php, то инициировалось столько процессов "обновления"... - что и вызвало перегруз :)

виной всему (я думаю) - кривой и перегруженный DNS, т.е. gethostbyaddr() очень долго отрабатывался для конвертации hostname=>ip - я такое наблюдал уже на ВПСке в мирхостинге, когда банальный gethostbyaddr("yandex.ru") отрабатывался аж 10 секунд :)

Бррр.... Почему правильно... Можно конкретный кусок кода показать где это происходит.

В моем понимании происходит все так - проверяем время создания links.db - если старый, то МЕНЯЕМ ВРЕМЯ на текущее и только потом создаем запрос. Даже если будет много запросов - то все равно больше одного соединения устанавливаться не должно.



Пообщался еще с сопортом - они не уверены что это именно из исходящих соединений. Сказали что просто для информации об этом сказали. Будем копать дальше.

seocore 12.03.2008 14:49

Цитата:

Сообщение от Skipper (Сообщение 100474)
Бррр.... Почему правильно... Можно конкретный кусок кода показать где это происходит.

а это на уровне самого ПХП, а не в скриптах, т.е. просто создайте скрипт примерно такой:
PHP код:

<?php
  $mtime 
explode(" ",microtime()); 
  
$start_time $mtime[1] + $mtime[0];

  
$ip gethostbyname('dispenser-01.sape.ru');

  
$atime explode(" ",microtime()); 
  echo 
$ip." => ".(($atime[1] + $atime[0]) - $start_time)."<BR />";

  
$ip gethostbyname('dispenser-02.sape.ru');

  
$atime explode(" ",microtime()); 
  echo 
$ip." => ".(($atime[1] + $atime[0]) - $start_time)."<BR />";
?>

результат примерно такой:
217.107.36.132 => 0.000416040420532
217.107.36.132 => 0.000885009765625

если вы наблюдаете там значения порядка 5-15 секунд - то пинайте хостера пусть ставит кеширующий DNS и вообщем решает проблему :)

Цитата:

Сообщение от Skipper (Сообщение 100474)
В моем понимании происходит все так - проверяем время создания links.db - если старый, то МЕНЯЕМ ВРЕМЯ на текущее и только потом создаем запрос. Даже если будет много запросов - то все равно больше одного соединения устанавливаться не должно.

правильно у меня на двух сайтах вообще хранится в memcached'е всё содержимое файла ссылок + time() параметр (времени обновления) :)


Часовой пояс GMT +3, время: 07:31.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.