qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Tomcat重啟負載高問題定位

           某產品每次重啟Tomcat都會收到CPU告警信息,重啟階段CPU使用率可以達到80%~90%以上,會持續一段時間回降(具體時間沒有考察)。應產品方要求,對該問題進行分析定位。
            因線上產品不能隨便重啟,問題定位階段使用的是同規格的云主機QA19,該環境上有和線上一致的應用程序,且重啟tomcat時,也會有CPU飆高的現象。
            負載高的原因:
            重啟的時候對資源使用情況進行監控,并通過top-H+jstack分析消耗CPU過高的線程堆棧信息。
            通過監控重啟時的資源使用情況,在qa19這臺機器上,重啟一次,CPU飆高的持續時間約為50-60s左右。
            通過top-H+jstack定位消耗CPU過高的線程,發現有三個:
            1.springapplicationContext在web容器中加載過程消耗的資源:(部分堆棧信息)
          "main" prio=10 tid=0x000000004166f800 nid=0x100f runnable [0x00007fbf42987000]
          java.lang.Thread.State: RUNNABLE
          at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:384)
          at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
          at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
          at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
          at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          at java.lang.reflect.Method.invoke(Method.java:597)
          at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
            2.兩個編譯線程:
          "C2CompilerThread1"daemonprio=10tid=0x00007fec48001800nid=0x13c4runnable
          java.lang.Thread.State:RUNNABLE
          "C2CompilerThread0"daemonprio=10tid=0x00000000407c1000nid=0x13c3runnable
          java.lang.Thread.State:RUNNABLE
          嘗試的解決方法:
            helloJava的兩篇文章中給出了兩種配置方法:見:http://hellojava.info/?p=195以及http://hellojava.info/?p=201
            嘗試加上-XX:+TieredCompilation,期望借助多層編譯來緩解這個問題:
            在tomcatjvm參數中增加該配置項,資源監控CPU飆高持續時間降低到45s左右,比原來少了10s+,略有效果
            嘗試加一個-XX:CICompilerCount參數來試試,這個值默認是2,也就是說2個c2的編譯線程來進行編譯:
            因為QA19和線上tomcat應用服務器都是2個核的云主機,所以默認值2應該是最優值,嘗試把該值改成1or4,沒有起到優化效果。
            存在問題:
            對于QA19性能測試環境來說,重啟后沒有其他請求引入,但是線上環境重啟后會不斷有請求過來,所以CPU飆高的時間會持續時間更長。
            對于性能測試環境,重啟之后的進行第一次并發測試,前期負載同樣會很高,如下圖:
            同樣,在測試開始后通過top-H+jstack分析堆棧信息,分析得到兩個原因:
            啟動各種各樣的線程進行處理請求,如AJP線程、和數據通信的線程、和ActiveMQ通信的線程等,會短時間內耗費一些資源
            另外,測試剛啟動時,"C2CompilerThread1"該線程耗費資源過多,會一段時間內持續在40%~80%的CPU消耗
            測試時,增加-XX:+TieredCompilation該參數,對比資源使用情況如下:
            并發50個線程時,增加參數之前(左圖)和增加參數后(右圖)
            
              并發100個線程,增加參數前(左圖)和增加參數后(右圖)
            結論:
            可以看出即便有流量引入,-XX:+TieredCompilation該參數也是起到了一定作用,使得飆高的CPU盡快回落。

          posted on 2014-01-10 09:32 順其自然EVO 閱讀(972) 評論(0)  編輯  收藏 所屬分類: web 前端性能測試

          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 曲沃县| 通渭县| 阿图什市| 雷波县| 遂平县| 五峰| 莲花县| 山丹县| 东山县| 璧山县| 汉阴县| 德钦县| 秦皇岛市| 方城县| 青田县| 德庆县| 县级市| 万州区| 固镇县| 阿克陶县| 盈江县| 星子县| 克山县| 时尚| 莱西市| 昌江| 驻马店市| 休宁县| 广州市| 女性| 濮阳县| 玉树县| 东台市| 龙山县| 丁青县| 扎囊县| 习水县| 揭东县| 博白县| 哈巴河县| 旬邑县|