Назад | Перейти на главную страницу

Postgresql порождает смехотворное количество процессов postmaster

По какой-то причине postgres порождает> 700 процессов postmaster для обработки запросов к базе данных и файл журнала postgres, если он заполнен «неожиданным EOF при подключении клиента», «неполным стартовым пакетом» и «извините, уже слишком много клиентов». netstat сообщает мне, что все открытые соединения являются локальными, и я почти уверен, что они исходят от postgres внутри. Этот конкретный экземпляр работал нормально последние 230 дней или около того, и ничего не изменилось в конфигурации. Есть какие-нибудь мысли о том, где я должен искать решение этой проблемы?

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

ОБНОВИТЬ: Оказывается, был экземпляр tomcat, запущенный на удаленном компьютере, который пытался подключиться к postgres через туннель ssh, что привело к полному аду.

Postgres порождает почтмейстера для каждого соединения. Так оно и должно работать. Если вы запускаете тонну процессов postmaster, у вас есть что-то, инициирующее массу соединений, и если это не то, чего вы ожидаете, вероятно, у вас сломанное / плохо работающее приложение, создающее беспорядок (общий пример: тот, который продолжает повторно инициализировать соединение с БД, но никогда не закрывает его. Вы будете пропускать сеанс при каждой инициализации соединения).

Если это недавно, начните с "Что изменилось?" Если нет, начните просматривать все свои приложения, которые взаимодействуют с Postgres (примерно в порядке использования), и посмотрите, сможете ли вы найти плохое яблоко.

Re: сообщения журнала -

  • unexpected EOF on client connection
    Что-то привело к тому, что установленное соединение с Postgres прекратилось без надлежащего закрытия (почтмейстер может какое-то время торчать, убирая возникший беспорядок). Выясните, что привело к отключению соединения (произошел ли сбой процесса, инициирующего его? Приложение плохо написано и завершается до очистки дескрипторов БД?) И почини это

  • incomplete startup packet
    Что-то подключено к Postgres и не инициировало надлежащее рукопожатие / запуск Postgres. Обычно получившийся почтмейстер уходит через несколько секунд.
    Найдите, что это делает, и почини это. (Это может быть ваша система мониторинга, кто-то сканирует вашу сеть, или где-то плохо написанное приложение)

  • sorry, too many clients already
    Я думаю, что это говорит само за себя. Исправьте вышеуказанное, и, вероятно, он исчезнет, ​​в противном случае подумайте об увеличении max_connections в postgresql.conf.