Подтвердить что ты не робот

Org.postgresql.util.PSQLException: FATAL: извините, слишком много клиентов уже

Я пытаюсь подключиться к базе данных Postgresql, я получаю следующую ошибку:

Ошибка: org.postgresql.util.PSQLException: FATAL: извините, слишком много клиентов уже

Что означает ошибка и как ее исправить?

Мой server.properties следующий файл:

serverPortData=9042
serverPortCommand=9078
trackConnectionURL=jdbc:postgresql://127.0.0.1:5432/vTrack?user=postgres password=postgres
dst=1
DatabaseName=vTrack
ServerName=127.0.0.1
User=postgres
Password=admin
MaxConnections=90
InitialConnections=80
PoolSize=100
MaxPoolSize=100
KeepAliveTime=100
TrackPoolSize=120
TrackMaxPoolSize=120
TrackKeepAliveTime=100
PortNumber=5432
Logging=1
4b9b3361

Ответ 1

Мы не знаем, что такое файл server.properties, мы не знаем, что означает SimocoPoolSize (вы?)

Предположим, вы используете какой-то пользовательский пул подключений к базе данных. Тогда, я думаю, проблема в том, что ваш пул настроен на открытие 100 или 120 подключений, но сервер Postgresql настроен на принятие MaxConnections=90. Это противоречивые настройки. Попробуйте увеличить MaxConnections=120.

Но сначала вы должны понять свою инфраструктуру уровня db, знать, какой пул вы используете, если вам действительно нужно так много открытых подключений в пуле. И, особенно, если вы изящно возвращаете открытые соединения с пулом

Ответ 2

Объяснение следующей ошибки:

org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.

Резюме:

Вы открыли больше допустимого предела подключений к базе данных. Вы запустили что-то вроде этого: Connection conn = myconn.Open(); внутри цикла и забыли запустить conn.close();. Просто потому, что ваш класс уничтожен и сбор мусора не освобождает соединение с базой данных. Самое быстрое исправление этого - убедиться, что у вас есть следующий код с любым классом, который создает соединение:

protected void finalize() throws Throwable  
{  
    try { your_connection.close(); } 
    catch (SQLException e) { 
        e.printStackTrace();
    }
    super.finalize();  
}  

Поместите этот код в любой класс, где вы создаете соединение. Затем, когда ваш класс будет собирать мусор, ваше соединение будет выпущено.

Запустить этот SQL, чтобы разрешить допустимые соединения postgresql max:

show max_connections;

По умолчанию используется 100. PostgreSQL на хорошем оборудовании может поддерживать несколько сотен подключений одновременно. Если вы хотите иметь тысячи, вы должны подумать о том, чтобы использовать программное обеспечение объединения пулов, чтобы уменьшить накладные расходы на подключение.

Взгляните на то, кто/что/когда/где удерживает ваши соединения:

SELECT * FROM pg_stat_activity;

Количество используемых в настоящее время соединений:

SELECT COUNT(*) from pg_stat_activity;

Стратегия отладки

  • Вы можете указать разные имена пользователей/пароли для программ, которые могут не освобождать соединения, чтобы узнать, какой из них есть, а затем посмотреть в pg_stat_activity, чтобы узнать, какой из них не очищается после себя.

  • Выполняйте полную трассировку стека исключений, когда соединения не могут быть созданы, и следуйте за кодом, где вы создаете новый Connection, убедитесь, что каждая строка кода, в которой вы создаете соединение, заканчивается на connection.close();

Как установить max_connections выше:

max_connections в postgresql.conf устанавливает максимальное количество одновременных подключений к серверу базы данных.

  • Сначала найдите файл postgresql.conf
  • Если вы не знаете, где это, запросите базу данных с помощью sql: SHOW config_file;
  • Моя находится в: /var/lib/pgsql/data/postgresql.conf
  • Войдите в систему с правами root и отредактируйте этот файл.
  • Искать строку: "max_connections".
  • Вы увидите строку с текстом max_connections=100.
  • Установите этот номер больше, проверьте предел для своей версии postgresql.
  • Перезапустите базу данных postgresql, чтобы изменения вступили в силу.

Каковы максимальные max_connections?

Используйте этот запрос:

select min_val, max_val from pg_settings where name='max_connections';

Я получаю значение 8388607, теоретически, что вам больше всего разрешено иметь, но тогда процесс убегания может съесть тысячи подключений и удивить, ваша база данных не отвечает за перезагрузку. Если у вас были разумные max_connections, такие как 100. Программе оскорбления будет отказано в новом соединении.

Ответ 3

Не нужно увеличивать MaxConnections и InitialConnections. Просто закройте свои подключения после выполнения своей работы. Например, если вы создаете соединение:

try {
     connection = DriverManager.getConnection(
                    "jdbc:postgresql://127.0.0.1/"+dbname,user,pass);

   } catch (SQLException e) {
    e.printStackTrace();
    return;
}

После завершения вашей работы выполните следующие действия:

try {
    connection.commit();
    connection.close();
} catch (SQLException e) {
    e.printStackTrace();
}

Ответ 4

Оскорбительные строки следующие:

MaxConnections=90
InitialConnections=80

Вы можете увеличить значения, чтобы больше подключений.

Ответ 5

Вам нужно закрыть все ваши подключения, например: Если вы делаете инструкцию INSERT INTO, вам необходимо закрыть оператор и вашу связь таким образом:

statement.close();
Connexion.close():

И если вы сделаете инструкцию SELECT, вам нужно закрыть оператор, соединение и набор результатов следующим образом:

resultset.close();
statement.close();
Connexion.close();

Я сделал это, и он работал

Ответ 6

1. Проверьте текущую конфигурацию

Войдите в PostgreSQL с помощью команды psql,

      postgres=# show max_connections;


        max_connections 
        -----------------

       100

      (1 row)

2. Откройте конфигурационный файл PostgreSQL

vi /var/lib/pgsql/data/postgresql.conf

3. Измените следующие конфигурации по умолчанию

   max_connections = 100                   # (change requires restart)

    # Note:  Increasing max_connections costs ~400 bytes of shared memory per

    ....

    shared_buffers = 400MB        # min 128kB  # (change requires restart)

4. Перезапустите сервер PostgreSQL, чтобы применить изменения.

    $:service postgresql restart

   Stopping postgresql service:                               [  OK  ]

   Starting postgresql service:                               [  OK  ]

Ссылка

http://www.devdummy.com/2017/10/postgresql-psqlexception-fatal-sorry.html