Аватар для licoric
1 / 1 / 1
Регистрация: 11.05.2012
Сообщений: 92

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

28.02.2025, 11:57. Показов 2224. Ответов 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
136 / 86 / 5
Регистрация: 02.12.2021
Сообщений: 567
28.02.2025, 19:02
А в логах покопаться?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6859 / 3791 / 1026
Регистрация: 13.02.2013
Сообщений: 11,861
28.02.2025, 19:33
Bash
1
echo 'show processlist;' | mysql
что показывает?
0
Эксперт по компьютерным сетямЭксперт NIX
 Аватар для Dmitry
13441 / 7534 / 831
Регистрация: 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
136 / 86 / 5
Регистрация: 02.12.2021
Сообщений: 567
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
3362 / 2248 / 388
Регистрация: 14.08.2018
Сообщений: 7,596
Записей в блоге: 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
3362 / 2248 / 388
Регистрация: 14.08.2018
Сообщений: 7,596
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru