这是最近在一个web项目开发中遇到的问题。项目快验收时,我负责对项目进行压力测试(JMeter)。在测试中发现凡是涉及到SAP函数调用的页面最高只能达到30秒内50个并发,而且还不稳定。于是察看SAP函数的调用代码:
1
public
SimpleResource()
throws
SapInterfaceException
{
2
pool= JCO.getClientPoolManager().getPool(POOL_NAME);
3
if (pool == null){
4
try {
5
Properties properties= new Properties();
6
BufferedInputStream in= new BufferedInputStream(
7
SimpleResource.class
8
.getResourceAsStream(PROPERTIES_FILE));
9
properties.load(in);
10
in.close();
11
JCO.addClientPool(POOL_NAME, MAX_CONNECTION_COUNT, properties);
12
pool= JCO.getClientPoolManager().getPool(POOL_NAME);
13
} catch (Exception ex){
14
throw new SapInterfaceException("saply", ex);
15
}
16
}
17
}
每个调用SAP函数的Java方法都会首先实例化一个SimpleResource类来建立连接池。同步就是这个问题的关键点,在不改变原有结构的基础上(项目中涉及这个SAP函数调用的地方超多)通过修改代码,添加同步特性后能达到10秒100~120个并发,基本能够满足业务需求,至于如何在提高并发数我觉得跟服务器配置有很大关系,除此我还没想到解决方案。修改后代码如下(偷点懒 -_-! ):
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
1
public
SimpleResource()
throws
SapInterfaceException
{
2
prepare();
3
}
4![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
5
public
synchronized
static
void
prepare()
throws
SapInterfaceException
{
6
pool= JCO.getClientPoolManager().getPool(POOL_NAME);
7
if (pool == null){
8
try {
9
Properties properties= new Properties();
10
BufferedInputStream in= new BufferedInputStream(
11
SimpleResource.class
12
.getResourceAsStream(PROPERTIES_FILE));
13
properties.load(in);
14
in.close();
15
JCO.addClientPool(POOL_NAME, MAX_CONNECTION_COUNT, properties);
16
pool= JCO.getClientPoolManager().getPool(POOL_NAME);
17
} catch (Exception ex){
18
throw new SapInterfaceException("saply", ex);
19
}
20
}
21
}
对于像web项目这种要求大量并发的情况,连接池的建立和连接释放都要好好考虑并发处理。
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
2
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
3
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)
4
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
5
![](https://i-blog.csdnimg.cn/blog_migrate/1fa987a29c6482f53d401256f96355eb.gif)
6
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
7
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
8
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
9
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
10
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
11
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
12
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
13
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
14
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
15
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
16
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
17
![](https://i-blog.csdnimg.cn/blog_migrate/97e794c86028c5f5b5461ae5ef440a4c.gif)
18
![](https://i-blog.csdnimg.cn/blog_migrate/d18c02628675d0a2c816449d98bda930.gif)
19
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
20
![](https://i-blog.csdnimg.cn/blog_migrate/ecedf933ec37d714bd4c2545da43add2.gif)
21
![](https://i-blog.csdnimg.cn/blog_migrate/8f1ba5b45633e9678d1db480c16cae3f.gif)