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)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 上蔡县| 济源市| 新化县| 石泉县| 海丰县| 大理市| 白城市| 自贡市| 囊谦县| 浙江省| 象州县| 南宁市| 灵石县| 尚义县| 奈曼旗| 吉安市| 内江市| 北碚区| 平顶山市| 建始县| 云阳县| 温泉县| 襄垣县| 五家渠市| 鄯善县| 卢氏县| 大竹县| 大冶市| 杂多县| 德化县| 白朗县| 遂溪县| 伊宁县| 莆田市| 子洲县| 衡水市| 汕尾市| 九龙坡区| 鲁甸县| 江城| 榆树市|