oracle jdbc 连接池 B/S动态实时程序在多客户端同时登录时存在延迟卡顿的问题

iceqijunfei 2014-05-30 03:29:29
我用java jdbc做了一个B/S的实时查看数据的程序 用到了oracle连接池,原来在服务器测试时十分流畅,最快可以实现3秒一刷新。后来做了压力测试,当多台客户端同时登陆程序的时候,数据刷新就会出现明显的延迟。后来在10台客户端同时登陆时,刷新频率要调到8秒才能保证运行。
但是在客户现场,网络比公司的网络要更慢,而且会有50台甚至80台客户端同时登陆,而且刷新时间要保证到3秒。
我的jdbc连接池还没有做过什么优化,请大神帮我优化一下,或者告诉我一个什么更好的办法!急求!!!

@Component
public class JdbcCon {
private Statement stmt;

public boolean connect;

public PooledConnection dbpool;
public OracleConnectionPoolDataSource ocpds = null;

public void setConnect(boolean connect) {
this.connect = connect;
}

StringBuffer script = new StringBuffer();

// 私有构造器
public JdbcCon() {
try {

try{
dbpool = ocpds.getPooledConnection();
}
catch (Exception e) {
OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
ocpds.setURL("jdbc:oracle:thin:@localhost:1521:orcl");
ocpds.setUser("hafei");
ocpds.setPassword("hafei123");
dbpool = ocpds.getPooledConnection();
}
this.connect = true;
} catch (Exception e) {
this.connect = false;
}
}

@Expose
public boolean getConnect() {
JdbcCon con = new JdbcCon();
try{con.dbpool.close();}
catch(Exception e){}
return con.connect;
}
/*
* 执行一句查询的SQL
*/
public ResultSet executeQuery(String sql) throws SQLException {

Statement stmt = null;
ResultSet result = null;
Connection connection = null;

try{
connection = dbpool.getConnection();
stmt = connection.createStatement();
result = stmt.executeQuery(sql);
}

catch( Exception e){
//System.err.println("Error in Query - SQLBean : ");
//e.printStackTrace(System.err);
}
return result;
}

// 执行单句INSERT、UPDATE 或 DELETE 语句, 如果执行INSERT时, 返回主键
public int executeUpdate(String sql) throws SQLException {
Statement stmt = null;
int rc = 0;

Connection connection = null;

try
{
connection = dbpool.getConnection();
stmt = connection.createStatement();
rc = stmt.executeUpdate(sql);
}

catch( Exception ex )
{
//System.err.println("Error in Update - OraPooledSQL : ");
//ex.printStackTrace(System.err);
}

return rc;
}
public void closeStmt()
{

try
{
stmt.close();
}
catch(SQLException e)
{
// System.err.println("*** db:closeStmt():\r"+e.getMessage());
}
}

public void closeConn()
{

if(dbpool != null) {
try {
dbpool.close();
} catch(Exception ex){
// ex.printStackTrace();
}
}
}
}
...全文
346 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iceqijunfei 2014-06-09
  • 打赏
  • 举报
回复
引用 6 楼 iceqijunfei 的回复:
每台客户端的并发连接数为50到70台左右,50个客户端的连接数大概为2500到3500个。
说错了 没有那么多并发 50个客户端并发连件数为100到200个。
iceqijunfei 2014-06-09
  • 打赏
  • 举报
回复
每台客户端的并发连接数为50到70台左右,50个客户端的连接数大概为2500到3500个。
iceqijunfei 2014-06-03
  • 打赏
  • 举报
回复
引用 4 楼 hzw2312 的回复:
socket timeout exception 你说的网络不行~难道你这个东西不是内网访问么? 还有就是检查你的连接数!看看是不是太多的连接请求在等待!!!然后等太久没有响应过后就直接报连接超时了!
是内网,也是有线,但是带宽不高,只求大神帮忙优化一下。最大连接数之类的都是初始值。
BUG胡汉三 2014-06-03
  • 打赏
  • 举报
回复
socket timeout exception 你说的网络不行~难道你这个东西不是内网访问么? 还有就是检查你的连接数!看看是不是太多的连接请求在等待!!!然后等太久没有响应过后就直接报连接超时了!
iceqijunfei 2014-06-03
  • 打赏
  • 举报
回复
求dba大神们看过来=。=
wqkjj 2014-05-30
  • 打赏
  • 举报
回复
你这个问题只怕要找DBA帮你看看性能优化问题
iceqijunfei 2014-05-30
  • 打赏
  • 举报
回复
补充一下 我的程序在运行时偶尔还会弹出socket timeout exception的异常。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧