某客戶系統tomcat連線池連線異常

jaymarco發表於2020-09-23

與15/09/24,

作業系統: Red Hat Enterprise Linux Server release 5.8(x86_64)
JDK版本: Java HotSpot(TM) 64-Bit Server jdk1.6.0_43

DB 版本:  Oracle 11.2.0.4  RAC

中介軟體版本:

叢集:是

中介軟體排查

1 、檢查tomcat效能引數

(192.168.210.147~192.168.210.153)7臺主機的tomcat中介軟體配置JVM記憶體、執行緒池和連線數等引數都滿足業務需求。

引數

最小大小

最大大小

JVM 堆記憶體

8G

8G

執行緒池

0

2048

連線池

50

200

2 、檢查tomcat實時指標監控資料

WEB 伺服器地址

JVM 使用記憶體大小

當前活動執行緒數

192.168.210.147

4674M

438

192.168.210.148

3762M

411

192.168.210.149

3134M

345

192.168.210.150

3469M

356

192.168.210.151

4266M

413

192.168.210.152

3098M

315

192.168.210.153

2591M

243

從以上tomcat中介軟體指標監控資料來看tomcat記憶體佔用率都在60%以下,執行緒使用率也不是很高。Tomcat的系統資源還是比較充足的。

3 、tomcat日誌分析

從tomcat日誌中分析來當時系統並沒有產生記憶體洩露、執行緒阻塞和連線池過載等現象。但卻在故障時間點(下午15點到18:00)之間,均發現主機 192.168.210.147~192.168.210.153這7臺主機的tomcat日誌檔案catalina.out報出大量jdbc driver驅動去連線資料庫網路超時異常。錯誤資訊“ IO 錯誤: The Network Adapter could not establish the connection ”報錯日誌如下:

java.sql.SQLRecoverableException:   IO 錯誤 : The Network Adapter could not establish the   connection

        at   oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)

        at   oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)

        at   oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)

        at   oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)

        at   oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)

        at   java.sql.DriverManager.getConnection(DriverManager.java:582)

        at   java.sql.DriverManager.getConnection(DriverManager.java:185)

        at qt.utils.DBCP.ConnectionPool.CreatePooledConnection(ConnectionPool.java:467)

        at   qt.utils.DBCP.ConnectionPool.getActiveConnection(ConnectionPool.java:776)

        at   qt.utils.DBCP.ConnectionPool.prepareStatement(ConnectionPool.java:566)

        at cn.qtone.xxt.base.db.DBControl.getValue(DBControl.java:856)

        at   cn.qtone.xxt.base.utiltity.CheckPurview.getFunctionIdNoCheck(CheckPurview.java:169)

Caused by:   oracle.net.ns.NetException: The Network Adapter could not establish the   connection

        at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:439)

        at   oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:454)

        at   oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:693)

        at   oracle.net.ns.NSProtocol.connect(NSProtocol.java:251)

        at   oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)

        at   oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)

        ... 37 more

Caused by:   java.net.SocketTimeoutException: connect timed out

        at   java.net.PlainSocketImpl.socketConnect(Native Method)

        at   java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)

        at   java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)

        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)

        at   java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)

        at   java.net.Socket.connect(Socket.java:529)

        at   oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:149)

        at oracle.net.nt.ConnOption.connect(ConnOption.java:133)

        at   oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:405)

        ... 42 more

 

分析結論

透過tomcat中介軟體分析,暫時可以排除tomcat資源不足(記憶體洩露、執行緒 阻塞和連線池過載)等問題。

 

引發出幾點思路:

1、 資料庫是否有異常,導致中介軟體跟資料庫無法正常互動。

2、 應用伺服器到資料庫端之間經過的網路是否有問題。

1 、監聽狀態正常,會話正常連線,會話數正常,沒有超過最大連線數,監聽日誌沒有任何報錯。監控資料如下所示:

 

2 、持續觀察資料庫後臺日誌,沒有出現任何報錯資訊。

   

3 、抓取故障時間段的AWR,分析資料庫的效能,從AWR分析得出資料庫執行良好,故障高峰期負載很低。

Ping 包沒有出現丟包問題。奇怪了。測試埠看一下。

單獨拿一臺應用伺服器到資料庫主機來監控,從應用端telnet資料庫主機IP加監聽埠情況來看,採集到的標紅部分資料可以看到應用主機(192.168.210.153)到DB端的網路出現超時3分鐘 最後網路不通。監控情況見下圖:

監控指令碼

#!/bin/sh

while true

do

for target in 57   58

do

ip_add="192.168.205."$target

echo "   `date` script starting====================================="   >>/tmp/$ip_add.log

echo -e   "\n"|telnet $ip_add 1521|grep Connected >>/tmp/$ip_add.log

sleep 1

done;

done;

從應用端telnet資料庫主機IP加監聽埠情況來看,發現從應用端telnet檢測資料庫主機之間的網路,檢測6次,總有2次會出現超時問題。也嘗試telnet資料庫主機的22埠也是出現同樣情況。監控情況見下圖:

     經過我們的排查發現tomcat中介軟體和資料庫都正常。只因應用伺服器透過tomcat中介軟體的jdbc驅動去連線資料庫時存在連線超時異常。從我們部署網路監指令碼採集到的資料來看網路確實存在超時。初步懷疑是應用發起連線請求經過網路層,再到達資料庫端,其實在網路層就可能出現延時,並沒有到達資料庫端,最終導致連線超時無法建立連線。

     於是將分析的資料和思路給了網路工程師,網路工程最後才將問題切入點定向網路,網路工程師監控應用端到資料庫端之間的防火牆會話連線數不夠,出現大量的會話連線丟棄現象。於是網路工程師將應用端到資料庫端之間的那臺防火牆的會話連線數從原來的30000個調大到60000個。觀察防火牆會話一段時間在也沒有出現會話丟棄。同時中介軟體日誌再也沒有報關於網路連線超時問題了,業務也恢復正常。

思科網路工程調大防火牆會話連線數。

有需要的朋友可以關注我的公眾號,文章每日一更


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28833846/viewspace-2723431/,如需轉載,請註明出處,否則將追究法律責任。

相關文章