吳密的博客

          每天進步一點點
          posts - 12, comments - 1, trackbacks - 0, articles - 1

          系統內存泄露(防丟)

          Posted on 2011-01-06 18:38 xiaolang 閱讀(2562) 評論(0)  編輯  收藏

            1. Jboss數據源配置文件中, <prepared-statement-cache-size>配置項的值設置過大(最初設為100),是導致內存使用過大的直接原因。眾所周知,對sql語句進行預編譯,可以提高sql語句的查詢效率,因此使用該配置項設定最多緩存多少條預編譯的sql語句(tradequery應用系統設定的值為100個)。物理分庫后,一臺服務器從20個數據庫連接增加到60個數據庫連接,每個連接都會緩存100條預編譯的sql, 總共就是60*100 = 6000個。然而實際上jdbc在解析sql語句的時候,進行緩存的并不只是sql語句本身,還緩存了查詢結果字段類型的大小。并且如果語句中包含in的查詢,由于in后面的列表是變化的,因此就可能會對一條查詢語句進行多次不同的緩存。此外,jdbc driver里還會預先設定一個值(fetch Size),用來表示緩存sql的查詢結果條數,這也會再次成倍數的增加內存的消耗。因此,<prepared-statement-cache-size>值設置太大,將可能會耗光應用服務器的內存。

           

          2. 使用了未設計細致的velocity引擎, new了大量的空對象。因為銷售老的流程引擎中直接使用了velocity引擎,而引擎中使用了老的log4j文件,由于框架中也未設置velocity的日志配置,輸出日志時,沒有找到appender,所以都是新new出來的。因此一旦業務發展,每次流程執行中都會新建大量的appender對象。業務量到一定程度的時候,會導致系統內存爆滿。

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


          網站導航:
           
          主站蜘蛛池模板: 松原市| 通渭县| 将乐县| 德庆县| 桐乡市| 南汇区| 那曲县| 塔河县| 临桂县| 息烽县| 镇原县| 图们市| 全椒县| 宁化县| 赤峰市| 金华市| 三河市| 屯留县| 葵青区| 陕西省| 永城市| 肥乡县| 台中市| 聊城市| 漾濞| 博爱县| 军事| 遂溪县| 顺平县| 什邡市| 沙湾县| 连云港市| 攀枝花市| 蛟河市| 潞西市| 汉沽区| 铁岭市| 全椒县| 泗洪县| 沭阳县| 昔阳县|