记录一次线上oracle连接数不够问题排查
记录一次线上oracle连接数不够问题
昨天收到现场实施那边反馈的问题,说数据库连接数不够,导致服务连接不上数据库。
我最先怀疑是后台服务的连接池配置过大导致,看了下jar包中的配置,
我本想看看oracle的最大连接数是多少,结果发现没法通过客户端连接上,就没法看了。后来问了下现场实施,说是150的最大连接数。
因为我们系统需要启动7个jar包
gateway.jar
map1.jar
map2.jar
map3.jar
achieve1.jar
achieve2.jar
achieve3.jar
其中gateway.jar是不连数据库的,那这剩余六个jar的数据库连接也基本要1200,所以我就依次停服务,改配置,
min-idle: 10
maxActive: 20
但是在我改完配置后,重启服务,发现还是连接不上数据,jar无法启动,依旧还是之前的问题。
后面经过询问,可以暂时停掉线上环境。于是我把所有后台服务的jar包都关闭了,依旧还是之前的问题。
于是我把oracle整个重启,因为我们用的window的服务器,所以直接到服务面板重启就好。但是还是感觉这样不好,可又想不到别的啥办法。
重启后终于可以通过命令行连上数据库了。
执行命令
show parameter processes;
或者
select value from v$parameter where name = 'processes';
于是乎百度如果修改oracle最大连接数
修改最大连接数:
alter system set processes = 600 scope = spfile;
重启数据库:
shutdown immediate;
startup;
修改jar包配置
min-idle: 30
maxActive: 80
重启所有jar包,发现系统正常了,于是我就以为OK了。
结果第二天,他们说又出现这个问题了。于是我上去一看,还真是,但我明明oracle最大连接数改成了600,每个jar包最大也才80个连接,顶破天也才480-500个连接,还预留了100个连接给其他客户端用,怎么又不够了。
于是我用jps命令查了下有哪些java进程
发现多了两个不知道谁启动的玩意。
我以为是这两个的连接池占用过多,看了配置文件,其实并不多,也是min-idle: 30,maxActive: 80。用pslist.exe看了下这个进程的线程情况,也是80个左右。
我怀疑是这两个java进程,再加上之前的6个jar,使得总连接数变成(2+6)*80 = 640,进而数据库连接数不够,所以询问到可以关闭后就干掉了这两个jar,
再查数据库连接数,发现还是没变化
后面我想通过oracle去查下连接的客户端地址,百度了下v$session & v$process各字段的说明,但是发现没法获取到客户端的地址,只能获取到机器的用户名,但是有大量连接的机器用户名是空的。只有少部分是我已知的机器。
再后面我突然想到直接在数据库的机器上执行netstat -ano查看下网络连接不就OK了么。
netstat -ano > 1.txt
发现数据库的1521端口和外部有608个连接,其中13个是和数据库所在机器的连接,剩下的都是71机器的。后面问了下现场的实施人员,71服务器是arcgis服务的机器。
远程进去,通过netstat -ano看了下连接,好家伙,595个和oracle的连接,通过资源管理器看了下,一堆的ArcSOC.exe导致的大量连接。行了,剩下就是找GIS开发的人来看看情况了。
他们捣鼓一阵后发现,原来是原来的用过arcgis server的sde数据库的密码过期了
用Navicat看了下数据库的用户,发现还真是这个用户还真是设置了密码过期。
重新改下密码,去掉密码过期,重启arcgis server,再查下数据库连接情况,发现连接数还有360多个,这不应该啊。
再问下GIS开发的人员,他们说arcgis server如果数据库连不上,他们会不断开新连接去重试,旧的连接也不关,让我重启下数据库试试。
直接通过sqlplus执行命令重启
sql>shutdown immediate;
sql>startup;
最后把所有jar包依次启动,再检查依次数据库连接
总算是正常点了,等过一段时间看看会不会再出现吧。
总结:
- windows机器上可以简单通过netstat -ano查看网络连接情况
- jps -l 可以查看当前机器运行的java进程
- pslist.exe 是windows下查看进程线程数的工具(要单独下载)
- 我这种排查会完全停掉机器,不太好。
连接oracle数据库报错:https://www.cnblogs.com/ninicwang/p/7472420.html
ORACLE查看并修改最大连接数:https://www.cnblogs.com/uumiss/p/4905482.html
RA-12519, TNS:no appropriate service handler :https://blog.csdn.net/qw222pzx/article/details/80008546
v$session & v$process各字段的说明 :https://www.cnblogs.com/obsession-with-the-young-monk/p/9270943.html
PsList v1.4:https://docs.microsoft.com/zh-cn/sysinternals/downloads/pslist
Jps命令—使用详解:https://www.cnblogs.com/shoshana-kong/p/11069146.html