# 检查网络连通性
ping database_host
# 检查端口是否可达
telnet database_host 3306
nc -zv database_host 3306
# 检查路由和网络延迟
traceroute database_host
mtr database_host
# 检查防火墙规则
iptables -L -n
-- 增加连接超时时间(秒)
SET GLOBAL connect_timeout = 30;
SET GLOBAL wait_timeout = 28800;
SET GLOBAL interactive_timeout = 28800;
-- 查看当前连接状态
SHOW STATUS LIKE 'Threads_connected';
SHOW PROCESSLIST;
-- 修改postgresql.conf
tcp_keepalives_idle = 60
tcp_keepalives_interval = 10
tcp_keepalives_count = 10
-- 设置语句超时(毫秒)
SET statement_timeout = 30000;
# 最大连接池大小
spring.datasource.hikari.maximum-pool-size=20
# 连接超时时间(毫秒)
spring.datasource.hikari.connection-timeout=30000
# 连接最大生命周期(毫秒)
spring.datasource.hikari.max-lifetime=1800000
# 空闲连接超时(毫秒)
spring.datasource.hikari.idle-timeout=600000
// 确保使用try-with-resources自动关闭连接
try (Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ...")) {
// 处理结果
}
# 监控数据库连接
mysqladmin -u root -p processlist
pg_top -U postgres
# 网络抓包分析
tcpdump -i eth0 port 3306 -w mysql.pcap
# 性能分析工具
pt-query-digest /var/log/mysql/mysql-slow.log
# 增加系统文件描述符限制
echo "ulimit -n 65536" >> /etc/profile
# 调整TCP参数
echo "net.ipv4.tcp_keepalive_time = 60" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_intvl = 10" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_probes = 6" >> /etc/sysctl.conf
sysctl -p
通过以上方法,可以有效诊断和解决Linux环境下的数据库连接超时问题,提高系统稳定性和可靠性。