記錄一次線上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