SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 03.08.2009 15:44:10

Andrey_3306
Участник
Зарегистрирован: 03.08.2009
Сообщений: 6

Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

Есть сервер с mysql - если клиенты присоединятся к серверу БД через TCP/IP, то всё отлично и сервер держит и 300 и 500 одновременных конектов, но если соединение идёт через mysql.sock  , то при 48 одновременных подключениях всё нормально, а если больше (64 - 100 и более), то некоторых клиентов отбрасывает с ошибкой

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)
.

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

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

Система SUSE 11.1

В файле limits.conf ограничения на максимальное количество открытых файлов для апача и мускуля имеют следующий вид

apache hard nofile 65535
@apache hard nofile 65535

mysql  hard nofile 65535
@mysql  hard nofile 65535


Заранее спасибо за ответы.

Неактивен

 

#2 03.08.2009 19:24:09

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

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

Ошибку определили действительно правильно, но что конкретно ограничивает —
сказать сложно, SuSE под рукой нету. Смотреть стоит не только в ulimits, но и в
другие возможно установленные ограничения (SELinux, apparmor, etc.).

Неактивен

 

#3 03.08.2009 20:15:35

Andrey_3306
Участник
Зарегистрирован: 03.08.2009
Сообщений: 6

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

paulus написал:

Ошибку определили действительно правильно, но что конкретно ограничивает —
сказать сложно, SuSE под рукой нету. Смотреть стоит не только в ulimits, но и в
другие возможно установленные ограничения (SELinux, apparmor, etc.).

Ядро скомпилировано лично мною без поддержки SELinux и apparmor. Соответственно упомянутые выше пакеты в системе и не стоят.
С другой стороны апач может в 300 потоков одновременно отдавть один и тот-же графический файл и никаких проблем с доступом у него не возникает (правда он открывает его только на чтение,а не на чтение\запись)

Куда смотреть и куда копать - ума не приложу.
В РУнете о подобных проблемах почти ничего нет, а в буржуинском нете только упоминания об этой ошибке, но нет решений.
Причём упоминается как возникающяя редко в моменты пиковой загрузки сервера.

Неактивен

 

#4 03.08.2009 21:07:10

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

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

Для начала попробуйте определить — проблема со стороны сервера или со стороны апача.
Я бы выполнил что-нибудь типа

for n in `seq 500`; do mysql >/dev/null & done

Это откроет 500 сессий клиента на один сокет. Если посыпятся ошибки — надо копать в
сторону ограничений mysql / сокета. Если не посыпятся — надо копать в сторону ограничений
mod_php / apache.

Неактивен

 

#5 05.08.2009 21:03:04

Andrey_3306
Участник
Зарегистрирован: 03.08.2009
Сообщений: 6

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

После всевозможных перекомпиляций мускуля апача и пхп с различными ключами и различных версий выяснилось следующее - от ключей компиляции и версий программ это не зависит. Равно как и от тго префорк апач или worker.

500 клиентов по совету  paulus  запускал и всё работает.   

решение проблемы нашлось неожиданно.

всё дело оказалось в переменной мускуля thread_cache_size, после того как она стала отличной от нуля (300) . всё заработало более менее, но эта ошибка всё равно возникает хотя и в тысячи раз реже.  думаю что когда конект идёт по ТСР , то клиент в любом случае дожидается ответа от сервера из-за ТСРшных таймаутов., а вот через файл - не всегда успевает дождаться создания сервером потока, а очень редко не дожидается и подхвата закешированым потоком его соединения.

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

вот так вот.

Неактивен

 

#6 05.08.2009 22:43:58

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

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

Очень странное поведение. Такое свойственно, скорее, FreeBSD, а не Linux (из-за
плохой реализации потоков). Установка thread_cache_size всего лишь предсоздает
потоки.... в любом случае, хорошо, что разобрались smile

Неактивен

 

#7 05.08.2009 23:17:49

Andrey_3306
Участник
Зарегистрирован: 03.08.2009
Сообщений: 6

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

paulus написал:

Очень странное поведение. Такое свойственно, скорее, FreeBSD, а не Linux (из-за
плохой реализации потоков). Установка thread_cache_size всего лишь предсоздает
потоки.... в любом случае, хорошо, что разобрались smile

тем более странно, что разработчики mysql  говорят что SUSE одна из платформ на которой должно всё работать как часики.

Неактивен

 

#8 09.08.2009 00:26:02

Andrey_3306
Участник
Зарегистрирован: 03.08.2009
Сообщений: 6

Re: Ошибка Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

Проблема локализована окончательно.

Перекомпилено ядро с включением опции Memory Type Range Registers (MTRR) , отключением оптимизации по размеру, что повлекло компиляцию ядроа с оптимизацией О2, а также были отклбчены секюрити хукс в сокетах.

После этих манипуляций при использовании pconnect  поблема исчезла вообще, а при использовании обычных подключений только 8 процентов отбрасывается с вышеозначенной ошибкой.  И это при 600 000 соединений в час в обоих случаях. 

При таком количестве соединений я думаю это неизбежно и полное устранение проблемы требует ограничения  ресурсов (времени процессора) апача.

Неактивен

 

Board footer

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