Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

Здравствуйте, обновил форум с 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г

Изменено пользователем avgaz

Рекомендованные сообщения

Опубликовано:
  • Автор

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

 

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

 

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

Изменено пользователем avgaz

Опубликовано:
SHOW PROCESSLIST там там множество таких записей Waiting for table level lock /*IPS\Session\Store\_Database::loadSession:93*/ SE.

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

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

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

 

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

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

Изменено пользователем avgaz

Опубликовано:
ALTER TABLE ibf_core_sessions ENGINE=InnoDB;

Опубликовано:
  • Автор

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

 

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

Изменено пользователем avgaz

Опубликовано:

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

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

Опубликовано:
хотя в реальности с гостями максимум 200-300 пользователей

 

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

Опубликовано:
  • Автор

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

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

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

 

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

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

 

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

Опубликовано:

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

Изменено пользователем Zero108

Опубликовано:
  • Автор

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

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

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

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

 

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

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

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

Изменено пользователем avgaz

Опубликовано:
  • Автор

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

Изменено пользователем avgaz

Опубликовано:
  • Автор

Пытаясь решить проблему выяснил что вот эта функция загружает 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 записями на странице

 

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

Опубликовано:
  • Автор

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

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

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

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

Изменено пользователем avgaz

Опубликовано:

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

Опубликовано:
  • Автор

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

Создавал, ответ был типа нормально это, смотреть не стали ((

 

Скачал бэкап сайта на локалку, что бы проверить в настройках форума дело или нет и на локалке работает нормально все, страница онлайн пользователей открывается без затыков с онлай 300+, значит, дело как я понимаю в настройке сервера?

Может есть у кого какие предположения, что именно может влиять на эту тормознутость именно на страницах вывода онлайн?

Ещё такой вопрос, в mysql вернее phpmyadmin показывает, что в таблица ibf_core_output_cache имеет большую фрагментацию то есть 150мб при 200мб данных в ней, далее идет таблица ibf_core_sessions но она InnoDB и там не кажет сколько. С чем это может быть связанно и не в этом причина?

post-16492-0-27883200-1564240523_thumb.jpg

Изменено пользователем avgaz

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.