某客戶系統tomcat連線池連線異常
與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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- druid連線池常見異常UI
- mysql、redis 客戶端連線池MySqlRedis客戶端
- Tomcat 的 JDBC 連線池TomcatJDBC
- Java 客戶端 Jedis和JedisPool 連線池Java客戶端
- impala客戶端連線客戶端
- gRPC學習記錄(六)--客戶端連線池RPC客戶端
- PostgreSQL 連線 超時異常SQL
- milvus 異常——無法連線
- 連線池
- 某客戶系統weblogic主備模式異常重啟事件Web模式事件
- echart折線圖異常多出一條連線線
- MySQLNonTransientConnectionException資料庫連線異常MySqlException資料庫
- Redis客戶端連線數DevOpsRedis客戶端dev
- python中socket建立客戶連線Python
- win10網路連線配置異常如何解決_win10系統網路連線配置異常的解決教程Win10
- Http持久連線與HttpClient連線池HTTPclient
- 連線池和連線數詳解
- Oracle 19c中連線RMAN客戶端的連線方法Oracle客戶端
- HTTP連線池HTTP
- django連線池Django
- airpods連線win10系統後音量異常如何解決AIWin10
- DataIntegrityViolationException異常:java利用mymatis連線資料庫異常AIExceptionJava資料庫
- TCP連線狀態異常記錄TCP
- SAP ECC系統連線SAP PI系統的系統連線配置
- 自定義連線池
- ElasticSearch連線池建立Elasticsearch
- 資料庫連線異常處理思路資料庫
- 資料庫連線異常故障報告資料庫
- golang連線MySQL時候的連線池設定GolangMySql
- 【JDBC】java連線池模擬測試 連線oracleJDBCJavaOracle
- 【JDBC】使用OracleDataSource建立連線池用於連線OracleJDBCOracle
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 異常連線之未授權連線,行為風險分析的有效實踐
- Golang SQL連線池梳理GolangSQL
- go 語言連線池Go
- ServiceStack.Redis的原始碼分析(連線與連線池)Redis原始碼
- 如何在VirtualBox客戶機使用符號連線符號
- 使用 WebSocket 客戶端連線 MQTT 伺服器Web客戶端MQQT伺服器