При интенсивной разработе ПО, особенно с использованием enterprise-технологий, вроде JavaEE или, даже в большей степени, Spring Boot, мы имеем дело с пулами соединений к базе данных (connection pools).
Когда разработчиков много, и у всех пулы открывают по 10 и более соединений к базе за раз, то бывает нужно освобождать зависшие (неиспользуемые, IDLE) соединения.
Если мы не имеем доступа к конфигурации, или (как в моём случае) не всегда получается правильно отконфигурировать базу, то, например, в случае с PostgreSQL мы можем отрубать соединения с помощью cron-скрипта.
Сам скрипт может выглядеть вот так:
#!/bin/bash
echo "Release IDLE PostgreSQL connections..."
sudo -u postgres psql -c "SELECT *,pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'my_database' AND pid <> pg_backend_pid() AND state = 'idle' AND state_change < current_timestamp - INTERVAL '1' MINUTE;" 1>/dev/null 2>/dev/null
echo "Done."
Т.е. освобождаем висящие более минуты соединения. Брутально... а что делать?!
И затем помещаем это всё в cron:
#
# Release PostgreSQL IDLE connections (each 5 min):
*/5 * * * * /root/scripts/db_release_conn.sh
#