jmap查看java进程占用的数据库连接数

背景:开发中时长会出现无法连接数据库的错误,怀疑应该是不是打开的连接数过多而导致。本例中通过jmap打印虚拟机堆栈信息中的连接数来确定进程所占用的数据库(oracle)连接数。
1.查看当前数据库的连接数
select count(*) from v$session;
2.启动30个线程同时查询数据库(连接池中最大允许50个连接),但所有线程再并未关闭连接
for (int i=0;i<30;i++){
Runnable r = new Runnable(){
@Override
public void run() {
Connection con = null;
Statement stm = null;
try {
con = DataBasePool.getConnection();
stm = con.createStatement();
stm.execute("select * from tt_bar_track t");

Thread.currentThread().sleep(10000);
} catch (Exception e) {
throw new RuntimeException("exec error", e);
} finally {
//DataBasePool.close(con, stm);
}
}

};
Thread t = new Thread(r);
t.start();

}

3.查看此时的数据库连接数增加了30个
select count(*) from v$session;
4.使用jmap (jmap -histo:live pid )查看此时的java所有对象数量,找T4CConnection的个数为30。


结论:使用jmap看T4CConnection的数量即为该java进程占用的数据库连接数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值