ошибка 10048

Файловые, p2p и прочие серверы

ошибка 10048

Сообщение vk » 22 фев 2009, 15:28

люди помогите решить проблему с разрывом мускула.
В общем при более 110 он лайн людей на сайте, происходит разрыв:
[2003] dbconn: mysql_connect: Can't connect to MySQL server on 'localhost' (10048)

изменение числа max_connections не помогает
в статистики mysql в среднем 230 запросов в сек.
vk
Активный участник
 
Сообщения: 95
Зарегистрирован: 22 фев 2009, 15:24

Re: ошибка 10048

Сообщение doliar » 22 фев 2009, 15:30

Версия мускаля? Сборка сервера своя? или Готовый сервер ? Название сервера, если он готовый?
Изображение

Консультаций по TBDev через icq неосуществляю!
Аватара пользователя
doliar
Автор
 
Сообщения: 732
Зарегистрирован: 16 янв 2008, 15:05
Откуда: Саратов, Волжский р-он
Домен: tbdev-info.vfose.ru

Re: ошибка 10048

Сообщение zk » 22 фев 2009, 15:31

1. MySQL это не веб-сервер.
2. Совершенно непонятно о чём идёт речь.

Закрыто, учимся правильно задавать вопросы.
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: ошибка 10048

Сообщение zk » 22 фев 2009, 15:54

Тему открыл, а теперь топикстартер пусть уже подробно опишет суть проблемы.
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: ошибка 10048

Сообщение vk » 22 фев 2009, 15:59

В общем имеется сборка (с переделанными конфигами) дремсерв, ос виндовс
Если число запросов в базу данных не превышает ~ 150 з/с , то все корректно пашет
если же происходит более 200-250, то рвется соединение с сервером, т.е. за место индексной или какой-либо другой стр - выдает
[2003] dbconn: mysql_connect: Can't connect to MySQL server on 'localhost' (10048)


суть проблемы понятна?
vk
Активный участник
 
Сообщения: 95
Зарегистрирован: 22 фев 2009, 15:24

Re: ошибка 10048

Сообщение zk » 22 фев 2009, 16:02

А что пишет MySQL в своих логах?
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: ошибка 10048

Сообщение staskur » 02 мар 2009, 03:02

думаю, что у вас просто закончились динамические порты в системе.....

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

WSAEADDRINUSE
(10048)
Address already in use.
Only one usage of each socket address (protocol/IP address/port) is normally permitted. This error occurs if an application attempts to bind a socket to an IP address/port that has already been used for an existing socket, or a socket that wasn't closed properly, or one that is still in the process of closing. For server applications that need to bind multiple sockets to the same port number, consider using setsockopt(SO_REUSEADDR). Client applications usually need not call bind at all - connectwill choose an unused port automatically."


что в общем случае означает -

Address already in use (Адрес уже используется).
Обычно разрешено только одно использование адреса сокета (проткол/адрес IP/порт). Эта ошибка возникает, когда приложение пытается привязаться к сокету функцией bind(), но комбинация адрес IP/порт уже используется существующим сокетом, или сокет не был корректно закрыт, или продолжается процесс закрытия сокета. Для серверных приложений, требующих привязки нескольких сокетов к одному и тому же номеру порта следует использовать setsockopt(SO_REUSEADDR). Клиентские приложения обычно не используют bind() - функция connect() автоматически выбирает неиспользуемый порт.

В вашем случае, при возрастании числа запросов к базе, когда открывается и закрывается куча подключений к базе, то оти попросту не успевают закрыться. Обратите внимание, что речь идет не о том, чтобы не забыть закрыть подключение mysql, а о том, что ресурсы для НОВОГО подключения освободятся не сразу....

Если мне память не изменяет, то есть в реестре пара параметров, которые на это влияют.

один из них - TcpTimedWaitDelay. Этот параметр определяет интервал времени, в течение которого подключение находится в состоянии ожидания, прежде чем будет закрыто. Пока подключение находится в состоянии ожидания, пара сокетов не может быть использована повторно. А согласно RFC793, данное значение должно в два раза превышать максимальное время жизни пакета.
Если учесть что в Windows XP и Microsoft Windows Server 2003 значение по умолчанию было установлено на 120 секунд, то получается что целых 2 минуты система просто ждет никому не отдавая уже освободившийся ресурс.

ищем тут
Код: Выделить всёРазвернуть
HKLM\SYSTEM\CurrentControLSet\Services\Tcpip\Parameters\TcpTimedWaitDelay
и уменьшаем значение.
если нет, то создаем
REG_DWORD – время в секундах , с допустимыми параметрами 30-300 (в десятичной системе)

и второй параметр это MaxUserPort
находится он в
Код: Выделить всёРазвернуть
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

имеет тип DWORD и допустимые значения от десятичных 5000 (по умолчанию) до 65534

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

в итоге изначально имеем в системе всего 5000-1024 = 3976 портов, доступных для приложений, да еще и повторно использовать их можно не чаще раза в 2 минуты...

отпишитесь, плиз, помогло написанное или нет ?

p.s. если параметра нет в реестре, то это не значит что он не используется, просто его значение принимается системой по умолчанию.....

по итогам размышлений над http://bugs.mysql.com/bug.php?id=10498 и http://bugs.mysql.com/bug.php?id=6580
Лучше установить FreeBSD, чем потратить 20 лет на Linux'ы и выяснить какой из них хуже.
staskur
Участник
 
Сообщения: 45
Зарегистрирован: 28 фев 2009, 03:54
Откуда: Саратов - заводской
Домен: zavodhub.vfose.ru

Re: ошибка 10048

Сообщение Костик » 02 мар 2009, 03:49

нифегась, круто написано... :good:

у portal.san.ru мускул падал тож часто, щас вроде норм у них 8)
FreeBSD 9.2 and Fedora 18 user
Аватара пользователя
Костик
Активный участник
 
Сообщения: 1944
Зарегистрирован: 03 сен 2007, 02:15

Re: ошибка 10048

Сообщение vk » 03 мар 2009, 21:51

с офф сайта винды:

1. Click Start, click Run, type regedit.exe, and then click OK.
2. Locate and then click the following registry subkey:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

3. On the Edit menu, point to New, and then click DWORD Value.
4. Type MaxUserPort and then press ENTER.
5. Double-click the MaxUserPort value, and then type the maximum value in decimal or hexadecimal.

You must type a number in the range of 500065534 (decimal). Setting this parameter to a value outside of the valid range causes the nearest valid value to be used (5000 or 65534).
6. Click OK.
7. Quit Registry Editor.


Помогло...
В принципе этот вариант ты уже писал.

с MaxUserPort все понятно а вот с HKLM\SYSTEM\CurrentControLSet\Services\Tcpip\Parameters\TcpTimedWaitDelay не совсем, значит создаю я там новый раздел "TcpTimedWaitDelay", создаю новый DWORD, как его обзывать? TcpTimedWaitDelay ?
vk
Активный участник
 
Сообщения: 95
Зарегистрирован: 22 фев 2009, 15:24

Re: ошибка 10048

Сообщение staskur » 03 мар 2009, 23:23

нет, возможно я неточно выразился, создаем параметр с названием TcpTimedWaitDelay типа REG_DWORD со значением, например 60 (в десятичной системе)
Лучше установить FreeBSD, чем потратить 20 лет на Linux'ы и выяснить какой из них хуже.
staskur
Участник
 
Сообщения: 45
Зарегистрирован: 28 фев 2009, 03:54
Откуда: Саратов - заводской
Домен: zavodhub.vfose.ru

След.

Вернуться в Прочие серверы и сетевые технологии

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron