精华内容
下载资源
问答
  • 快速的统计HTTP请求的分布

    千次阅读 2013-06-03 17:20:20
    快速的统计HTTP请求的分布 nemozhang 2012-09-22 09:56BhmvdGYe3KCAw+BUS4nvw 需求: 有一堆CGI,都需要传入appid参数,怎么查看当前那些Appid的访问量最大? 怎么查看这些CGI的请求量分布? 解决: ...

    快速的统计HTTP请求的分布

    需求:
    有一堆CGI,都需要传入appid参数,怎么查看当前那些Appid的访问量最大?
    怎么查看这些CGI的请求量分布?

    解决:
    假设, 我们的webserver的请求都是通过LVS接入的, 那么所有的外网请求都经过tunl0网卡, 假设本机绑定的LVS的IP是:113.108.20.23, 监听端口是80, 那么统计脚本是:

    // 统计所有发往本机的请求中, appid的分布
    sudo tcpdump -c 30000 -itunl0 -s 512 dst port 80 and dst host 113.108.20.23 -A 2>&1 | awk -F'appid=' '{print $2}' |tee /tmp/tee.log| awk -F '&' '{print $1}' |awk -F' ' '{print $1}'| sort | uniq -c | sort -rn | head
    120298 // 这一行是空行, 可以忽略
    1349 47 // appid为47的访问次数为1349次
    447 61
    421 2141
    370 2736
    253 2227
    192 33
    145 282
    139 121282
    125 343


    // 统计所有发往本机的请求中, cgi的分布
    sudo tcpdump -c 30000 -itunl0 -s 512 dst port 80 and dst host 113.108.20.23 -A 2>&1 | grep 'GET\|POST' | awk -F' ' '{print $(NF-1)}' | awk -F'?' '{print $1}' |grep -v '\.'| sort | uniq -c | sort -rn | head
    1150 /v3/user/get_info
    1011 /v3/user/is_login
    991 /v3/spread/is_reminder_set
    635 /v3/spread/set_reminder
    240 /v3/page/is_fans
    210 /v3/relation/get_app_friends
    140 /v3/user/is_setup
    126 /v3/user/is_vip
    97 /v3/user/get_multi_info
    76 /v3/user/total_vip_info

    分析:
    -c 30000 表示抓30000个包就退出.
    -s 512 显示每个包的前512个字节. -s 0是显示全部, 太多了不多没必要.
    -A 以ascii方式显示包.
    tee 该命令是一个双向重定向命令, 可以方便的查看管道的中间输出结果.

    扩展:
    你可以统计http请求中任意一个参数的分布, 就简单的把appid 改为 pf, 就可以统计来自各个平台的请求的分布了.
    展开全文
  • 在网站性能的相关工作中,一个重要的方面是... 监控http请求的处理时间的方法有很多,这里介绍一种java(j2ee)的web程序中监控/统计http请求处 理时间的简便方法:就是利用Filter来统计所有请求的处理时

    在网站性能的相关工作中,一个重要的方面是有一定的监控和日志统计,然后对这些数据进行分

    析,知道什么时候慢了,慢在哪里,然后才可以进行有针对性的性能优化工作;

    这里,80/20准则是非常适用的,我所见过的大部分情况都是约80%页面都是没问题的,但是有约20%的

    页面的性能较差;

    监控http请求的处理时间的方法有很多,这里介绍一种java(j2ee)的web程序中监控/统计http请求处

    理时间的简便方法:就是利用Filter来统计所有请求的处理时间;

    Filter是j2ee的一种过滤器模式,可以在一个filterchain上挂很多个不同的filter,做各种的处理,

    比如安全、编码等;filter可以指定对应到哪些url,如果指定url-pattern为/*,那么就可以做对所有

    请求的统计

    添加一个Filter名为PerfFilter, 在web.xml添加如下代码

     

    然后在PerfFilter中有如下代码

    这时候,所有的http请求,无论是servlet,jsp还是其他各种框架的实现,比如struts,springmvc,jsf

    等,都可以被这个Filter统计到,可以方便后续的日志分析工作[实际中通常将System.out换成相关的

    logger],找到较慢的请求,然后重点该进。

    例如,本地访问servlet和jsp,就会在控制台看到如下输出;

    ***request (/webtest/TestServlet) finished with time(ms): 5000

    ***request (/webtest/jsp1.jsp) finished with time(ms): 3000

    有必要的话,还可以将请求相关的参数打印出来,因为实际工作中,不少请求的响应时间是和参数密

    切相关的;

    这种做法的好处是有一个单独、统一的性能日志,系统以后添加任何servlet/jsp或者切换框架,都不

    需要任何改动;

     

    展开全文
  • 流量带宽请求状态统计 ngx_req_status用来展示nginx请求状态信息,类似于apache的status,nginx自带的模块只能显示连接数等等信息,我们并不能知道到底有哪些请求、以及各url域名所消耗的带宽是多少。ngx_req_status...
  • 这个方法得到的结果与阿里巴巴的druid统计的时间略少10%多一点儿 统计结果如图: 今天根据URI费时分析看出访问微信接口获取openid和token,以及头像,昵称这俩接口比较耗时,因此在前端改为获取过信息...

    以spring boot为例,注意拦截器是单例 ,因此不要使用成员变量记录时间,而是通过setAttribute,getAttribute来传送时间。

    @Configuration
    public class BootWebAppConfigurer extends WebMvcConfigurerAdapter {
    	@Override
    	public void addInterceptors(InterceptorRegistry registry) {
    		registry.addInterceptor(new BootInterceptor()).addPathPatterns("/**");
    		super.addInterceptors(registry);
    	}
    }

    /***
     * 拦截器,单例
     */
    public class BootInterceptor implements HandlerInterceptor {
    	public final AtomicLong _count = new AtomicLong();// 计数器
    
    	// 1
    	public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) {
    		long begin_nao_time = System.nanoTime();
    		String realIp = HttpHeadTool.getRealIpAddr(req);
    		req.setAttribute("p_real_ip", realIp);
    		req.setAttribute("begin_nao_time", begin_nao_time);
    		return true;
    	}
    
    	/*3*/
    	public void afterCompletion(HttpServletRequest req, HttpServletResponse resp, Object arg2, Exception arg3)
    			throws Exception {
    		long begin_nao_time = (Long) req.getAttribute("begin_nao_time");
    		String real_ip = (String) req.getAttribute("p_real_ip");
    		long interval = System.nanoTime() - begin_nao_time;
    		String uri = req.getRequestURI();
    		StatsManager.inst().statsUri(uri, interval);//统计费时
    	}
    
    	/* 2 */
    	public void postHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2, ModelAndView arg3)throws Exception {}
    }

    这个方法得到的结果与阿里巴巴的druid统计的时间略少10%多一点儿

    统计结果如图:


    今天根据URI费时分析看出访问微信接口获取openid和token,以及头像,昵称这俩接口比较耗时,因此在前端改为获取过信息后放在本地存储,提高了约0.2秒的加载时间

    展开全文
  • 现有基础数据13w条,需循环通过第三方HTTP接口获取历史数据进行分析统计,意味着要发生13w次HTTP请求。接口请求速度还比较慢,平均每次请求需要1s,如果在单线程的情况下至少需要36个小时,目前我设计的是使用多线程...
  • Web应用请求平均时间统计

    千次阅读 2017-09-28 15:49:13
    使用Filter统计web应用平均请求时间: 使用两个Map分别存储请求时间和请求次数,当请求来临时,使用请求总时间/请求次数即可获取平均请求时间。 import java.io .IOException; import java.math.BigDecimal; ...

    使用Filter统计web应用平均请求时间:

    使用两个Map分别存储请求时间和请求次数,当请求来临时,使用请求总时间/请求次数即可获取平均请求时间。

    import java.io .IOException;
    import java.math.BigDecimal;
    import java.util.Date;
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.atomic.AtomicLong;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    import jxl.common.Logger;
    
    public class RequestCostFilter implements Filter {
    
    	private Logger logger = Logger.getLogger(getClass());
    
    	private static Map<String,AtomicLong> reqTimes = new ConcurrentHashMap<>();
    
    	private static Map<String,BigDecimal> reqAvgTime = new ConcurrentHashMap<>();
    
    	private static ExecutorService executorService = Executors.newFixedThreadPool(20);
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
    			throws IOException, ServletException {
    		HttpServletRequest httpRequest = (HttpServletRequest) request;
    		String url = httpRequest.getServletPath();
    		if (checkUrl(url)) {
    			Date beginTime = new Date();
    			filterChain.doFilter(request, response); // 继续执行
    			Date endTime = new Date();
    			long i = (long) ((endTime.getTime() - beginTime.getTime()));
    			stat(url,i);
    		} else {
    			filterChain.doFilter(request, response); // 继续执行
    		}
    	}
    
    	/**
    	 * 统计URL的平均请求时间
    	 * @param url
    	 * @param time
    	 */
    	private void stat(final String url,final long time){
    		executorService.submit(new Runnable(){
    			public void run(){
    				try {
    					if (reqTimes.get(url) == null) {
    						reqTimes.put(url, new AtomicLong(1L));
    					} else {
    						reqTimes.get(url).addAndGet(1L);
    					}
    					if (reqAvgTime.get(url) == null) {
    						reqAvgTime.put(url, new BigDecimal(time));
    					} else {
    						BigDecimal tt = reqAvgTime.get(url).add(new BigDecimal(time));
    						reqAvgTime.put(url, tt);
    					}
    					BigDecimal avgtime = reqAvgTime.get(url).divide(new BigDecimal(reqTimes.get(url).get()), 2, BigDecimal.ROUND_HALF_EVEN);
    					if (avgtime.longValue() > 500) {
    						logger.warn(">>>>>>>>>>>|请求平均耗时:" + avgtime + "ms|请求次数:" + reqTimes.get(url).get() + "|URL:" + url + "|");
    					}
    				}catch (Exception e){
    					logger.error("统计URL请求时间出错",e);
    				}
    			}
    		});
    	}
    
    	/**
    	 * 一级验证
    	 */
    	private boolean checkUrl(String url) {
    		boolean isSucc = true;
    		try {
    			// 不拦截登录请求
    			if ("//login.jsp".equals(url)) {
    				return false;
    			}
    			int pointIndex = url.lastIndexOf(".");
    			if (pointIndex > 0) {
    				String relUrl = url.substring(pointIndex, url.length());
    				if (".css".equals(relUrl)) {
    					return false;
    				}
    				if (".jpg".equals(relUrl)) {
    					return false;
    				}
    				if (".gif".equals(relUrl)) {
    					return false;
    				}
    				if (".png".equals(relUrl)) {
    					return false;
    				}
    				if (".ico".equals(relUrl)) {
    					return false;
    				}
    				if (".js".equals(relUrl)) {
    					return false;
    				}
    				if (".jsp".equals(relUrl)) {
    					return false;
    				}
    			}
    		} catch (Exception e) {
    			logger.error("系统进行资源一级验证时错误!", e);
    		}
    		return isSucc;
    	}
    
    	@Override
    	public void init(FilterConfig arg0) throws ServletException {
    		// TODO Auto-generated method stub
    
    	}
    
    }
    在web.xml中配置filter:

    <!-- 请求耗时过滤器 -->
    	<filter>
    		<filter-name>requestCostFilter</filter-name>
    		<filter-class>org.extremecomponents.table.filter.RequestCostFilter</filter-class>
    	</filter>
    	<filter-mapping>
    		<filter-name>requestCostFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    打印日志如下:

    Warning:  >>>>>>>>>>>|请求平均耗时:532.34ms|请求次数:1467|URL:/servlet/UploadServlet|
    Warning:  >>>>>>>>>>>|请求平均耗时:949.64ms|请求次数:4407|URL:/leaderApproval!list.action|



    展开全文
  • HTTP: 概念:Hyper Text Transfer Protocol 超文本传输协议 传输协议:定义了,客户端和服务器端通信时,发送数据的格式 特点: 基于TCP/IP的高级协议 默认端口号:80 基于请求/响应模型的:一次请求对应一次...
  • HTTP 请求和响应

    千次阅读 2019-08-29 20:37:31
    目录 一、HTTP 介绍 ... 三、请求消息数据格式 1、请求行 2、请求头 ...五、一次完整http请求的过程 一、HTTP 介绍 HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是浏览器和服务器之间进行“...
  • 本文涉及两种请求方式,即 get 和 post 。通过java后台设置请求头部 可以根据需求修改或者添加请求头信息。 修改请求头代码 根据不同的请求方式,在main方法中选择调用不同的方法(get/post ) package ...
  • OkHttp 之 网络请求耗时统计

    万次阅读 2018-08-27 16:53:31
    OkHttp 之 网络请求耗时统计 OkHttp 3.11.0版本提供了EventListener接口,可以让调用者接收一系列网络请求过程中的事件,例如DNS解析、TSL/SSL连接、Response接收等。通过继承此接口,调用者可以监视整个应用中网络...
  • 对http4j做了一些改动封装,修改若干bug。可以用于模拟http请求。获取详细耗时信息。可运行test测试类调试。
  • Http请求的流程原理以及请求详解

    千次阅读 2019-03-12 16:04:10
    1.Http请求的基本流程 HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。 HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在...
  • 百度、cnzz、piwik 统计ajax请求方法

    千次阅读 2016-08-25 14:43:06
    百度统计 :<script type="text/javascript"> $('area').click(function(){ //目标url var baiduStatUrl = $(this).attr('href').replace('http://', '/')+'/'+encodeURL($(this).attr('alt'));
  • 随着大数据时代的到来,数据成了兵家必争之地,据之前的数据统计全球数据基本一年多就会翻上一番,当然从数据中做出成绩的公司也数不胜数,与此同时,我们也是越来越高重视数据采集,数据将作为每一个公司的重要战略...
  • Spring Boot基于AOP处理Web请求的日志打印以及请求时间统计 时间统计: web日志打印 参考资料: 项目的WebLogAspcect类。 http://blog.didispace.com/springbootaoplog/...
  • nginx处理http请求

    千次阅读 2017-01-15 14:56:53
    上一篇文章分析了ngixn服务器如何接收客户端发来的http请求行、http请求头部。本文在这基础上分析nginx服务器收到http请求行、请求头部后,http框架是如何调度各个http模块共同完成这个http请求。例如: http框架调度...
  • HTTP请求消息_请求行_请求

    千次阅读 2020-01-24 20:21:15
    请求方式:HTTP协议存在7种请求方式,主要是GET和POST GET:请求参数在请求行当中,请求url长度有限制,不太安全 例如:http://localhost/demo?username=cnjanus POST:请求参数在请求体当中,请求url长度无限制,...
  • 如何查看HTTP请求耗时

    2021-03-30 18:52:05
    目录HTTP 请求流程域名解析建立 TCP 连接建立 SSL/TLS 连接发送 HTTP 消息服务器响应并返回Node.js 查看请求耗时事件 Eventrequest 模块curl 查看请求耗时参考 HTTP 请求流程 一次完整的 HTTP 请求流程主要包括以下...
  • 【Python Flask实战】获取HTTP请求数据

    千次阅读 2021-03-28 00:45:27
    客户端通过Url访问服务端程序,会发送给服务端两类信息,一类是HTTP请求头,另外一类就是请求数据。一般HTTP请求会通过GET方法和POST方法向服务端提交数据。因此,服务端程序需要获得...
  • HTTP请求头及其作用

    万次阅读 多人点赞 2018-03-23 14:09:27
    HTTP请求头Header及其作用详解下面是访问的一个URL,http://www.hzau.edu.cn的一个header,根据实例分析各部分的功能和作用。1、Accept,浏览器端能够处理的内容类型。例如: Accept: text/html 代表浏览器可以...
  • HTTP请求响应内容详解

    万次阅读 多人点赞 2017-01-15 15:47:46
    (尊重劳动成果,转载请注明出处:http://blog.csdn.NET/qq_25827845/article/details/54562339冷血之心的博客) 目录 HTTP协议(重点) ...统计工作: 防盗链: 4 响应协议 4.1 响应内容...
  • 使用httpflow提取HTTP数据包的请求和响应
  • 该端点必须接受使用任何一种方法(GET,POST,PUT,DELETE)发送的HTTP请求,并以描述该请求的JSON进行响应。 具体来说,响应JSON必须包含以下字段 {time:// //收到请求的时间,方法://用于发出请求的HTTP方法,...
  • HTTP请求详解

    千次阅读 2015-08-11 20:41:36
    1. HTTP请求格式   做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。HTTP协议传输的消息也是这样规定...
  • HTTP请求头referer

    万次阅读 2020-09-09 16:55:18
    通过谷歌和火狐浏览器自带的调试工具,可以看到HTTP请求头信息 从上图可以发现,Chrome浏览器中的请求头中的Referer地址为详细的页面地址信息,而Firefox浏览器中的请求头中的Referer地址,却只显示了域名信息。...
  • http请求中的referer

    千次阅读 2015-08-05 17:38:40
    HTTP referer是一个HTTP请求头,名字是“referer”,当浏览器向Web服务器发送请求的时候,一般会带上referer,告诉服务器是从哪个页面链接过来的。服务器可以获得referer用于处理,比如统计每天有都少访问是从搜索...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 195,177
精华内容 78,070
关键字:

统计http请求