放翁(文初)的一畝三分地

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            210 隨筆 :: 1 文章 :: 320 評論 :: 0 Trackbacks
          Jetty內部只有一個線程池負責NIO事件,業務事件的執行,因此在做壓力測試的時候,如何簡單知道當前這個線程池運行狀態對于系統調優來說很重要,其實Jetty主框架是配置代替編碼的模式,因此你只需要配置一下,就可以獲得Jetty內部任何數據。
          先看看配置:
          當前丟在了jetty-deploy.xml中,其實完全可以自己去寫一個xml分離開來:

          <Configure id="Server" class="org.eclipse.jetty.server.Server">

              <!-- =========================================================== -->
              <!-- Configure the deployment manager                            -->
              <!--                                                             -->
              <!-- Sets up 2 monitored dir app providers that are configured   -->
              <!-- to behave in a similaraly to the legacy ContextDeployer     -->
              <!-- and WebAppDeployer from previous versions of Jetty.         -->
              <!-- =========================================================== -->
              <Call name="addBean">
               <Arg>
                <New class="com.taobao.top.xbox.util.JettyThreadPoolInspector">
                 <Set name="server">
                      <Ref id="Server" />
                    </Set>
                    <Set name="interval">5</Set>
                </New>
               </Arg>
              </Call>


          ......
          </Configure>

          看看下面這段簡單的代碼,就知道如何輸出jetty內部的線程了:

          /**
           * @author fangweng
           * @email fangweng@taobao.com
           * @date 2011-6-22
           *
           */
          public class JettyThreadPoolInspector implements LifeCycle,Runnable{
           
           private static final Log logger = LogFactory.getLog(JettyThreadPoolInspector.class);
           
           Server server;
           int interval = 10 * 60;//每隔多少時間輸出隊列信息
           Thread innerThread;
           boolean flag = true;

           public int getInterval() {
            return interval;
           }

           public void setInterval(int interval) {
            this.interval = interval;
           }

           public Server getServer() {
            return server;
           }

           public void setServer(Server server) {
            this.server = server;
           }
           
           public void run()
           {
            while(flag)
            {
             try
             {
              logger.warn(new StringBuilder().append("Jetty Thread Pool: ").
                append(server.getThreadPool().toString()).toString());
              
              Thread.sleep(interval * 1000);
             }
             catch(Exception ex)
             {
              logger.error(ex);
             }
            }
           }

           @Override
           public void start() throws Exception {
            
            innerThread = new Thread(this,"JettyThreadPoolInspector-thread");
            innerThread.start(); 
           }

           @Override
           public void stop() throws Exception {
            this.flag = false;
            innerThread.interrupt();
           }


          ......

          至此為止,其實想說明的就是Jetty內部透明很容易做到,隨意可植入,如果不喜歡循環輸出,都可以實現監聽kill -3的模式來dump出關心的信息。
          posted on 2011-06-22 17:03 岑文初 閱讀(4015) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 新宾| 利辛县| 苏尼特右旗| 刚察县| 隆子县| 松潘县| 额济纳旗| 鄂温| 凤凰县| 阳江市| 余庆县| 乐山市| 隆昌县| 清远市| 来宾市| 商丘市| 扶沟县| 滨海县| 伊金霍洛旗| 安陆市| 寿阳县| 唐山市| 比如县| 高唐县| 沧州市| 江川县| 白山市| 丘北县| 禹城市| 石嘴山市| 横山县| 仙桃市| 连山| 大同县| 明溪县| 肥西县| 南靖县| 山东省| 贺州市| 陆丰市| 洞口县|