Форум программистов, компьютерный форум, киберфорум
Debian, Kali Linux, Raspbian, Astra Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92

Debian, ISP, начал ловить ошибку базы данных "too many connections"

28.02.2025, 11:57. Показов 2181. Ответов 13

Студворк — интернет-сервис помощи студентам
Уж и не знаю в каком разделе тему лучше создать.

Имею сервак, на нем ispmanager (hosting), debian, пет-проекты. Начал ловить ошибку базы данных "too many connections". И из-за этого отваливается весь mysql на сервере (все проекты сидят в своих базах под своими пользователями).

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

Вопрос к опытным гуру. Можно как-то диагностировать, откуда выстрел в ногу идет? Проекты не шибко большие (по нагрузке на базу или пользователей). То есть "коммерческой" посещалки вообще нет.

За сегодня:


За неделю:


Как база ложится, то нагрузка на проц падает до нуля. Ребут помогает - неделю норм было и я думал, что поборол недуг. А сегодня опять все вернулось.
Отключать код частями не вариант - ошибка очень спонтанная как я вижу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.02.2025, 11:57
Ответы с готовыми решениями:

Начал изучать базы данных в Microsoft SQL Server. вывод таблицы в консоль
У меня есть база данных, есть табличка, где есть строки и столбцы, заполненные информацией. эта табличка отображается только в Майкрософт...

Backup VPS/VDS на Debian via ssh, включая весь софт, базы данных и др
Добрый день, уважаемые. Нужно ваше мнение по одному вопросу, поскольку сам я в линуксах не силен. И так, имеется ВПС с дебиан и...

Ловить ошибку в браузере
Добрый вечер Требуется написать скрипт, который будет автоматически - качать файл исключительно через Хром (другие браузеры не...

13
 Аватар для yoric
130 / 79 / 5
Регистрация: 02.12.2021
Сообщений: 523
28.02.2025, 19:02
А в логах покопаться?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6858 / 3791 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
28.02.2025, 19:33
Bash
1
echo 'show processlist;' | mysql
что показывает?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13440 / 7534 / 830
Регистрация: 09.09.2009
Сообщений: 29,554
28.02.2025, 20:24
можно попробовать воспользоваться утилитой MySQLTuner и посмотреть, что будет писать в своих рекомендациях
https://github.com/major/MySQLTuner-perl
0
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
02.03.2025, 10:15  [ТС]
Цитата Сообщение от yoric Посмотреть сообщение
А в логах покопаться?
не совсем понимаю в каких именно.
В журналах WWW-запросов?
0
 Аватар для yoric
130 / 79 / 5
Регистрация: 02.12.2021
Сообщений: 523
02.03.2025, 19:57
Цитата Сообщение от licoric Посмотреть сообщение
не совсем понимаю в каких именно.
Во всех, конкретно не скажу
0
221 / 133 / 38
Регистрация: 25.07.2021
Сообщений: 539
10.03.2025, 21:28
too many это сколько?
нужно в следующий раз как только пойдут ошибки зайти в базу и посмотреть что за процессы висят.
phpmyadmin если есть, то в нем вкладка "состояние" -> "процессы"
или по ssh запустить mysql и там
Code
1
show processlist;
или
Code
1
show full processlist;
в чем конкретно у вас проблема тут знать никто не может, заходите и смотрите.
вариантов масса.
например если открыт (зачем?) порт наружу, то могут быть попытки брутфорса.
возможно очень долгие тяжелые запросы висят.
возможно скрипты какие-то долгие выполняются и подключаясь к базе не завершают сеансы - так и висит все в ожидании.

ну и глянуть стоит
Code
1
show variables like 'max_connections';
возможно ничего криминального не происходит, а вы недоговариваете как много там всего обращается к базе и нужно банально увеличить лимит количества подключений.

Цитата Сообщение от licoric Посмотреть сообщение
все проекты сидят в своих базах под своими пользователями
и что?
ладно бы вы осилили несколько копий mysql серверов запущенных.
чтоб каждому проекту действительно отдельная база была, полностью независимая от соседних "проектов", со своей памятью, кэшами.
а так ведь база одна на всех и если кто-то/что-то ее положит - базы не будет у всех.
0
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
14.03.2025, 21:02  [ТС]
Цитата Сообщение от EvgenUA Посмотреть сообщение
ладно бы вы осилили несколько копий mysql серверов запущенных.
чтоб каждому проекту действительно отдельная база была, полностью независимая от соседних "проектов", со своей памятью, кэшами.
а так ведь база одна на всех и если кто-то/что-то ее положит - базы не будет у всех.
Собственно в это и уперся. Мне чуть ранее казалось, что если ляжет одна база, то ляжет одна база, а не весь сервер. А прилег весь сервис mysql, а не одна база какая-то
Спецом сделал буквально на днях "анализ" запросов. Начало-конец работы скрипта. Может наслоение есть где друг на друга. Пока так. Вновь жду "приход" отвала базы.
0
 Аватар для Andrey-MSK
3342 / 2229 / 387
Регистрация: 14.08.2018
Сообщений: 7,521
Записей в блоге: 4
21.03.2025, 16:27
Цитата Сообщение от EvgenUA Посмотреть сообщение
а так ведь база одна на всех и если кто-то/что-то ее положит - базы не будет у всех.
Базы разные. Сервер MySQL один, который обслуживает эти базы.
0
221 / 133 / 38
Регистрация: 25.07.2021
Сообщений: 539
21.03.2025, 19:02
да, под базой имел в виду именно mysql сервер.
и количество подключений, про которое тут речь идет, оно общее на все базы внутри сервера этого.

ну в общем все решаемо.
1) найти от чего так много подключений висит. это баги скриптов или же норма.
если норма, то:
2) увеличить max_connections
а в идеале и при желании:
3) можно несколько копий именно mysql серверов запустить.
например разделить по проектам или по базам. 1 база = 1 сервер

это кстати одна из причин почему многие считают, что на vps лучше.
там у тебя собственный mysql сервер, а не как на shared'е один общий с соседями.
0
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
17.04.2025, 21:44  [ТС]

***Получилось вернутся к этому вопросу))
В таблице полно таких одинаковых строк с одной базой данных.
Я правильно понимаю, что теперь надо искать ошибки в говнокоде и где именно открывается коннект к базе и не закрывается?
Жаль только, что не показывается сам запрос или что-то наподобие источника.
0
221 / 133 / 38
Регистрация: 25.07.2021
Сообщений: 539
18.04.2025, 12:20
Цитата Сообщение от licoric Посмотреть сообщение
Жаль
да уж, печаль вселенская...

однако оно же пишет 'id'.
можно на время включить лог всех запросов. в конфиг добавить:
general_log_file=/путь/mysql_general.log
general_log=1
и перегрузить базу.

через время как накопятся снова спящие - берем id, находим в логе что это был за запрос (очень возможно конечно, что не один, а много разных окажется). и дальше в скриптах находим где такой запрос есть и почему не закрывается.
0
 Аватар для Andrey-MSK
3342 / 2229 / 387
Регистрация: 14.08.2018
Сообщений: 7,521
Записей в блоге: 4
30.04.2025, 10:03
Цитата Сообщение от licoric Посмотреть сообщение
Я правильно понимаю, что теперь надо искать ошибки в говнокоде и где именно открывается коннект к базе и не закрывается?
Соединение идёт от клиента? Клиент самописный? На чём написан? Покажите код пары методов доступа с этого клиента, скорее всего в них забываете закрыть соединение...
Вот пример для C#
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public async Task<List<KS6Detail>> GetKS6DetailsAsync(KS6Header header)
{
    List<KS6Detail> details = new List<KS6Detail>();
    string sqlText = "dbo.spBRKS6SelectDetail";
 
    try
    {
        // Создаём соединение
        using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
        {
            // Создаём команду
            using (SqlCommand sqlCommand = new SqlCommand(sqlText, sqlConnection) { CommandType = CommandType.StoredProcedure })
            {
                SqlParameter pHeaderID = new SqlParameter
                {
                    ParameterName = "@idHeader",
                    Value = header.KS6HeaderID,
                    SqlDbType = SqlDbType.Int,
                    Direction = ParameterDirection.Input
                };
                sqlCommand.Parameters.Add(pHeaderID);
 
                // Открываем соединение
                await sqlCommand.Connection.OpenAsync();
 
                // Выполняем команду
                using (SqlDataReader sqlDataReader = await sqlCommand.ExecuteReaderAsync())
                {
                    if (sqlDataReader.HasRows)
                    {
                        while (await sqlDataReader.ReadAsync())
                        {
                            details.Add(new KS6Detail
                            {
                                KS6DetailID = (int)sqlDataReader["ID_KS6Detail"],
                                KS6HeaderID = (int)sqlDataReader["ID_KS6Header"],
                                CPSHeaderID = (int)sqlDataReader["ID_CPSHeader"],
                                CPSDetailID = (int)sqlDataReader["ID_CPSDetail"],
                                MeasureID = (int)sqlDataReader["ID_Measure"],
                                Measure = (string)sqlDataReader["Measure"],
                                WName = (string)sqlDataReader["WName"],
                                WQuantity = (decimal)sqlDataReader["WQuantity"]
                            });
                        }
                    }
                }
            }
        } // При выходе за эту скобку соединение разрывается и объект уничтожается, т.к. использовалась директива using
 
        return details;
    }
    catch (SqlException sqlEx)
    {
        throw new ApplicationException(string.Format("T-SQL #{0} - {1}", sqlEx.Number, sqlEx.Message), sqlEx);
    }
    catch (Exception ex)
    {
        throw new ApplicationException(ex.Message, ex);
    }
}
0
 Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92
02.05.2025, 16:40  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Соединение идёт от клиента? Клиент самописный? На чём написан? Покажите код пары методов доступа с этого клиента, скорее всего в них забываете закрыть соединение...
Вот пример для C#
У меня на PHP проект. Везде, вроде, проверял - коннекты закрываются. Надо посмотреть, может запросы наслаиваются друг на друга как снежный ком. Но на улице у нас тепло, солнце... Надо заставить себя)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2025, 16:40
Помогаю со студенческими работами здесь

Не могу заставить RegexValidator ловить ошибку
Django 3.1.7 class RenderedCssFile(models.Model): css_pattern = r&quot;.*-\d+\.css$&quot; regex_validator =...

Как устранит ошибку базы данных?
Приветствую. В общем использую для локальной разработки Open server. В нем как вы знаете можно устанавливать разные версии php и баз...

Исправить ошибку, C# интерфейс подключенной базы данных
Нужно создать интерфейс моей базы из sql server, таблицы выводятся, запросы тоже, но обновление/удаление/изменение не работает. Помогите...

Не понимаю ошибку при использовании базы данных
Всем привет System.Data.SqlClient.SqlException: 'Login failed for user 'userid'.' Такая ошибка This exception was originally...

Не могу понять ошибку в обновление базы данных
&lt;? include (&quot;bd.php&quot;); $title = stripslashes(trim(htmlspecialchars($_POST,ENT_QUOTES))); $desc =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru