Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
avgaz

Падает сервер при входе в админку

Recommended Posts

Здравствуйте, обновил форум с 3.4.5 на 4.4.4 все роде нормально два дня, пересчет шёл и тд, все пересчитало и работало нормально потихоньку все настраивал.

Последнее не помню, что менял в админке(вроде последнее это отредактировал шаблоны userBar и mobileNavigation в добавил доп.ссылки в панель пользователя типа ссылки на Мои Публикации и ссылку для админа вход в админку портала) через какое то время пытаюсь войти в админку форума и сервер зависает напрочь забивает все процессами в логах ошика mod_fcgid: can't apply process slot for перезагружаю сервер и все нормально работает 140-170 процессов, опять пробую зайти и опять все зависает процессов сразу 300-380 в логах опять эта ошибка, перезагрузка и опять нормальная работа хоть несколько часов, пока опять не попробую войти в админку и все повисает на авторизации.

В чем проблема как решить её?? в админку естественно не войти, что бы попробовать откатить шаблоны которые редактировал ((

содержимое /etc/apache2/mods-available/fcgid.conf

<IfModule mod_fcgid.c>
FcgidConnectTimeout 20
IPCCommTimeout 600
 MaxRequestLen 104857600
 <IfModule mod_mime.c>
   AddHandler fcgid-script .fcgi
 </IfModule>
</IfModule>

пробовал добавлять туда

MaxRequestsPerProcess 500
DefaultMaxClassProcessCount 250
IdleTimeout 60
MaxProcessCount 2000

но не коем образом это проблему не решала, разве что процессов ещё больше становилось

 

Так же сильно выросла таблица ibf_core_output_cache 2.8г и продолжает увеличиваться, когда вся база после обновления была 1.7г

Edited by avgaz

Share this post


Link to post
Share on other sites

Замучался не как не могу решить проблему вернее её даже найти, а она походу связана с базой данных. Решил попробовать подключить данную базу на второй сайт на котором тоже стоит версия 4.4 который полностью работает в админку заходит все отлично, в конфиге прописал подключение к базе данных проблемного сайта, второй сайт загрузился с этой базой пробую войти в админку и на тебе так же все падает, то есть что то с базой проблемного сайт. попробовал выполнить SHOW PROCESSLIST там там множество таких записей Waiting for table level lock /*IPS\Session\Store\_Database::loadSession:93*/ SE.

 

Теперь в обще не знаю куда копать (((

 

Посмотрел что таблица core_sessions имеет 27000 записей, что в принципе не может быть столько в онлайне, очистил её и без проблем вошёл в админку. С чем могло быть связано такое наполнение этой таблицы? и как это связано с увеличением процессов при входе в админку

Edited by avgaz

Share this post


Link to post
Share on other sites
SHOW PROCESSLIST там там множество таких записей Waiting for table level lock /*IPS\Session\Store\_Database::loadSession:93*/ SE.

Используйте InnoDB. Там блокировка идет на уровне записи, а не таблицы.

Share this post


Link to post
Share on other sites

Используйте InnoDB. Там блокировка идет на уровне записи, а не таблицы.

Ситуация повторилась, таблица ibf_core_sessions имеет записей 17360 и mysql перестает отвечать при заходе в админку или на страницу пользователи онлайн то есть где список пользователей онлайн есть.

 

как перевести таблицы правильно в InnoDB и поможет ли это решить проблему??

почему такая ситуация почему забивается эта таблица??

Edited by avgaz

Share this post


Link to post
Share on other sites
ALTER TABLE ibf_core_sessions ENGINE=InnoDB;

Share this post


Link to post
Share on other sites

Не пойму почему эта таблица постоянно увеличивается, очищаешь через phpmyadmin через полчаса там уже более 5тыс записей и постоянно увеличивается, хотя в реальности с гостями максимум 200-300 пользователей

 

может какие задачи не выполняются? по этому и не очищается таблица сессий и output_cache тоже растет по идее она тоже должна очищатся по времени кеша

Edited by avgaz

Share this post


Link to post
Share on other sites

может какие задачи не выполняются?

Смотрите в списке задач.

Share this post


Link to post
Share on other sites
хотя в реальности с гостями максимум 200-300 пользователей

 

У меня с роботами 11000 уников в сутки, а без роботов 150 ))

Share this post


Link to post
Share on other sites

Смотрите в списке задач.

В списке задач она висит и без ошибок был косяк это при обновлении пересчете использовал cron после обновления задачу из крона удалил, а в алминке не переключил, что задачи по трафику запускать видимо это и вызвало переполнение этой таблицы, хотя все равно почему при более чем 4к записей в таблице сервер уходит в аут на страницах где есть вывод списка онлайн, то есть это в админке, в списке онлайн пользователей, так же если разместить виджет онлайн пользователей то тоже создает большое количество процессов и сервер перегружает перестает отвечать??

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

 

У меня с роботами 11000 уников в сутки, а без роботов 150 ))

тут проблема переполнения таблицы было записями и как понял при большом количестве записей в таблице ibf_core_sessions страницы где выводится список онлайн просто перегружали сервер процессами и он тупо не справлялся, даже сейчас когда записей в этой таблице не более 3000 при открытии этих страниц, только одним человеком добавляется порядка 50-100 дополнительных процессов и страница загружается по минуте.

 

Так пока и не понял как решить проблему эту???

Share this post


Link to post
Share on other sites

Ну, как решить. Как учили. Отключить все не дефолтное (темы, приложения, убрать все изменения в коде) и смотреть. Базу переконвертировать в инно. Нгинкс конф подкрутить. Сервер взять дедик в хетзнере...

Edited by Zero108

Share this post


Link to post
Share on other sites

Ну, как решить. Как учили. Отключить все не дефолтное (темы, приложения, убрать все изменения в коде) и смотреть. Базу переконвертировать в инно. Нгинкс конф подкрутить. Сервер взять дедик в хетзнере...

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

Причем не понятно как работает очищение этой таблицы как я понимаю раз в 15минут выполняется запрос на очищение, но такое ощущение, что очищается явно не все что старше 15 минут т.к в списке пользователей онлайн есть те кто совершал 30 минут назад.

Вот где этот код который очищает таблицу от старых сессий? где время задач настраивается?

 

Сейчас например в этой таблице 7500 тыс записей, и и запрос

SELECT * FROM `ibf_core_sessions` WHERE `running_time` > unix_timestamp(now()) - 1200

выдает 4986 то есть 5к записей которые уже без движения более 20минут

Edited by avgaz

Share this post


Link to post
Share on other sites

а так и должно быть, что сессии с одинаковыми ip там дублируются? то есть яндекс бот в этой таблице с одним ip имеет несколько записей, я просто понять не могу почему эта таблица разрастается так. Не когда в онлайне и не боло более 900 с гостями в месте, а тут постоянно тысячи записей в этой таблице

Edited by avgaz

Share this post


Link to post
Share on other sites

Пытаясь решить проблему выяснил что вот эта функция загружает sql на полную

public function getOnlineUsers( $flags=0, $sort='desc', $limit=NULL, $memberGroup=NULL, $showAnonymous=FALSE )
{
	/* Query */
	$where = array(
		array( 's.running_time>?', \IPS\DateTime::create()->sub( new \DateInterval( 'PT30M' ) )->getTimeStamp() ),
		array( "s.login_type!=?", \IPS\Session\Front::LOGIN_TYPE_SPIDER )
	);

	if ( ! $showAnonymous )
	{
		$where[] = array( "s.login_type!=?", \IPS\Session\Front::LOGIN_TYPE_ANONYMOUS );
	}

	if ( ! $flags and ! $limit )
	{
		/* Simple query for PHP processing */
		return iterator_to_array( \IPS\Db::i()->select( 's.id,s.member_id,s.member_name,s.seo_name,s.member_group,s.login_type', array( 'core_sessions', 's' ), $where, 's.running_time ' . $sort )->setKeyField('id') );
	}
	else
	{
		/* Complex group by mode with all the lovely trimmings yum */
		$subWhere = $where;

		/* Ok, this looks odd, but the ONLY_FULL_GROUP_BY bites us here, so selecting max(id) allows us to return a session ID even though we're grouping on member_id */
		$where = array( array( "( core_sessions.id IN(?) OR ( core_sessions.member_id IS NULL AND core_sessions.login_type != ? AND core_sessions.running_time > ?) )", \IPS\Db::i()->select( 'MAX(id)', array( 'core_sessions', 's' ), $subWhere, NULL, NULL, 'member_id' ), \IPS\Session\Front::LOGIN_TYPE_SPIDER, \IPS\DateTime::create()->sub( new \DateInterval( 'PT30M' ) )->getTimeStamp() ) );

		/* Limiting to a user group? */
		if ( $memberGroup )
		{
			$where[] = array( 'core_sessions.member_group=?', $memberGroup );
		}

		/* Just looking for guests? */
		if ( $flags AND ! ( $flags & static::ONLINE_MEMBERS ) )
		{
			$where[] = array( '( core_sessions.member_id IS NULL )' );
		}

		if ( $flags AND ! ( $flags & static::ONLINE_GUESTS ) )
		{
			/* No guests */
			$where[] = array( 'core_sessions.member_id IS NOT NULL' );
		}

		/* Just fetching a count? */
		if ( $flags & static::ONLINE_COUNT_ONLY )
		{
			return \IPS\Db::i()->select( 'COUNT(*)', 'core_sessions', $where )->first();
		}

		return iterator_to_array( \IPS\Db::i()->select( '*', 'core_sessions', $where, 'core_sessions.running_time ' . $sort, $limit )->setKeyField('id') );
	}
}

и как я понял в этом месте вот это приводит к этому

\IPS\Db::i()->select( 'COUNT(*)', 'core_sessions', $where )->first();

так как если это удалить то страница открывается быстро, ну естественно только 30 записями на странице

 

не пойму в чем проблема форум в целом работает хорошо но как только идет вызов этой функции то все падает ((

Share this post


Link to post
Share on other sites

Перевел таблицу core_sessions в InnoDB база перестала падать при вызове этой функции getOnlineUsers, но как бы проблему это не решило т.к при вызове этой функции приходится ждать загрузки страницы по несколько секунд, при этом top показывает, что процесс mysql грузит процессор на 100% в остальных случаях все нормально (((

то есть пришлось закрыть доступ к списку онлайн и не использовать блок онлайна стандартный ((

Попробовал экспортировать эту таблицу с 2к записями на локалку(опенсервер) и там не каких проблем в обще нет, страницы где используется эта функция открываются мгновернно даже при таком количестве записей в таблице. Но есть разница в том что при одних и техже записях в этой таблице, форум показывает 350 онлайн, а локалка 750 онлайн, может в этом проблема форум что то ещё обрабатывается с этими онлайн? с ботами онлайн может связано есть может такая настройка где?

В общем может у кого есть мысли в чем проблема и как её решить то?? в обще не могу понять, что это и с чем вдруг стало связано (( может действительно где то накосячил в админке но где

Edited by avgaz

Share this post


Link to post
Share on other sites

Вы же клиент в IPS. Создайте тикет. Пусть посмотрят на месте.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...