0 Пользователей и 1 Гость просматривают эту тему.
  • 160 Ответов
  • 172270 Просмотров
*

leko

  • Захожу иногда
  • 114
  • 4 / 0
После долгих скитаний по хостингам нашёл очень подходящий американский  вариант для себя , просидел месяц там, все работало стабильно ... и вдруг support пишет мне что сайт безумно перегружает CPU и memory  :-\ и это при максимум 1500 посетителей в день  :-[
До этого была подобная проблема на русском хостинге  :'(
Вот сижу и не знаю что и делать  :'( .... или это не в Joomle дело  ...

сайт мой http://legko.be/ модулей минимум, debug включён если кто захочет посмотреть ....
« Последнее редактирование: 21.01.2008, 18:22:51 от Greycat »

Re: Joomla перегружает сервер
« Ответ #1 : 02.06.2006, 08:45:08 »
Пусть  хостер подробную статистику предоставит , смотришь пики нагрузки , в логе смотришь где в это время кто шарится.
*

one_more

  • Захожу иногда
  • 139
  • 87 / 3
  • there is no spoon
Re: Joomla перегружает сервер
« Ответ #2 : 02.06.2006, 08:59:19 »
1.Включите кэширование для сайта и модулей, если не включено.
2.Почитайте этот топик
Errare humanum est
*

leko

  • Захожу иногда
  • 114
  • 4 / 0
Re: Joomla перегружает сервер
« Ответ #3 : 02.06.2006, 16:17:20 »
lamer И этот топик читал и вообще всё ночь читал  >:(

А кэширование для сайта и модулей включено  ::)

Serg0k

Статистику не продоставил но написал вот чего :

In the current state your website is completely unsuitable for shared
hosting. I have performed some tests : on loading of your index page
there are too many links which you should reduce. Also you will need
database optimization and indexing because when legko.be loads it makes
56 queries to the database. Furthermore I have checked you have media
files for streaming which also overload the server.

 >:( ???
*

leko

  • Захожу иногда
  • 114
  • 4 / 0
Re: Joomla перегружает сервер
« Ответ #4 : 05.06.2006, 16:47:53 »
Вопросы в тему  :)

- Влияют ли на загружаемость сервера установленные, но не включёные компоненты, модули и мамботы ?
- Меню разделено на 3 модуля ?
- Модули типа вывода фото и анекдотов ?
- Есть ли возможность определить текущюю нагрузку моего сайта на сервер ?

Заранее спасибо  :) ???
*

Yana

  • Захожу иногда
  • 66
  • 17 / 0
  • Пенсионерка русской поддержки Joomla
Re: Joomla сильно перегружает сервер :(
« Ответ #5 : 06.06.2006, 15:07:27 »
Попробуй поиграть с настройками Session Authentication Method: в контрольной панели -> Закладка Server -> Global Configuration ->
*

leko

  • Захожу иногда
  • 114
  • 4 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #6 : 06.06.2006, 17:15:17 »
Да вроде всё там перепробовал  ;)
*

luxter

  • Новичок
  • 8
  • 0 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #7 : 27.02.2007, 13:43:15 »
cashe 3600 sek
Статистика отключенна. 5 новостей на главной. Реклама не в модулях. Из стороннего стоит Роклатест ньюс ( выводит 20 новостей которых нет на главной)

Джумла последняя.

более 3000 уникальных в сутки. Нагрузка средняя от 6-9% пиковая под 11%-13% До кеширования 62 запроса, после 21 запрос.

http://www.luxter.ru/61.queries.executed.htm
http://www.luxter.ru/debug.htm

Кто, что посоветует ? Надо уменьшать ещё нагрузку предел в 15% очень близок, а за это хостер отрубает аккаунт на от 15 минут до 1 часа.

Может в этом можно порезат кое какие запросы ?

http://www.luxter.ru/kod.txt
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Joomla сильно перегружает сервер :(
« Ответ #8 : 27.02.2007, 13:50:07 »
До кеширования 62 запроса, после 21 запрос.
кэширование включено и в глобальных настройках и в настройках каждого модуля (включая Роклатест ньюс)?
*

luxter

  • Новичок
  • 8
  • 0 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #9 : 27.02.2007, 13:53:29 »
Цитировать
кэширование включено и в глобальных настройках и в настройках каждого модуля (включая Роклатест ньюс)?

Да конечно же. Везде где можно было.

на графике чётко видно нагрузка до оптимизации и после. Но к сожалению нужно ещё что то делать кол-во пощещениий увеличивается.

« Последнее редактирование: 27.02.2007, 14:01:50 от luxter »
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: Joomla сильно перегружает сервер :(
« Ответ #10 : 27.02.2007, 16:04:10 »
Идём по-порядку по запросам (взятыми с http://www.luxter.ru/debug.htm):

1. ?
Код
SELECT folder, element, published, params
 FROM jos_mambots
 WHERE published >= 1
 AND access <= 0
 AND folder = 'system'
 ORDER BY ordering
возникает в файле /index.php в строке
Код
// load system bot group
$_MAMBOTS->loadBotGroup( 'system' );
Цель запроса — загрузка мамботов группы system. Если таковые отсутствуют (а во многих случаях это действительно так) — можно закомментировать в этом файле эту, а также следующие строки:
Код
// trigger the onStart events
$_MAMBOTS->trigger( 'onStart' );
Код
// trigger the onAfterStart events
$_MAMBOTS->trigger( 'onAfterStart' );

2. +
Код
SELECT id, link
 FROM jos_menu
 WHERE menutype = 'mainmenu'
 AND published = 1
 ORDER BY parent, ordering
LIMIT 1
возникает в файле /index.php в блоке
Код
if ($option == '') {
if ($Itemid) {
//пропущено
}
}
Цель — определить компонент по-умолчанию (который должен запускаться при заходе по адресу www.site.com). Если этот компонент и его Itemid известны (по-умолчанию это com_frontpage и Itemid=1 — эти значения можно определить по ссылке, на которую указывает первый пункт меню в модуле mainmenu), то от лишнего запроса к БД можно избавиться, заменив вышеприведенный блок на
Код
if ($option == '') {
$option = 'com_frontpage';
$Itemid = 1;
}

3. ?
Код
SELECT template
 FROM jos_templates_menu
 WHERE client_id = 0
 AND ( menuid = 0  OR menuid = 1 )
 ORDER BY menuid DESC
LIMIT 1
возникает в файле /includes/joomla.php при вызове
Код
		$this->_setTemplate( $isAdmin );
в функции mosMainFrame.
Цель — определить шаблон, соответствующий текущему пункту меню. Если у вас на всех страницах используется один и тот же шаблон (например, my_template), то эту строку можно заменить на
Код
		if($isAdmin) $this->_setTemplate( $isAdmin );
else $this->_template = 'my_template';

4-7.
Код
DELETE FROM jos_session
 WHERE (
 ( time < '1172571909' )
 AND guest = 0
 AND gid > 0
 ) OR (
 ( time < '1172571909' )
 AND guest = 1
 AND userid = 0
 )

SELECT *
 FROM jos_session
 WHERE session_id = 'ee2ba326d4dec27bfa542f334e20b5b1'

SELECT session_id
 FROM jos_session
 WHERE session_id = 'dde8aac46113d15f07d2a279f7b60cf4'

INSERT INTO jos_session ( `session_id`,`time`,`username`,`gid`,`guest` ) VALUES ( 'dde8aac46113d15f07d2a279f7b60cf4','1172572809','','0','1' )
Это работа с сессиями. Тут вряд ли можно избавиться от запросов к БД (хотя, можно попробовать убрать сессии для "гостей", но что из этого получится — не знаю).
Пункт 4 — удаление пользователей, которые покинули сайт, из списка "активных".
Пункт 5 — попытка загрузить текущую сессию.
Пункт 6 — проверка того, что созданный идентификатор сессии - уникальный.
Пункт 7 — занесение пользователя в список "активных".
Все эти запросы возникают в функции initSession в файле /includes/joomla.php. Можно ли здесь что-то оптимизировать — пока не знаю.

8. ?
Код
SELECT value FROM jos_jomcomment_config WHERE name='all'
Это «след» от какого-то компонента комментариев (видимо, Jom Comment). Так как в стандартную поставку такой не входит — прокомментировать не могу. Запрос, видимо, происходит в обработчике onAfterStart группы system, поэтому оптимизацию, приведенную в пункте 1, применять нельзя — можно навредить работе компонента.

9. -
Код
SELECT *
 FROM jos_menu
 WHERE id = 1
запрос вызывается в /index.php при вызове mosMenuCheck:
Код
	$ret 	= mosMenuCheck( $Itemid, $option, $task, $gid );
Цель — проверка прав доступа к текущему компоненту.

10. ?
Код
SELECT a.*
 FROM jos_components AS a
 WHERE ( a.admin_menu_link = 'option=com_syndicate' OR a.admin_menu_link = 'option=com_syndicate&hidemainmenu=1' )
 AND a.option = 'com_syndicate'
вызывается при вызове mosShowHead из шаблона.
Проверяется, нужно ли экспортировать RSS и если да, то в блок <head> сайта добавится строка
Код
<link rel="alternate" type="application/rss+xml" title="..." href="..." />
Если Вам такая строка не нужна, то вставьте в файле /includes/frontend.php:
Код
if(false) {
перед строкой
Код
	$row = new mosComponent( $database );
и
Код
}
перед
Код
	// favourites icon
if ( !$mosConfig_favicon ) {
Если нужна — сделайте то же самое и вставьте её в шаблон «вручную».

11.
Код
SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1' AND access <= '0' AND parent=0
ORDER BY ordering
Очень похоже на запрос, возникающий при вызове mosShowHFMenu (горизонтальное плоское меню) в /modules/mod_mainmenu.php, но в запросе отсутствуют присутствовавшие бы в этом случае дополнительные переводы строк. Поэтому данный запрос, скорее всего, соответствует стороннему компоненту меню. И, видимо, это меню не кешируется.

12.
Код
SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1'
Скорее всего, тоже соответствует стороннему компоненту меню.

13-16. вызывается при вызове функции getItemid в /includes/joomla.php.
По-идее, если всё кешируется, то этого вызова быть не должно.

13. +
Код
SELECT COUNT( id )
 FROM jos_menu
 WHERE type = 'content_typed'
 AND published = 1
вызывается в функции getStaticContentCount (/includes/joomla.php)
Цель — определить количество статического контента. Можно исключить этот запрос, если заменить
Код
		if ($_Itemid == '' && $typed && $this->getStaticContentCount()) {
на
Код
		if ($_Itemid == '' && $typed) {
в файле /includes/joomla.php

14.
Код
SELECT id
 FROM jos_menu
 WHERE type = 'content_typed'
 AND published = 1
 AND link = 'index.php?option=com_content&task=view&id=2254'
вызывается в функции getItemid в /includes/joomla.php

15. +
Код
SELECT COUNT( id )
 FROM jos_menu
 WHERE type = 'content_item_link'
 AND published = 1
вызывается в функции getContentItemLinkCount (/includes/joomla.php)
Цель - определить количество ссылок на содержимое. Как и ранее, можно попробовать заменить
Код
		if ($_Itemid == '' && $link && $this->getContentItemLinkCount()) {
на
Код
		if ($_Itemid == '' && $link) {
в файле /includes/joomla.php

16.
Код
SELECT id
 FROM jos_menu
 WHERE type = 'content_item_link'
 AND published = 1
 AND link = 'index.php?option=com_content&task=view&id=2254'
вызывается в функции getItemid в /includes/joomla.php

17-19.
Код
SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1' AND access <= '0' AND parent=1
ORDER BY ordering

SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND parent>0 AND published='1'

SELECT m.* FROM jos_menu AS m
WHERE menutype='mainmenu' AND published='1' AND access <= '0' AND parent=-1
ORDER BY ordering
Скорее всего, эти запросы соответствуют стороннему компоненту меню, для которого отключено кеширование.

20. -
Код
SELECT id, title, module, position, content, showtitle, params
 FROM jos_modules AS m
 INNER JOIN jos_modules_menu AS mm ON mm.moduleid = m.id
 WHERE m.published = 1
 AND m.access <= 0
 AND m.client_id != 1
 AND ( mm.menuid = 0 OR mm.menuid = 1 )
 ORDER BY ordering
возникает в файле /includes/frontend.php при вызове функции initModules (обычно это происходит при вызове mosLoadModules в шаблоне).
Цель — загрузить информацию об установленных модулях. Запрос нужный — тут уж ничего не поделаешь.

21. ?
Код
SELECT id
 FROM jos_menu
 WHERE link = 'index.php?option=com_search'
возникает в модуле mod_search (файл /modules/mod_search.php).
Цель запроса — ищется пункт меню «Поиск» (чтобы сделать активным этот пункт меню при выдаче страницы с результатами поиска). Наличие такого запроса говорит о том, что для модуля «Поиск» не выставлено кеширование.

22. ?
Код
SELECT folder, element, published, params
 FROM jos_mambots
 WHERE access <= 0
 AND folder = 'content'
 ORDER BY ordering
Цель запроса — загрузка мамботов группы content (выполняется обычно в com_content или в модулях типа User, но может также и в сторонних компонентах/модулях). Раз происходит их загрузка, то, возможно, не для всех модулей установлено кеширование.
« Последнее редактирование: 28.02.2007, 11:48:30 от Physicist »
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: Joomla сильно перегружает сервер :(
« Ответ #11 : 27.02.2007, 22:20:41 »
Проверяйте! Только делайте backup всех файлов, в которые вносите изменения — я большинство из написанного не проверял (все умозаключения делались из изучения исходного кода Joomla!).

Будут проблемы/вопросы/замечания/комментарии — пишите.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Joomla сильно перегружает сервер :(
« Ответ #12 : 27.02.2007, 22:48:51 »
по последнему:
Цель запроса — загрузка мамботов группы content (выполняется обычно в com_content или com_frontpage, но может также в сторонних компонентах/модулях). Раз происходит их загрузка, то, возможно, не для всех модулей установлено кеширование.
мамботы не кэшируются в прямую. производится один вызов на 1 загрузку страницы в отличие от вызова на каждый материал. это разумный компромисс ибо боты кэшировать нельзя :(

сама процедура вызова не определена в джумле и зависит только от кода бота
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: Joomla сильно перегружает сервер :(
« Ответ #13 : 27.02.2007, 23:04:09 »
по последнему:мамботы не кэшируются в прямую. производится один вызов на 1 загрузку страницы в отличие от вызова на каждый материал. это разумный компромисс ибо боты кэшировать нельзя :(

сама процедура вызова не определена в джумле и зависит только от кода бота
Загрузка мамботов группы content выполняется либо в HTML_content::show (/components/com_content/content.html.php), либо в modules_html::module (/includes/frontend.html.php), либо в сторонних компонентах/модулях. В первых двух случаях результат вызова функций может кешироваться. Но раз загрузка мамботов происходит — значит, кешируется не всё.
*

luxter

  • Новичок
  • 8
  • 0 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #14 : 27.02.2007, 23:18:47 »
Спасибо за очень подробный ответ.
Пункт 2 и 3 сделал.

По поводу 1-го и 8 сразу догадался, что первый незя так как на самом деле ето коментарии вызываются.

Остальное как домучаю отпишусь о результатах.


Цитировать
13-16. вызывается при вызове функции getItemid в /includes/joomla.php.
По-идее, если всё кешируется, то этого вызова быть не должно.

Из-за того что майн меню. Это сторонний модуль при этом он не в модулях а в упаковки с шаблоном.
Код
<?php
/**
* @version $Id: md_submenu.php,v 1.2 2005/04/28 04:56:49 rhuk Exp $
* @package Mambo
* @copyright (C) 2000 - 2005 Miro International Pty Ltd
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
* Mambo is Free Software
*/

/** ensure this file is being included by a parent file */
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

if (!defined( '_MOS_SUBMENU_MODULE' )) {
/** ensure that functions are declared only once */
define( '_MOS_SUBMENU_MODULE', 1 );
$hilightid = -1;
$hilightid2 = -1;

$tab_colors = array('red');
$tab_color = 'red';
$tab_index = 0;

/**
* Utility function for writing a menu link
*/
function rtGetTabColor() {
global $tab_color;
return $tab_color;
}


function rtGetHilightid() {
global $hilightid;
return $hilightid;
}

function rtGetSubMenuLink( $mitem, $level, $hilight=false , $color_index=false) {
global $Itemid, $mosConfig_live_site, $mainframe, $hilightid, $hilightid2, $menuname, $tab_colors, $tab_color, $tab_index, $forcehilite;
$txt = '';
$id = '';

switch ($mitem->type) {
case 'separator':
case 'component_item_link':
break;
case 'content_item_link':
$temp = split("&task=view&id=", $mitem->link);
$mitem->link .= '&Itemid='. $mainframe->getItemid($temp[1]);
break;
case 'url':
if ( eregi( 'index.php\?', $mitem->link ) ) {
if ( !eregi( 'Itemid=', $mitem->link ) ) {
$mitem->link .= '&Itemid='. $mitem->id;
}
}
break;
case 'content_typed':
default:
$mitem->link .= '&Itemid='. $mitem->id;
break;
}

if ($color_index) {
$id .= $tab_colors[($tab_index)%count($tab_colors)];
$tab_index++;

}
// Active Menu highlighting
$current_itemid = trim( mosGetParam( $_REQUEST, 'Itemid', 0 ) );
if ( !$current_itemid && !$hilight ) {
//$id = '';
} else if (($current_itemid == $mitem->id || $hilight)) {
if ($level == 0) {
$tab_color = $id;
$menuname = $mitem->name;
$hilightid = $mitem->id;
} elseif ($level == 1) {
$hilightid2 = $mitem->id;
$menuname = $mitem->name;
}
$id = 'active_menu';
}

$id = ' class="' . $id . '"';
$mitem->link = ampReplace( $mitem->link );

if ( strcasecmp( substr( $mitem->link,0,4 ), 'http' ) ) {
$mitem->link = sefRelToAbs( $mitem->link );
}

switch ($mitem->browserNav) {
// cases are slightly different
case 1:
// open in a new window
$txt = '<li'. $id . '><a href="'. $mitem->link .'" target="_blank">'. $mitem->name ."</a></li>\n";
break;

case 2:
// open in a popup window
$txt = "<li". $id . "><a href=\"#\" onclick=\"javascript: window.open('". $mitem->link ."', '', 'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=780,height=550'); return false\">". $mitem->name ."</a></li>\n";
break;

case 3:
// don't link it
$txt = '<li'. $id . '><span class="seperator">'. $mitem->name ."</span></li>\n";
break;

default: // formerly case 2
// open in parent window
$txt = '<li'. $id . '><a href="'. $mitem->link .'">'. $mitem->name ."</a></li>\n";
break;
}

return $txt;
}

function rtSubMenu ( $menutype, $level ) {
global $database, $my, $cur_template, $Itemid, $hilightid, $hilightid2, $forcehilite, $menuname;
global $mosConfig_absolute_path, $mosConfig_shownoauth;

if ($level==1) {
$hilightid = $hilightid;
$menuclass = "submenu";
}
if ($level==2) {
$hilightid = $hilightid2;
$menuclass = "sidenav";
}

if ($mosConfig_shownoauth) {
$sql = "SELECT m.* FROM #__menu AS m"
. "\nWHERE menutype='". $menutype ."' AND published='1' AND parent=" . $hilightid
. "\nORDER BY ordering";
} else {
$sql = "SELECT m.* FROM #__menu AS m"
. "\nWHERE menutype='". $menutype ."' AND published='1' AND access <= '$my->gid' AND parent=" . $hilightid
. "\nORDER BY ordering";
}
$database->setQuery( $sql );

$sublevel = $database->loadObjectList( 'id' );

if ($level == 1) {
//work out if this should be highlighted
$sql = "SELECT m.* FROM #__menu AS m"
. "\nWHERE menutype='". $menutype ."' AND parent>0 AND published='1'";
$database->setQuery( $sql );
$subrows = $database->loadObjectList( 'id' );
$maxrecurse = 5;
$childid = $Itemid;

//this makes sure toplevel stays hilighted when submenu active
while ($maxrecurse-- > 0) {
$childid = getParentRow($subrows, $childid);
if (isset($childid) && $childid >= 0 && $subrows[$childid]) {
$hilightid2 = $childid;
} else {
break;
}
}
}



$links = array();
$subnav = '';
foreach ($sublevel as $menuitem) {
if ($menuitem->id == $hilightid2) {
$hilight = true;
} else {
$hilight = false;
}
$links[]  = rtGetSubMenuLink( $menuitem, $level, $hilight, true );
}

if (count( $links )) {
if ($level==2) $subnav .= '<div class="moduletable"><h3>' . $menuname . ' menu</h3>';
$subnav .= '<ul class="'. $menuclass .'">';
foreach ($links as $link) {
$subnav .= $link;
}
$subnav .= '</ul>';
if ($level==2) $subnav .= '</div>';

}
return $subnav;

}



function rtShowHorizMenu(  $menutype) {
global $database, $my, $cur_template, $Itemid, $hilightid, $forcehilite;
global $mosConfig_absolute_path, $mosConfig_shownoauth;

$topnav = '';

if ($mosConfig_shownoauth) {
$sql = "SELECT m.* FROM #__menu AS m"
. "\nWHERE menutype='". $menutype ."' AND published='1' AND parent=0"
. "\nORDER BY ordering";
} else {
$sql = "SELECT m.* FROM #__menu AS m"
. "\nWHERE menutype='". $menutype ."' AND published='1' AND access <= '$my->gid' AND parent=0"
. "\nORDER BY ordering";
}
$database->setQuery( $sql );

$topmenu = $database->loadObjectList( 'id' );

//work out if this should be highlighted
$sql = "SELECT m.* FROM #__menu AS m"
. "\nWHERE menutype='". $menutype ."' AND published='1'";
$database->setQuery( $sql );
$subrows = $database->loadObjectList( 'id' );
$maxrecurse = 5;
$parentid = $Itemid;

//this makes sure toplevel stays hilighted when submenu active
while ($maxrecurse-- > 0) {
$parentid = getParentRow($subrows, $parentid);
if (isset($parentid) && $parentid >= 0 && $subrows[$parentid]) {
$hilightid = $parentid;
} else {
break;
}
}

$links = array();
$i = 0;
foreach ($topmenu as $menuitem) {
$hilight = false;
if (isset($forcehilite) && $forcehilite && $forcehilite == $i++) {
$hilight = true;
} else {
if ($menuitem->id == $hilightid) {
$hilight = true;
}
}
$links[] = rtGetSubMenuLink( $menuitem, 0, $hilight, true );
}




$menuclass = 'mainlevel';
if (count( $links )) {

$topnav .= '<ul id="'. $menuclass .'">';
foreach ($links as $link) {
$topnav .= $link;
}
$topnav .= '</ul>';

}
return $topnav;
}

function getParentRow($rows, $id) {
if (isset($rows[$id]) && $rows[$id]) {
if($rows[$id]->parent > 0) {
return $rows[$id]->parent;
}
}
return -1;
}

function beginsWith( $str, $sub ) {
   return ( substr( $str, 0, strlen( $sub )-1 ) == $sub );
}

}

?>

Цитировать
21
возникает в модуле mod_search (файл /modules/mod_search.php).

Это тоже в шаблоне. Лайф поиск. Тока сегодня обратил внимание что это сторонний модуль.
Код
<?php 
// Adapted from a combination of Joomla content.search and livesearch
/**
* @version $Id: content.searchbot.php 2444 2006-02-17 18:59:08Z stingrey $
* @package Joomla
* @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See COPYRIGHT.php for copyright notices and details.
*/
// +----------------------------------------------------------------------+
// | Copyright (c) 2004 Bitflux GmbH                                      |
// +----------------------------------------------------------------------+
// | Licensed under the Apache License, Version 2.0 (the "License");      |
// | you may not use this file except in compliance with the License.     |
// | You may obtain a copy of the License at                              |
// | http://www.apache.org/licenses/LICENSE-2.0                           |
// | Unless required by applicable law or agreed to in writing, software  |
// | distributed under the License is distributed on an "AS IS" BASIS,    |
// | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or      |
// | implied. See the License for the specific language governing         |
// | permissions and limitations under the License.                       |
// +----------------------------------------------------------------------+
// | Author: Bitflux GmbH <devel@bitflux.ch>                              |
// +----------------------------------------------------------------------+

define( '_VALID_MOS', 1 );
define( '_BASEPATH', dirname(__FILE__) );

include_once( _BASEPATH.'/../../../globals.php' );
require_once( _BASEPATH.'/../../../configuration.php' );
require_once( _BASEPATH.'/../../../includes/joomla.php' );

// loads english language file by default
if ($mosConfig_lang=='') {
$mosConfig_lang = 'english';
}
include_once( $mosConfig_absolute_path .'/language/' . $mosConfig_lang . '.php' );
$iso = explode( '=', _ISO );
header('Content-type: text/html; charset='. $iso[1]);

global $database;
global $mosConfig_offset;

$text = mosGetParam( $_GET, 's', '' );
$text = $database->getEscaped( $text );

$id=0;
$order = 'a.created ASC';
$morder = 'a.title ASC';
$limit = 15;
$phrase='';

$nullDate = $database->getNullDate();
$now = date( 'Y-m-d H:i:s', time()+$mosConfig_offset*60*60 );

$text = trim( $text );
if ($text == '') {
return array();
}

$words = explode( ' ', $text );
$wheres = array();
foreach ($words as $word) {
$wheres2 = array();
$wheres2[] = "LOWER(a.title) LIKE '%$word%'";
$wheres2[] = "LOWER(a.introtext) LIKE '%$word%'";
$wheres2[] = "LOWER(a.fulltext) LIKE '%$word%'";
$wheres2[] = "LOWER(a.metakey) LIKE '%$word%'";
$wheres2[] = "LOWER(a.metadesc) LIKE '%$word%'";
$wheres[] = implode( ' OR ', $wheres2 );
}
$where = '(' . implode( ($phrase == 'all' ? ') AND (' : ') OR ('), $wheres ) . ')';

// search content items
$query = "SELECT a.title AS title,"
. "\n a.created AS created,"
. "\n CONCAT(a.introtext, a.fulltext) AS text,"
. "\n CONCAT_WS( '/', u.title, b.title ) AS section,"
. "\n CONCAT( 'index.php?option=com_content&task=view&id=', a.id ) AS href,"
. "\n '2' AS browsernav"
. "\n FROM #__content AS a"
. "\n INNER JOIN #__categories AS b ON b.id=a.catid"
. "\n INNER JOIN #__sections AS u ON u.id = a.sectionid"
. "\n WHERE ( $where )"
. "\n AND a.state = 1"
. "\n AND u.published = 1"
. "\n AND b.published = 1"
. "\n AND a.access <= $id"
. "\n AND b.access <= $id"
. "\n AND u.access <= $id"
. "\n AND ( publish_up = '$nullDate' OR publish_up <= '$now' )"
. "\n AND ( publish_down = '$nullDate' OR publish_down >= '$now' )"
. "\n GROUP BY a.id"
. "\n ORDER BY $order"
;
$database->setQuery( $query, 0, $limit );
$list = $database->loadObjectList();

// search static content
$query = "SELECT a.title AS title, a.created AS created,"
. "\n a.introtext AS text,"
. "\n CONCAT( 'index.php?option=com_content&task=view&id=', a.id, '&Itemid=', m.id ) AS href,"
. "\n '2' as browsernav, 'Menu' AS section"
. "\n FROM #__content AS a"
. "\n LEFT JOIN #__menu AS m ON m.componentid = a.id"
. "\n WHERE ($where)"
. "\n AND a.state = 1"
. "\n AND a.access <= $id"
. "\n AND m.type = 'content_typed'"
. "\n AND ( publish_up = '0000-00-00 00:00:00' OR publish_up <= '$now' )"
. "\n AND ( publish_down = '0000-00-00 00:00:00' OR publish_down >= '$now' )"
. "\n ORDER BY ". ($morder ? $morder : $order)
;
$database->setQuery( $query, 0, $limit );
$list2 = $database->loadObjectList();

// search archived content
$query = "SELECT a.title AS title,"
. "\n a.created AS created,"
. "\n a.introtext AS text,"
. "\n CONCAT_WS( '/', '". _SEARCH_ARCHIVED ." ', u.title, b.title ) AS section,"
. "\n CONCAT('index.php?option=com_content&task=view&id=',a.id) AS href,"
. "\n '2' AS browsernav"
. "\n FROM #__content AS a"
. "\n INNER JOIN #__categories AS b ON b.id=a.catid"
. "\n INNER JOIN #__sections AS u ON u.id = a.sectionid"
. "\n WHERE ( $where )"
. "\n AND a.state = -1"
. "\n AND u.published = 1"
. "\n AND b.published = 1"
. "\n AND a.access <= $id"
. "\n AND b.access <= $id"
. "\n AND u.access <= $id"
. "\n AND ( publish_up = '0000-00-00 00:00:00' OR publish_up <= '$now' )"
. "\n AND ( publish_down = '0000-00-00 00:00:00' OR publish_down >= '$now' )"
. "\n ORDER BY $order"
;
$database->setQuery( $query, 0, $limit );
$list3 = $database->loadObjectList();
$searchResult= array_merge( $list, $list2, $list3 );

?>
<div id="LSRes"><?php if ( $searchResult) { for ($i=0;$i<count($searchResult);$i++) { ?>
<div class="LSRow"><a href="<?php echo $searchResult[$i]->href ?>" rel="bookmark" title="Link: <?php echo $searchResult[$i]->title; ?>"><?php echo $searchResult[$i]->title; ?></a>
</div><?php } } else { ?>No Results<?php } ?>
</div>

<?php

function checkCurrentOS( $_OS )
{
   if ( strcmp( $_OS, _CUR_OS ) == 0 ) {
       return true;
   }
   return false;
}

function isRelative( $_dir )
{
   if ( checkCurrentOS( "Win" ) ) {
       return ( preg_match( "/^\w+:/", $_dir ) <= 0 );
   }
   else {
       return ( preg_match( "/^\//", $_dir ) <= 0 );
   }
}

function unifyPath( $_path )
{
   if ( checkCurrentOS( "Win" ) ) {
       return str_replace( "\\", _PL_OS_SEP, $_path );
   }
   return $_path;
}

function getRealpath( $_path )
{
   /*
     * This is the starting point of the system root.
     * Left empty for UNIX based and Mac.
     * For Windows this is drive letter and semicolon.
     */
   $__path = $_path;
   if ( isRelative( $_path ) ) {
       $__curdir = unifyPath( realpath( "." ) . _PL_OS_SEP );
       $__path = $__curdir . $__path;
   }
   $__startPoint = "";
   if ( checkCurrentOS( "Win" ) ) {
       list( $__startPoint, $__path ) = explode( ":", $__path, 2 );
       $__startPoint .= ":";
   }
   # From now processing is the same for WIndows and Unix, and hopefully for others.
   $__realparts = array( );
   $__parts = explode( _PL_OS_SEP, $__path );
   for ( $i = 0; $i < count( $__parts ); $i++ ) {
       if ( strlen( $__parts[ $i ] ) == 0 || $__parts[ $i ] == "." ) {
           continue;
       }
       if ( $__parts[ $i ] == ".." ) {
           if ( count( $__realparts ) > 0 ) {
               array_pop( $__realparts );
           }
       }
       else {
           array_push( $__realparts, $__parts[ $i ] );
       }
   }
   return $__startPoint . _PL_OS_SEP . implode( _PL_OS_SEP, $__realparts );
}


?>

Оба не управляются из админки.


Цитировать
10
Проверяется, нужно ли экспортировать RSS и если да, то в блок <head> сайта добавится строка
Код:

<link rel="alternate" type="application/rss+xml" title="..." href="..." />

Это же можно просто в индекс шаблона вписать и сделать как ты написал. Правильно ?
« Последнее редактирование: 27.02.2007, 23:58:35 от luxter »
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Joomla сильно перегружает сервер :(
« Ответ #15 : 28.02.2007, 11:01:46 »
2 Physicist: это, конечно, всё здорово и ты провёл большой кусок работы, но...
к сожалению, я вынужден тебя разочаровать :(
допустим (допустим), ты уменьшишь кол-во запросов с 20-30 до 10.
и... ты ничего не выиграешь.
я это говорю не смотря, на приведённые тобой графики. знаешь, почему?
потому, что ты "копаешь" базовый вариант джумлы, а он очень редко когда ставиться без изменений.

рекомендую (для разнообразия) поставить джумфиш и артио джумсеф - прозреешь.

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

зы. не сочти написанное за какую-то критику а-ля "туфта это всё".
просто я считаю, что ты смотришь на проблему не с той стороны.
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

luxter

  • Новичок
  • 8
  • 0 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #16 : 28.02.2007, 11:18:12 »
Цитировать
рекомендую (для разнообразия) поставить джумфиш и артио джумсеф - прозреешь.

Этот черный список компонентов можно ещё долго продолжать. Есть ещё такой мамбобот который позволяет вставить в статью рекламу ( не гугле ) так он более 60 запросов делает к базе.


Давай рекомендации в студию "Что делать...". Прогулялся по инету почти у каждого хостера на форуме пререкания владелцев сайтов на джумле и самих хостеров по нагрузке на сервак. По своему опыту знаю 6000 уникальных в сутки на джумле (базовый вариант) и тебя хостер уже не хочет видеть среди своих клиентов. (если только выделеный сервак брать)
*

boston

  • Захожу иногда
  • 495
  • 222 / 3
Re: Joomla сильно перегружает сервер :(
« Ответ #17 : 28.02.2007, 11:41:57 »
Joomla грузит сервер.., это факт. Но больше грузят всевозмоджные раасшиения.., у себя дуалоось понизить число запросов с 60 до 12 БЕЗ потери функционала главной старницы, просто умейте и не бойтесь пользоваться аналогами, ищите то что проще и экономичнее.., отклбючайте всё что не нужно или вызывает хоть чуточку сомнения.
Самая новая Joostina 1.3.0.5 UTF-8 stable | О найденных ошибках сообщаем | Расширения Joostina
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: Joomla сильно перегружает сервер :(
« Ответ #18 : 28.02.2007, 11:45:32 »
ты "копаешь" базовый вариант джумлы, а он очень редко когда ставиться без изменений.

рекомендую (для разнообразия) поставить джумфиш и артио джумсеф - прозреешь.
Ну, не думаю, что Joom!Fish использует большинство пользователей Joomla! :)
И вообще — это проблема разработчиков оптимизировать свои продукты. А если я буду думать, как оптимизировать ARTIO JoomSEF, то тут же появятся вопросы — а почему ARTIO JoomSEF, а не OpenSEF/SEF Advance/ещё что-нибудь.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Joomla сильно перегружает сервер :(
« Ответ #19 : 28.02.2007, 11:53:05 »
правильно. но...
я это к тому, что можно "ковыряеться" в 20 запросах, а поставь один компонент и он сразу увеличит их в Н-адцать раз.
вопрос - за что боролись?

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

кстати, OpenSEF 2.0 RC6 очень даже не плохо кэшируется.
то, что я видел, мне понравилось, но надо испытывать в реалии
« Последнее редактирование: 28.02.2007, 11:56:28 от userxp »
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

luxter

  • Новичок
  • 8
  • 0 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #20 : 28.02.2007, 12:06:11 »
Цитировать
"разборки" нагрузки - это уникальные вещи одной отдельно взятой джумлы с конкретными расширениями на конкретном хосте/сервере.

Я и пытался разобратся с конкретными нагрузками на отдельном хостере. Их как раз осталось немного. Советы Physicist
мне помогли судя по графику 1,5 - 2 % экономии цпу ещё появилось.


Цитировать
OpenSEF 2.0 RC6

Меня за него админ из тех поддержки обещал лично линчевать. Как всегда куча запросов.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Joomla сильно перегружает сервер :(
« Ответ #21 : 28.02.2007, 12:24:27 »
внимательней.
я написал про RC ШЕСТЬ, а не ПЯТЬ
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: Joomla сильно перегружает сервер :(
« Ответ #22 : 28.02.2007, 13:56:02 »
Провел «эксперимент»:
У меня получается в «чистой» Joomla!1.0.12 сделать 10 запросов на главной стандартными средствами (включением кеширования всего, что можно и отключением всего, что не кешируется). Если использовать хаки № 2+3+10, то получится 7 запросов. А если убрать pathway — то 6 (загрузка мамботов группы system, 3 запроса для сессий, проверка прав доступа к компоненту, загрузка модулей).
*

leko

  • Захожу иногда
  • 114
  • 4 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #23 : 28.02.2007, 15:47:56 »
У меня вроде помогает bot_optimizetables до 7000 хостинг держит без жалоб (тьфу, тьфу, тьфу  ::) )

А ещё советую попробывать com_jrecache  :D
*

Physicist

  • Глобальный модератор
  • 984
  • 194 / 0
  • Рябов Денис
Re: Joomla сильно перегружает сервер :(
« Ответ #24 : 28.02.2007, 16:07:10 »
2leko: полностью согласен.
А JRE Cache — это вообще довольно мощная штука, которая позволяет кешировать так, что запросов к БД не будет вовсе. Вот только за нее деньги платить нужно (хотя и не много — $15).
*

yAnTar

  • Захожу иногда
  • 296
  • 81 / 3
Re: Joomla сильно перегружает сервер :(
« Ответ #25 : 28.02.2007, 21:41:53 »
Тестировал локально, JRE Cache не дружит с JoomFish, что в таком случае делать ?
Он ставит ссылку на той язык, на которам первый раз зашли.
Firefox the best, Google the best, jQuery the best.
yAnTar блог
*

Sedoy

  • Давно я тут
  • 897
  • 87 / 10
  • Интересно,в какой кодировке пишут врачи?
Re: Joomla сильно перегружает сервер :(
« Ответ #26 : 01.03.2007, 14:28:18 »
вчера тоже тестил локально на "чистой" с дистрибутива
с нуля показало 36 запросов
после установил стандарные общий кеш и кеши опубликованных моделей - получил 13 (все относительно главной)
затем установил JRE - после перезаписи (в его настройках) файла index на шаблоне rhuk_solarflare_ii пошли ванинги
на madeyourweb их нет, выходит не с каждым шаблоном "дружит"
при старте (обнуленном кеше) выдает 15 запросов, после 2-3 обновлений страницы выдает
File size: 4.6 Kb
Generation time:0.0060489 sec.
и все (аналогичный алгоритм и на других страницах) - т.е. как бы вообще запросов нет?
Что б правильно задать вопрос - нужно знать на него ответ!
FAQ по Joomla!
Где скачать шаблоны Joomla Статьи и обзоры Желаю Вам здоровья в личной жизни - живите долго и часто :)
*

luxter

  • Новичок
  • 8
  • 0 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #27 : 01.03.2007, 15:03:48 »


Ну в общем так со всеми рекомендациями (кешировани, отключение модулей, ботов компонентов...) + бот  OptimizeTables нагрузка цпу уменьшилась наполовину
если  + хаки от Physicist ещё 1% Запросов к базе 12.

+ JRE Cache это ещё 2%. На данный момент средняя нагрузка не превышает 4%. Я очень доволен :) всем огромное спасибо за участие.

*

leko

  • Захожу иногда
  • 114
  • 4 / 0
Re: Joomla сильно перегружает сервер :(
« Ответ #28 : 19.05.2007, 14:47:07 »
Кстати вот нашел компонент Ircmaxell's Page Cache http://www.ircmaxell.com/component/option,com_docman/task,cat_view/gid,20/Itemid,23/

кто нибудь пробовал ?    ::)
*

yAnTar

  • Захожу иногда
  • 296
  • 81 / 3
Firefox the best, Google the best, jQuery the best.
yAnTar блог
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Миграция с Joomla 1.0.x на Joomla 1.5.x (mtwmigrator)

Автор spot

Ответов: 359
Просмотров: 237194
Последний ответ 29.07.2022, 10:47:52
от Dunkan
Как убрать цикличиские ссылки Joomla 1.0?

Автор p4o1

Ответов: 4
Просмотров: 9318
Последний ответ 13.12.2019, 11:31:05
от vest
Восстановление пункта меню админки в Joomla 1.0.15

Автор Vicom

Ответов: 0
Просмотров: 5114
Последний ответ 15.07.2017, 11:36:04
от Vicom
сколько стоит обновить Joomla 1 на Joomla 3* нужна помощь

Автор zvi

Ответов: 10
Просмотров: 4311
Последний ответ 16.02.2016, 11:12:47
от zvi
Joomla и TopServer 2.1

Автор frimen

Ответов: 3
Просмотров: 11268
Последний ответ 25.02.2015, 20:28:30
от m1