Dr.Magic
I know you know!
posts - 9,comments - 3,trackbacks - 0
   这是最近在一个web项目开发中遇到的问题。项目快验收时,我负责对项目进行压力测试(JMeter)。在测试中发现凡是涉及到SAP函数调用的页面最高只能达到30秒内50个并发,而且还不稳定。于是察看SAP函数的调用代码:
 1public 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个并发,基本能够满足业务需求,至于如何在提高并发数我觉得跟服务器配置有很大关系,除此我还没想到解决方案。修改后代码如下(偷点懒 -_-! ):
 1public SimpleResource() throws SapInterfaceException  {
 2        prepare();
 3    }

 4
 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项目这种要求大量并发的情况,连接池的建立和连接释放都要好好考虑并发处理。
posted on 2005-11-30 18:24 Dr.Magic 阅读(1186) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: