SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.01.2012 06:31:29

Бананище
Участник
Зарегистрирован: 11.01.2012
Сообщений: 14

Странная проблема с сервером

Всем доброго утра!

Имеется сервер:
1xXeon E5630, 8Gb ram, 4*500Gb SAS в RAID-10
Ось - Windows Server 2003 x64 SP2 R2
На нём работает Microsoft IIS + PHP FastCGI (64 бит) 3.5.8-nts + Squid (64 бит) в качестве балансировщика.
Крутятся сайт и форум, суммарно хитов в сутки - около 8000, раз в два-три дня случаются резкие взлёты нагрузки, при этом на сайтах одновременно находятся до 1400 человек.

И всё бы хорошо, только вот на пиках - сайты часто вылетают с MySQL-ошибкой:

[2002] Could not connect to mysql server. Only one usage of each socket address (protocol/network address/port) is normally permitted

При этом - отваливается ВСЁ, сеть, локалхост и даже Named Pipes.
Я предположил, что проблема может крыться в говёных дефолтных настройках стека tcp/ip, и пошёл искать решение проблемы в технете, наткнулся на статью: http://support.microsoft.com/kb/956189/en-us. Параллельно - загуглил, выдернул ещё рекомендацию:

бананище написал:

Start Registry Editor (Regedt32.exe).
Locate the following key in the registry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

On the Edit menu, click Add Value, and then add the following registry value: Value Name: MaxUserPort
Data Type: REG_DWORD
Value: 65534

This sets the number of ephemeral ports available to any user. The valid range is between 5000 and 65534 (decimal). The default value is 0x1388 (5000 decimal).

On the Edit menu, click Add Value, and then add the following registry value: Value Name: TcpTimedWaitDelay
Data Type: REG_DWORD
Value: 30

This sets the number of seconds to hold a TCP port connection in TIME_WAIT state before closing. The valid range is between 0 (zero) and 300 (decimal). The default value is 0x78 (120 decimal).

Quit Registry Editor.

Reboot the machine.

Не помогло sad

Прилагаю конфиг мускула:
Муизям не используется вообще и отключен, размер всех баз - 11 гигов, средняя нагрузка на сервер MySQL - 300-500 запросов в секунду

бананище написал:

[mysqld]
bind-address                = 0.0.0.0
port                        = 3306

max_allowed_packet            = 2097152
net_buffer_length            = 262144

enable-named-pipe
skip-external-locking
skip-name-resolve

character-set-server=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

max_connections=2048

query_cache_size=128M
query_cache_min_res_unit=1024

tmp_table_size=512M
thread_cache_size=8

key_buffer_size=256M
read_buffer_size=8M
read_rnd_buffer_size=8M
sort_buffer_size=4M

innodb_data_home_dir="C:/tsrv/mysql/data/"
innodb_additional_mem_pool_size=14M
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=16M
innodb_buffer_pool_size=4G
innodb_log_file_size=1G
innodb_thread_concurrency=8

Как решить проблему? Кто-нибудь сталкивался с таким? Что делать?

Отредактированно Бананище (17.01.2012 06:33:28)

Неактивен

 

#2 18.01.2012 00:22:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Странная проблема с сервером

Статья очень осмысленная, первое, что приходит в голову, — действительно закончились
порты. Persistent connections пробовали использовать? Должно Вас спасти.

Про named pipes — не верю, они должны работать всегда. Скорее всего, при включенных
pipes, движок всё равно подцепляется по tcp/ip. Ну или тогда сокеты заканчиваются не
со стороны MySQL, а со стороны движка сайта.

Неактивен

 

#3 18.01.2012 04:12:11

Бананище
Участник
Зарегистрирован: 11.01.2012
Сообщений: 14

Re: Странная проблема с сервером

Повесил на самый "тяжёлый" сервис персистенты. Жду результатов, пока всё нормально (пиков нагрузки ещё не было, но вот на подходе).

Правда в логи пыха теперь валятся ошибки вида -
[18-Jan-2012 02:37:35] PHP Warning:  mysqli::mysqli(): MySQL server has gone away in C:\wsrv\home\m_rev3541\core\dbal\mysqli.php on line 36 (Видимо неюзаемое соединение отваливается по таймауту).

А в SHOW PROCESSLIST постоянно висят штук 30 соединений со статусом Sleep (Видать те самые и есть).
Я так полагаю, беспокоиться не о чем?

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

Про отваливающиеся пипесы - зря не верите, проблема действительно наблюдалась. При этом вываливалось
Can't connect to MySQL server on 'named pipe .' [10061] Я сам не поверил глазам своим (Ибо падают вещи, работающие на уровне ядра системы), пока не узрел это раз 5. Сейчас их пока не использую, да в пых 5.3 их не запилили.

uwendel at mysql dot com написал:

Aren't named pipes considerable slower than TCP/IP: why use named pipes ?! I won't work on named pipe support for mysqlnd, if its slower, which is the case AFAIK.

- Оттуда. Разрабы mysqlnd уже "всё решили"...

Отредактированно Бананище (18.01.2012 04:12:32)

Неактивен

 

#4 18.01.2012 22:10:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Странная проблема с сервером

Ну так и пусть висят, чем они мешают? Можно ограничить время через wait_timeout, например.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson