吳密的博客

          每天進步一點點
          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對象。業務量到一定程度的時候,會導致系統內存爆滿。

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


          網站導航:
           
          主站蜘蛛池模板: 绥江县| 古交市| 吉隆县| 和静县| 罗城| 宁津县| 伽师县| 海城市| 芦溪县| 个旧市| 大英县| 达孜县| 拉萨市| 咸宁市| 大化| 贡嘎县| 凤凰县| 齐河县| 平定县| 宾川县| 舞阳县| 交口县| 敦煌市| 开封县| 新巴尔虎左旗| 勃利县| 平昌县| 鹤山市| 东乌| 滨州市| 正宁县| 浦东新区| 龙川县| 尉犁县| 佛教| 磴口县| 岱山县| 长乐市| 安阳县| 寻乌县| 博兴县|