jetty request统计 StatisticsHandler

jetty的StatisticsHandler类可以让我们统计到:

1、所有请求数

2、当前活动请求数

3、最大活动请求数

4、最大请求处理时间

5、返回码为4XX,5XX的请求数等

这些有助于我们分析jetty运行状况,但是查看StatisticsHandler的这些统计有点麻烦,通过派生StatisticsHandler类可以很容易做到这点:

package stat;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.mortbay.jetty.handler.StatisticsHandler;

public class RequestStat extends StatisticsHandler {

private Thread t = new Thread() {

   @Override
   public void run() {
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    while (true) {
     try {
      sleep(20000);
     } catch (Exception e) {
    
     }
     System.out.println(df.format(new Date()) + " act:" + RequestStat.this.getRequestsActive()
        + ", requests:" + RequestStat.this.getRequests()
        + ", actMas:" + RequestStat.this.getRequestsActiveMax()
        + ", curReqs.size:" + RequestStat.this.curReqs.size()
        + ", curReqs:" + RequestStat.this.curReqs);
    }
   }
  
};
public RequestStat() {
   t.setDaemon(true);
   t.start();
}

Map<Thread, String> curReqs = new ConcurrentHashMap<Thread, String>();

public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException {
   try {
            synchronized(this) {
            curReqs.put(Thread.currentThread(), request.getRequestURI() + "?" + request.getQueryString());            }
           
            super.handle(target, request, response, dispatch);
        }
        finally {
        synchronized(this) {
           curReqs.remove(Thread.currentThread());
        }
       
        }
}
}

将上面的class打成jar包放到jetty/lib目录中

jetty.xml里加上如下:

<Set name="handler">
        <New class="stat.RequestStat">
    <Set name="handler">
      <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
        <Set name="handlers">
         <Array type="org.mortbay.jetty.Handler">
           <Item>
             <New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
           </Item>
           <Item>
             <New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/>
           </Item>
           <Item>
             <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>
           </Item>
         </Array>
        </Set>
      </New>
</Set>
      </New>
    </Set>

重启jetty,这样在jetty stderrout.log日志中就可以看到输出的统计信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值