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 閱讀(1202) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 定襄县| 宁国市| 霍州市| 宕昌县| 左贡县| 清远市| 凤山市| 镶黄旗| 乾安县| 黎城县| 河北区| 盘锦市| 云和县| 盱眙县| 壶关县| 隆尧县| 凌海市| 黄大仙区| 滁州市| 黔东| 澄城县| 文昌市| 宁海县| 通渭县| 罗田县| 邢台市| 郧西县| 晋中市| 舞阳县| 泾源县| 宿松县| 唐山市| 同心县| 万宁市| 禄劝| 馆陶县| 萍乡市| 惠州市| 墨竹工卡县| 错那县| 武川县|