Hurriyet

12 Mart 2014 Çarşamba

Oracle E-Business Suite: Error - JVM Leaked Connections:


"System Administrator > System Administration:Diagnostics > AOL/J Database Connection Pool Status" altında Java bağlantılarıyla ilgili belirli istatistikleri gösteren bir ekran vardır. Bu ekranın önemi veritabanına yapılan JDBC bağlantılarının performans düşüklüklerine neden olabilmesidir.

JDBC bağlantıları Java  programları ile veritabanları arasındaki bağlantıyı sağlamaktadır. Java JDBC bağlantılarıyla çalıştırılan SQL'lerin sonuçları geri döndürülür.




Bu ekranda "leaked connections" bağlantısına tıkladığımızda aşağıdaki gibi bir hata görebiliriz.

oracle.apps.fnd.security.LeakedConnectionException 1, 0x1421fc8, 2010-05-17+14:09:23.745-0700,   
 Thread[AJPRequestHandler-HTTPThreadGroup-12,5,HTTPThreadGroup]  
 at oracle.apps.fnd.security.CallStack.getInstance(CallStack.java:109)  
 at oracle.apps.fnd.security.DBConnObj.setBorrowingThread(DBConnObj.java:990)  
 at oracle.apps.fnd.security.DBConnObj.setBorrowingThread(DBConnObj.java:973)  
 at oracle.apps.fnd.common.Pool.costBasedSelection(Pool.java:1885)  
 at oracle.apps.fnd.common.Pool.selectObject(Pool.java:1686)  
 at oracle.apps.fnd.common.Pool.borrowObject(Pool.java:950)  
 at oracle.apps.fnd.security.DBConnObjPool.borrowObject(DBConnObjPool.java:584)  
 at oracle.apps.fnd.security.AppsConnectionManager.borrowConnection(AppsConnectionManager.java:330)  
 at oracle.apps.fnd.common.Context.borrowConnection(Context.java:1719)  
 at oracle.apps.fnd.common.AppsContext.getPrivateConnectionFinal(AppsContext.java:2314)



Eğer bunlardan çok varsa bir bug'a bağlantılı olarak bunlar çıkıyor olabilir. Eğer durum böyleyse bunlar gerçek olmayan sızmalardır. Bağlantılar pool'a geri döndürüldüğünde ve boş bağlantı kalmadığında oluşmaktadır. Bunun için 9907719 nolu patch indirilmeli ve uygulanmalıdır.

Connection Leakage Nedir?

Bir uygulama aldığı bağlantıyı belirtilen bir sürede geri vermez ise bununla ilgili uyarı burada çıkar.

Connection Lock Nedir?

Eğer DML operasyonları JDBC bağlantıları içerisinde gerçekleştirilip commit edilmiyorlarsa, o connection bu işi gerçekleştirene kadar locked olarak kalır.

Connection Leakage Nasıl Tespit Edilir?

Veritabanına bağlantı yapan modülleri aşağıdaki sorguyla incelemeliyiz. Eğer bu liste sürekli büyüyorsa burada bir sorun olduğunu düşünebiliriz.


 select s.machine, s.username, s.module, s.inst_id, count(*) how_many  
 from (select distinct PROGRAM, PADDR, machine, username, module, inst_id from gV$SESSION) s,  
 gv$process p  
 where s.paddr = p.addr  
 and p.inst_id = s.inst_id  
 group by s.machine,s.username, s.module, s.inst_id;  

Toplam sayıyı görmek için:

 select sum(how_many) from (select s.machine, s.username, s.module, s.inst_id, count(*) how_many  
 from (select distinct PROGRAM, PADDR, machine, username, module, inst_id from gV$SESSION) s,  
 gv$process p  
 where s.paddr = p.addr  
 and p.inst_id = s.inst_id  
 group by s.machine,s.username, s.module, s.inst_id);

Yine v$session tablosunu sorgulayaraktan hangi session'ların 24 saatten fazla açık kaldığına bakabiliriz. Sonrasında bu sessionlar incelenebilir ve kapatılabilinir.

select a.* from v$session a where sysdate-logon_time>24 and type!='BACKGROUND'; 

Referans:
1-http://oracledbascriptsfromajith.blogspot.com.tr/2010/10/how-to-prevent-inactive-jdbc.html
2-Connection Leak: Find LeakedConnectionException Reported in AOLJ Database Connection Pool Test (Doc ID 1177093.1)
3-http://ora-players.blogspot.com.tr/2011/08/jvm-taking-high-cpu-toooooooo-many-jdbc.html
4-Basic troubleshooting of JVM consuming CPU or too many JDBC connections in EBS Apps 11i (Doc ID 370583.1)
5-AOL/J JDBC Connection Pool White Paper (Doc ID 278868.1)

Hiç yorum yok:

Yorum Gönder