记录一次线上oracle连接数不够问题排查

记录一次线上oracle连接数不够问题

昨天收到现场实施那边反馈的问题,说数据库连接数不够,导致服务连接不上数据库。

image-20210927124142187

我最先怀疑是后台服务的连接池配置过大导致,看了下jar包中的配置,

image-20210927124545269

我本想看看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的服务器,所以直接到服务面板重启就好。但是还是感觉这样不好,可又想不到别的啥办法。

image-20210927130031493

重启后终于可以通过命令行连上数据库了。

执行命令

show parameter processes;
或者
select value from v$parameter where name = 'processes';

image-20210927130545315

image-20210927130608235

于是乎百度如果修改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个连接给其他客户端用,怎么又不够了。

image-20210927131741954

于是我用jps命令查了下有哪些java进程

image-20210927131717202

发现多了两个不知道谁启动的玩意。

我以为是这两个的连接池占用过多,看了配置文件,其实并不多,也是min-idle: 30,maxActive: 80。用pslist.exe看了下这个进程的线程情况,也是80个左右。

image-20210927151838299

我怀疑是这两个java进程,再加上之前的6个jar,使得总连接数变成(2+6)*80 = 640,进而数据库连接数不够,所以询问到可以关闭后就干掉了这两个jar,

再查数据库连接数,发现还是没变化

image-20210927143830846

后面我想通过oracle去查下连接的客户端地址,百度了下v$session & v$process各字段的说明,但是发现没法获取到客户端的地址,只能获取到机器的用户名,但是有大量连接的机器用户名是空的。只有少部分是我已知的机器。

再后面我突然想到直接在数据库的机器上执行netstat -ano查看下网络连接不就OK了么。

netstat -ano > 1.txt

image-20210927144733091

发现数据库的1521端口和外部有608个连接,其中13个是和数据库所在机器的连接,剩下的都是71机器的。后面问了下现场的实施人员,71服务器是arcgis服务的机器。

远程进去,通过netstat -ano看了下连接,好家伙,595个和oracle的连接,通过资源管理器看了下,一堆的ArcSOC.exe导致的大量连接。行了,剩下就是找GIS开发的人来看看情况了。

image-20210927150435657

他们捣鼓一阵后发现,原来是原来的用过arcgis server的sde数据库的密码过期了

image-20210927150706286

用Navicat看了下数据库的用户,发现还真是这个用户还真是设置了密码过期。

重新改下密码,去掉密码过期,重启arcgis server,再查下数据库连接情况,发现连接数还有360多个,这不应该啊。

再问下GIS开发的人员,他们说arcgis server如果数据库连不上,他们会不断开新连接去重试,旧的连接也不关,让我重启下数据库试试。

直接通过sqlplus执行命令重启

sql>shutdown immediate;
sql>startup;

最后把所有jar包依次启动,再检查依次数据库连接

image-20210927151646909

总算是正常点了,等过一段时间看看会不会再出现吧。

总结:

  • 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 handlerhttps://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.4https://docs.microsoft.com/zh-cn/sysinternals/downloads/pslist

Jps命令—使用详解https://www.cnblogs.com/shoshana-kong/p/11069146.html

posted @ 2021-10-11 10:38  _ME  阅读(1557)  评论(0编辑  收藏  举报