Jump to content
Local
morfey

Не все юзеры подключаются при рестарте

Recommended Posts

FreeBSD 8.2-Stable

Поставили новый сервер, новый старгазер 2.407-p1 (был 2.406)

php 5.3.8

 

 

При рестарте недоподключает 50-60 юзеров (скорее всего не срабатывает OnConnect)

 

В логах СТГ пусто.

 

Модули:

@mod_ao.conf																				  
@mod_cap_bpf.conf																		
@mod_ia.conf
@mod_rpc.conf																			  
@mod_sg.conf																				
@store_mysql.conf

 

В чем может быть проблема? Не знаю где рыть.

 

OnConnect

#!/bin/sh

LOGIN=$1
IP=$2
CASH=$3
ID=$4
/etc/stargazer/param online ${LOGIN} online	# php script добавляет в базу пометку что подключился
SPEED=`/etc/stargazer/param speed $LOGIN` # php script вытягивает скорость

fwcmd="/sbin/ipfw -q"

${fwcmd} table 13 delete ${IP}

if [ ${SPEED} = 128 ]
then
${fwcmd} table 1 add ${IP}
else
fi
if [ ${SPEED} = 256 ]
then
${fwcmd} table 2 add ${IP}
else
fi
..........

 

Скрипт запуска

#!/bin/sh
#
#
# PROVIDE: stargazer
# REQUIRE: mysql
# KEYWORD: FreeBSD
#
# Add the following lines to /etc/rc.conf to enable stargazer:
#
#stargazer_enable="YES"
#stargazer_flags="string" - Path to STG config dir
#
. /etc/rc.subr
name=stargazer
rcvar=`set_rcvar`
command=/usr/sbin/stargazer # Path to stargazer binary												 

start_precmd="start_precmd"																			
start_postcmd="start_postcmd"																		  
start_precmd()
{
   sleep 2
   }
   start_postcmd()
   {
		  ps -ax | grep $command | grep -v grep | awk '{print $1;}' > $pidfile
  }
  pidfile=/var/run/stargazer.pid
  stop_postcmd=stop_postcmd
  stop_postcmd()
  {
   killall stargazer
    rm -f $pidfile
}
# set defaults
stargazer_enable=${stargazer_enable:-"NO"}
stargazer_flags=${stargazer_flags:-"/etc/stargazer"}
required_files=${stargazer_flags}/stargazer.conf
load_rc_config $name
run_rc_command "$1"

 

P.S. Первый день работал нормально, потом нужно было рестартонуть сервер и все.

Share this post


Link to post
Share on other sites

На 2.406 такого эффекта нет?

Как вариант - увеличить ExecutersNum

Share this post


Link to post
Share on other sites

Небыло, попробую увеличить ExecutersNum до 2 и количество одновременных соединений mysql

Share this post


Link to post
Share on other sites

а ще обовязково увімкнути slow_query_log і натицькати індексів по полям що живуть в where :)

Share this post


Link to post
Share on other sites

Не помогло ;)

Share this post


Link to post
Share on other sites

А сколько всего онлайновых юзеров?

Share this post


Link to post
Share on other sites

Ну щас около 300 онлайн

Те юзера крторые не подключились попали в OnDisconnect

Share this post


Link to post
Share on other sites

Есть идеи?

Share this post


Link to post
Share on other sites

Было как-то я тоже словил такой глюк, но только один раз. Так я тогда тоже не понял из-за чего это.

Попробуйте 407.рц-3 у меня пока эта версия стоит.

Share this post


Link to post
Share on other sites

Хм. Протестил на другом серваке, проблема не повторилась :D

Share this post


Link to post
Share on other sites

После ребута сервака все подключились, если рестартонуть сам стг, опять та же трабла :D

Share this post


Link to post
Share on other sites

Ну щас около 300 онлайн

Те юзера крторые не подключились попали в OnDisconnect

Не понял. Для них что, вместо OnConnect выполнился OnDisconnect?

Или сразу после OnConnect сработал OnDisconnect?

Или не сразу а по прошествии некоторого времени?

 

Есть идеи?

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

Share this post


Link to post
Share on other sites

Юзера сразу после старта стг попадают в ондисконнект. НО! При рестарте сервера все ок, все подключаются. Но когда руками рестартонуть стг, некоторые юзеры попадают в ондисконнект. На тестовом сервере такого не повторяется. В чем беда, ума не приложу :)

Share this post


Link to post
Share on other sites

Юзера сразу после старта стг попадают в ондисконнект. НО! При рестарте сервера все ок, все подключаются. Но когда руками рестартонуть стг, некоторые юзеры попадают в ондисконнект. На тестовом сервере такого не повторяется. В чем беда, ума не приложу :)

Так, еще раз. При старте для некоторых абонов выполняется OnDisconnect вместо OnConnect? Или просто не выполняется OnConnect?

Нужно учесть что рестарт - это стоп и старт. И при стопе для всех подключенных абонов выполняется OnDisconnect.

Share this post


Link to post
Share on other sites

Перепроверил, не срабатывает онконнект:)

Share this post


Link to post
Share on other sites

А, величина скрипта ОнКоннект какая? Можно было бы одним глазком на него глянуть?

Как вариант напихать разных проверок в скрипт - и посмотреть на каком месте затыкается ОнКоннект, либо он вообще не запускается.

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

Share this post


Link to post
Share on other sites

Еще 3правила таких же как вверху

Share this post


Link to post
Share on other sites

Как только так и сразу. У нас еще и аплинк упал, с телефона сижу (((

Share this post


Link to post
Share on other sites

Та, писец. Наверное конкуренты в шпионы к вам зарылись. :)

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

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

Это одна из мыслей, что мне пришла в голову.

Share this post


Link to post
Share on other sites

Полный онконект. Версию mysql тоже менял (

 

#! /bin/sh

LOGIN=$1
IP=$2
CASH=$3
ID=$4
echo $2 >> /home/morfey/44.txt - # НЕ ЗАНОСИТ ИП НЕКОТОРЫХ ЮЗЕРОВ
/etc/stargazer/param online ${LOGIN} online # Пишет в базу что юзер онлайн, то же что и с предыдущим скриптом.
SPEED=`/etc/stargazer/param speed $LOGIN`

fwcmd="/sbin/ipfw -q"

${fwcmd} table 13 delete ${IP}

if [ ${SPEED} = 128 ]
then
${fwcmd} table 1 add ${IP}
else
fi
if [ ${SPEED} = 256 ]
then
${fwcmd} table 2 add ${IP}
else
fi
if [ ${SPEED} = 512 ]
then
${fwcmd} table 3 add ${IP}
else
fi
if [ ${SPEED} = 1024 ]
then
${fwcmd} table 4 add ${IP}
else
fi
if [ ${SPEED} = 1536  ]
then
${fwcmd} table 5 add ${IP}
else
fi
if [ ${SPEED} = 2048 ]
then
${fwcmd} table 6 add ${IP}
else
fi
if [ ${SPEED} = 3072 ]
then
${fwcmd} table 7 add ${IP}
else
fi
if [ ${SPEED} = 4096 ]
then
${fwcmd} table 8 add ${IP}
else
fi
if [ ${SPEED} = 5120 ]
then
${fwcmd} table 9 add ${IP}
else
fi
if [ ${SPEED} = 5000 ]
then
${fwcmd} table 9 add ${IP}
else
fi
if [ ${SPEED} = 10240 ]
then
${fwcmd} table 10 add ${IP}
else
fi
if [ ${SPEED} = 20480 ]
then
${fwcmd} table 11 add ${IP}
else
fi
if [ ${SPEED} = 102400 ]
then
${fwcmd} table 12 add ${IP}
else
fi

Share this post


Link to post
Share on other sites

А, что с другими параметрами?

echo $2 >> /home/morfey/44.txt - # НЕ ЗАНОСИТ ИП НЕКОТОРЫХ ЮЗЕРОВ

IP может не заносить, потому что передается в скрипт пустое значение, нужно попоробовать с другими параметрами (например $1, $2, $3, $4)

и вообще без параметров, просто что нибуть писать, дабы проверить или вообще запускается скрипт ОнКоннект.

 

echo "user_podklychilsa" >> /home/morfey/44.txt - # НЕ ЗАНОСИТ ИП НЕКОТОРЫХ ЮЗЕРОВ

И все равно, надо еще как-то все же проверить именно какой юзер.

Например можно сделать так.

Имеем онлайн юзеров 300 человек.

Вот в нашем файле и должно быть 300 строчек "user_podklychilsa", если их нету или например 299, тогда 100% нету запуска скрипта ОнКоннект в некоторых случаях и душить нужно сам стж.

 

 

Добавляю.

Не досмотрел.

/etc/stargazer/param online ${LOGIN} online # Пишет в базу что юзер онлайн, то же что и с предыдущим скриптом.

Вот что и имеем, айпи не передается, а логин передается. Уже что-то есть, можно и обращатсья к madf'y.

У меня например уже идеи кончились, надо рыть сам стж, чего так.

 

 

ЗЫ:

Не пробовал переустановить СТЖ? Может где-то что-то кривовато стало?

И еще юзеры всегда одни и те же не срабатывают или каждый раз разные?

 

Можно попробовать так

if [ $2 == "" ]
then
 echo $1 >> /home/morfey/44.txt - # Пишем логины юзеров, у которых передается айпишка пустая.
fi

И понаблюдать или это одни и теже логины, если одни и теже, может что-то случилось с БД, как вариант. Хотя как я понял, что при ручном подключении юзера после старта стж все работает. хз-хз.

Share this post


Link to post
Share on other sites
Не пробовал переустановить СТЖ? Может где-то что-то кривовато стало?

 

И еще юзеры всегда одни и те же не срабатывают или каждый раз разные?

 

Переустанавливал, и в дебаг режиме тоже.

 

Можно попробовать так

 

if [ $2 == "" ]
then
 echo $1 >> /home/morfey/44.txt - # Пишем логины юзеров, у которых передается айпишка пустая.
fi

Вот это завтра попробую.

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

  • Recently Browsing   0 members

    No registered users viewing this page.

×