avgaz 8 07/23/2019 06:26 PM (edited) Здравствуйте, обновил форум с 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 July 23, 2019 by avgaz Share this post Link to post
avgaz 8 07/23/2019 10:50 PM (edited) Замучался не как не могу решить проблему вернее её даже найти, а она походу связана с базой данных. Решил попробовать подключить данную базу на второй сайт на котором тоже стоит версия 4.4 который полностью работает в админку заходит все отлично, в конфиге прописал подключение к базе данных проблемного сайта, второй сайт загрузился с этой базой пробую войти в админку и на тебе так же все падает, то есть что то с базой проблемного сайт. попробовал выполнить SHOW PROCESSLIST там там множество таких записей Waiting for table level lock /*IPS\Session\Store\_Database::loadSession:93*/ SE. Теперь в обще не знаю куда копать ((( Посмотрел что таблица core_sessions имеет 27000 записей, что в принципе не может быть столько в онлайне, очистил её и без проблем вошёл в админку. С чем могло быть связано такое наполнение этой таблицы? и как это связано с увеличением процессов при входе в админку Edited July 23, 2019 by avgaz Share this post Link to post
newbie 1,721 07/24/2019 05:55 AM SHOW PROCESSLIST там там множество таких записей Waiting for table level lock /*IPS\Session\Store\_Database::loadSession:93*/ SE.Используйте InnoDB. Там блокировка идет на уровне записи, а не таблицы. Share this post Link to post
avgaz 8 07/24/2019 07:11 AM (edited) Используйте InnoDB. Там блокировка идет на уровне записи, а не таблицы.Ситуация повторилась, таблица ibf_core_sessions имеет записей 17360 и mysql перестает отвечать при заходе в админку или на страницу пользователи онлайн то есть где список пользователей онлайн есть. как перевести таблицы правильно в InnoDB и поможет ли это решить проблему??почему такая ситуация почему забивается эта таблица?? Edited July 24, 2019 by avgaz Share this post Link to post
newbie 1,721 07/24/2019 08:34 AM ALTER TABLE ibf_core_sessions ENGINE=InnoDB; Share this post Link to post
avgaz 8 07/24/2019 09:17 AM (edited) Не пойму почему эта таблица постоянно увеличивается, очищаешь через phpmyadmin через полчаса там уже более 5тыс записей и постоянно увеличивается, хотя в реальности с гостями максимум 200-300 пользователей может какие задачи не выполняются? по этому и не очищается таблица сессий и output_cache тоже растет по идее она тоже должна очищатся по времени кеша Edited July 24, 2019 by avgaz Share this post Link to post
newbie 1,721 07/24/2019 09:25 AM может какие задачи не выполняются?Смотрите в списке задач. Share this post Link to post
Zero108 124 07/24/2019 10:58 AM хотя в реальности с гостями максимум 200-300 пользователей У меня с роботами 11000 уников в сутки, а без роботов 150 )) Share this post Link to post
avgaz 8 07/24/2019 12:36 PM Смотрите в списке задач.В списке задач она висит и без ошибок был косяк это при обновлении пересчете использовал cron после обновления задачу из крона удалил, а в алминке не переключил, что задачи по трафику запускать видимо это и вызвало переполнение этой таблицы, хотя все равно почему при более чем 4к записей в таблице сервер уходит в аут на страницах где есть вывод списка онлайн, то есть это в админке, в списке онлайн пользователей, так же если разместить виджет онлайн пользователей то тоже создает большое количество процессов и сервер перегружает перестает отвечать??Сейчас вроде задача по о чистке выполняется, то есть таблица периодически очищается, и не превышает 3к записей, но при этом записей все равно много которые уже более 15минут не активны. Пришлось закрыть страницу пользователей онлайн и убрать виджет, списка онлайн т.к при открытии этих страниц тормоза страница грузится по минуте, без них нормально все. У меня с роботами 11000 уников в сутки, а без роботов 150 )) тут проблема переполнения таблицы было записями и как понял при большом количестве записей в таблице ibf_core_sessions страницы где выводится список онлайн просто перегружали сервер процессами и он тупо не справлялся, даже сейчас когда записей в этой таблице не более 3000 при открытии этих страниц, только одним человеком добавляется порядка 50-100 дополнительных процессов и страница загружается по минуте. Так пока и не понял как решить проблему эту??? Share this post Link to post
Zero108 124 07/24/2019 06:24 PM (edited) Ну, как решить. Как учили. Отключить все не дефолтное (темы, приложения, убрать все изменения в коде) и смотреть. Базу переконвертировать в инно. Нгинкс конф подкрутить. Сервер взять дедик в хетзнере... Edited July 24, 2019 by Zero108 Share this post Link to post
avgaz 8 07/24/2019 08:19 PM (edited) Ну, как решить. Как учили. Отключить все не дефолтное (темы, приложения, убрать все изменения в коде) и смотреть. Базу переконвертировать в инно. Нгинкс конф подкрутить. Сервер взять дедик в хетзнере...Дак все и так на дефолте, суть в том, что эти страницы где идет опрос кто онлайн запрашивают данные всей таблицы разом ещё и параллельно делают запрос в таблицу пользователей и если таблица скажем на 5000 просто все не тянет. Причем не понятно как работает очищение этой таблицы как я понимаю раз в 15минут выполняется запрос на очищение, но такое ощущение, что очищается явно не все что старше 15 минут т.к в списке пользователей онлайн есть те кто совершал 30 минут назад.Вот где этот код который очищает таблицу от старых сессий? где время задач настраивается? Сейчас например в этой таблице 7500 тыс записей, и и запрос SELECT * FROM `ibf_core_sessions` WHERE `running_time` > unix_timestamp(now()) - 1200 выдает 4986 то есть 5к записей которые уже без движения более 20минут Edited July 24, 2019 by avgaz Share this post Link to post
avgaz 8 07/25/2019 07:24 AM (edited) а так и должно быть, что сессии с одинаковыми ip там дублируются? то есть яндекс бот в этой таблице с одним ip имеет несколько записей, я просто понять не могу почему эта таблица разрастается так. Не когда в онлайне и не боло более 900 с гостями в месте, а тут постоянно тысячи записей в этой таблице Edited July 25, 2019 by avgaz Share this post Link to post
avgaz 8 07/25/2019 03:39 PM Пытаясь решить проблему выяснил что вот эта функция загружает 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
avgaz 8 07/26/2019 11:45 AM (edited) Перевел таблицу core_sessions в InnoDB база перестала падать при вызове этой функции getOnlineUsers, но как бы проблему это не решило т.к при вызове этой функции приходится ждать загрузки страницы по несколько секунд, при этом top показывает, что процесс mysql грузит процессор на 100% в остальных случаях все нормально (((то есть пришлось закрыть доступ к списку онлайн и не использовать блок онлайна стандартный ((Попробовал экспортировать эту таблицу с 2к записями на локалку(опенсервер) и там не каких проблем в обще нет, страницы где используется эта функция открываются мгновернно даже при таком количестве записей в таблице. Но есть разница в том что при одних и техже записях в этой таблице, форум показывает 350 онлайн, а локалка 750 онлайн, может в этом проблема форум что то ещё обрабатывается с этими онлайн? с ботами онлайн может связано есть может такая настройка где?В общем может у кого есть мысли в чем проблема и как её решить то?? в обще не могу понять, что это и с чем вдруг стало связано (( может действительно где то накосячил в админке но где Edited July 26, 2019 by avgaz Share this post Link to post
newbie 1,721 07/27/2019 09:07 AM Вы же клиент в IPS. Создайте тикет. Пусть посмотрят на месте. Share this post Link to post