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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM