• Oracle jdbc 드라이버를 11.2.0.3 으로 Upgrade
  • 이후 Connection을 release하지 못하고 lock이 걸리는 문제가 발생
    (DB Pool 부족현상 및 CPU 사용률 100%)
  • 원인파악 안되어 oracle jdbc 드라이버 버전을 10.x로 다운그레이드하여 임시해결
  • 11.2.0.4 버전의 release 노트에 해당현상과 연관된 버그픽스가 들어가 있음
  • oracle jdbc 드라이버 11.1.0.7 to 11.2.0.3.0 [Release 11.1 to 11.2] 의 버그가 원인

11.2.0.4 릴리즈 노트


Oracle JDBC Drivers 11.2.0.4 Readme 

===================================
Base Readme (11.2.0.1) @ http://download.oracle.com/otn/utilities_drivers/jdbc/112/Readme.txt

List of Fixes in 11.2.0.4
-------------------------
8870611          ORA-600: [17281], [1001] when selecting ref cursors via JDBC thin and not explicitly closing then
10315994         ResultSet.getRow() incorrectly returns rowcount instead of 0 after all rows are 
                 fetched (next() returns false).
11892137         ORA-22925 when retrieving a LOB larger than 2gb via JDBC thin
11931187         The 11.2 JDBC driver handles embedded CALL statements differently to 11.1
12596686         JDBC thin app sends scale value of 0 or 9 for Timestamp binds causing many 
                 child cursors
12744662         Connection/login failure with "IOError: undefined error" if os username contains 
                 specific multi-byte character
12744967         Using newer time zones with JDBC fails with "The database session time zone is not 
                 supported"
12775220         DatabaseMetaData.getColumns() returns unexpected values in COLUMN_SIZE and 
                 DECIMAL_DIGITS for INTEGER columns
13387375         ORA-932 using JSP with ADT argument
13428912         PreparedStatement executeBatch() fails with ORA-1460 while execute() works
13508485         JDBC Statement.cancel can cause ORA-1013 from a Rollback
13583799         JDBC class NTFConnection creates runaway threads
13627118         Atlantic/Jan_Mayen mapping in ZONEIDMAP.java does not match the database value
13688142         JDBC cannot connect to RAC using shared server when the DISPATCHERS parameter 
                 has POOL=ON and redirection occurs - superseded
13877559         oracle.sql.TIMESTAMP.TimeZoneConvert() returns wrong results
14021941         JDBC program shows high cursor version count and high bind mismatch count
14107475         ORA-4043 using JDBC OCI; JDBC thin works
14223360         oracle.jdbc.pool.OracleDataSourceFactory ignores connection properties when 
                 creating an OracleDataSource
14244395         JDBC Thin ResultSet.isBeforeFirst() always returns true when Calling a PLSQL
14282782         JDBC still uses the RULE hint for certain queries on ALL_SYNONYMS which degrades 
                 performance
14298523         With the patch for bug 13688142 installed JDBC cannot connect using shared server 
                 when the DISPATCHERS parameter has POOL=ON and no redirection occurs
14354533         Calling getMetaData() on a StructDescriptor.gives poor performance selecting 
                 from ALL_TYPE_ATTRS
14496772         The JDBC SQL parser treats literals containing the word RETURN as though they 
                 were a RETURN[ING] ... INTO clause
14584969         OutOfMemory exception when executing a plsql statement with 280+ VARCHAR2 
                 parameters in JDBC
16479818         JDBC NTFConnection threads are stuck waiting and consuming CPU


관련 오라클문서
JDBC - Version 11.1.0.7 to 11.2.0.3.0 [Release 11.1 to 11.2] 에서 위와 같은 현상이 있음

High CPU Usage On oracle.jdbc.driver.NTFConnection (Doc ID 2198999.1)

Last updated on OCTOBER 05, 2020

APPLIES TO:

JDBC - Version 11.1.0.7 to 11.2.0.3.0 [Release 11.1 to 11.2]
Information in this document applies to any platform.

SYMPTOMS


High CPU usage on application using JDBC 11.2.0.3 (in this case OAM 11.1.2.3 BP4).
The CPU load of the OAM managed server increases over time.

Top used threads show a common stack:

"Thread-47" prio=10 tid=<TID> nid=<NID> waiting on condition
[0x00000000436e7000]
java.lang.Thread.State: RUNNABLE
at java.nio.HeapByteBuffer.slice(HeapByteBuffer.java:80)
at oracle.jdbc.driver.NTFConnection.getNextNSPacket(NTFConnection.java:308)
at
oracle.jdbc.driver.NTFConnection.unmarshalOneNSPacket(NTFConnection.java:330)
at oracle.jdbc.driver.NTFConnection.run(NTFConnection.java:185)
---


This method is related with the Oracle JDBC Driver at class "oracle.jdbc.driver.NTFConnection.readFromNetwork".

The result is a gradual increase in CPU consumption from 4 - 80%, in a two week period. After a restart, the cpu load is normal again; then it rises again in a two week period.