如果整个系统只有某几个连接一直卡住,可能这几个连接被连接池抛了,
修改方法:1,到spring配置文件修改removeAbandonedTimeout的关闭时长,这种情况是代码没运行完又无法优化的处理,可以增加时间知道运行完毕。
但上述方法对我的项目并没有起作用。
sqlserver数据库,通过以下查看数据库连接情况:
SELECT ds.session_id, ds.status, Db_name(dr.database_id) AS database_name, ds.login_name, ds.login_time, ds.host_name, dc.client_net_address,
dc.client_tcp_port, ds.program_name, dr.cpu_time, dr.reads, dr.writes, dc.num_reads, dc.num_writes, ds.client_interface_name, ds.last_request_start_time,
ds.last_request_end_time, dc.connect_time, dc.net_transport, dc.net_packet_size, dr.start_time, dr.status, dr.command, dr.blocking_session_id, dr.wait_type,
dr.wait_time, dr.last_wait_type, dr.wait_resource, dr.open_transaction_count, dr.percent_complete, dr.granted_query_memory
FROM Sys.dm_exec_requests dr WITH(nolock)
RIGHT OUTER JOIN Sys.dm_exec_sessions ds WITH(nolock)
ON dr.session_id = ds.session_id
RIGHT OUTER JOIN Sys.dm_exec_connections dc WITH(nolock)
ON ds.session_id = dc.session_id
WHERE ds.session_id > 50
ORDER BY ds.program_name
通过这条,排查到该数据库连接超过15个,每次点那个连接就会多一个,说明bug原因是代码运行每次连接没有关闭数据库连接导致。
根据该链接地址,排查代码,发现是每次openSession()没有安全关闭导致,重写代码,修改后解决问题。