脚本实现从客户端服务端HTTP请求快速分析
2017-12-17 18:44
267 查看
本文转载自https://www.imooc.com/article/14107
首先我想介绍下,分享这个脚本的用处:
当客户告知我们,一个页面http://www.xxx.com有问题时,作为PE,我们第一步是会是怎么作?
我的处理经验来看,我会第一时间打开我的额浏览器,输入http://www.xxx.com,去查看页面的返回以及服务端过来的响应状态。遇到的响应可能有以下几种情况:
情况一、如果页面出现“页面无法连接”
然后我执行,pingwww.xxx.com查看是否有IP解析正常,如果有预期的ip返回,那么这个命令的另一个用处就是查看,服务端到我本地端,通过ICMP协议的延时,如果RT>300ms,或者有“
Requesttimeout”,那么我判断一定是我本地到远程服务器的网络出现了异常。
情况二、如果页面可以正常打开,但是出现了如:Badgateway或者Connecttiontimeout
那么我需要去对应分析,状态码提示的问题
情况三、如果页面能正常打开,但是数据加载十分慢
那么这个时候,我需要去分析网络延时,或者是否后端处理速度缓慢。
处理这种问题,其实在linux下我们只需要用到ping和curl两个命令就可以了。
Jping的作用,就是:通过最简单且直观的方式,快速的提供请求url中过程中的相关数据(包括ICMP延时、DNS请求速度、tcp握手时间等),帮助我们快速的定位分析问题。
接下来,我就分享下Jping的实现:
脚本注解:
通过ping命令,检察1、域名DNS的解析结果,及IMCP的RT时间
通过curl来获取每一个http请求的响应状态码,DNS解析时间、TCP握手时间等等
三、Jping执行方式
我只需要通过终端执行Jping+url地址orJping+IP或者域名地址
1、参数URL地址的方式
$Jpinghttp://www.imoocc.com
PING(115.238.23.253):56databytes
64bytesfrom115.238.23.253:icmp_seq=0ttl=40time=37.347ms
64bytesfrom115.238.23.253:icmp_seq=1ttl=40time=37.749ms
64bytesfrom115.238.23.253:icmp_seq=2ttl=40time=37.788ms
---www.taobao.com.danuoyi.tbcache.compingstatistics---
3packetstransmitted,3packetsreceived,0.0%packetloss
round-tripmin/avg/max/stddev=37.347/37.628/37.788/0.199ms
%Total%Received%XferdAverageSpeedTimeTimeTimeCurrent
DloadUploadTotalSpentLeftSpeed
100258100258004440--:--:----:--:----:--:--444
状态码:302
DNS解析时间:0.523(s)
TCP握手:.029(s)
发送第一个Get请求时间:0.552(s)
接收到Server的第一个包时间:0.581(s)
从开始到server关闭连接的时间:0.581(s)
HTTP请求内容大小:258(B)
HTTP包请求的速度:444.000(B/s)
2、参数IP域名的方式
JesondeMacBook-Air:myjobjeson$Jpingwww.imoocc.com
PING(115.238.23.253):56databytes
64bytesfrom115.238.23.253:icmp_seq=0ttl=40time=38.801ms
64bytesfrom115.238.23.253:icmp_seq=1ttl=40time=37.789ms
64bytesfrom115.238.23.253:icmp_seq=2ttl=40time=37.044ms
---www.taobao.com.danuoyi.tbcache.compingstatistics---
3packetstransmitted,3packetsreceived,0.0%packetloss
round-tripmin/avg/max/stddev=37.044/37.878/38.801/0.720ms
首先我想介绍下,分享这个脚本的用处:
当客户告知我们,一个页面http://www.xxx.com有问题时,作为PE,我们第一步是会是怎么作?
我的处理经验来看,我会第一时间打开我的额浏览器,输入http://www.xxx.com,去查看页面的返回以及服务端过来的响应状态。遇到的响应可能有以下几种情况:
情况一、如果页面出现“页面无法连接”
然后我执行,pingwww.xxx.com查看是否有IP解析正常,如果有预期的ip返回,那么这个命令的另一个用处就是查看,服务端到我本地端,通过ICMP协议的延时,如果RT>300ms,或者有“
Requesttimeout”,那么我判断一定是我本地到远程服务器的网络出现了异常。
情况二、如果页面可以正常打开,但是出现了如:Badgateway或者Connecttiontimeout
那么我需要去对应分析,状态码提示的问题
情况三、如果页面能正常打开,但是数据加载十分慢
那么这个时候,我需要去分析网络延时,或者是否后端处理速度缓慢。
处理这种问题,其实在linux下我们只需要用到ping和curl两个命令就可以了。
Jping的作用,就是:通过最简单且直观的方式,快速的提供请求url中过程中的相关数据(包括ICMP延时、DNS请求速度、tcp握手时间等),帮助我们快速的定位分析问题。
接下来,我就分享下Jping的实现:
######################################################################### #FileName:Jping.sh #Programfunction: #Author:Jeson #mail:jeson@imoocc.com #CreatedTime:二10/2512:12:422016 if[$#==1];then if[["$1"=~^http.*]];then domain_name=$(echo$1|awk-F'/''{print$3}') ping-c3${domain_name} if[$?==0];then response_res=($(curl-o/dev/null-w%{http_code}''%{time_namelookup}''%{time_connect}''%{time_pretransfer}''%{time_starttransfer}''%{time_total}''%{size_download}''%{speed_download}${domain_name})) echo"状态码:"${response_res[0]} echo"DNS解析时间:"${response_res[1]}"(s)" echo"TCP握手:$(echo"${response_res[2]}-${response_res[1]}"|bc)(s)" echo"发送第一个Get请求时间:"${response_res[3]}"(s)" echo"接收到Server的第一个包时间:"${response_res[4]}"(s)" echo"从开始到server关闭连接的时间:"${response_res[5]}"(s)" echo"HTTP请求内容大小:"${response_res[6]}"(B)" echo"HTTP包请求的速度:"${response_res[7]}"(B/s)" fi else domain_name=$1 ping-c3${domain_name} fi else echo"Error:Inputaurlordomain_nameoripaddress!" exit fi
脚本注解:
通过ping命令,检察1、域名DNS的解析结果,及IMCP的RT时间
通过curl来获取每一个http请求的响应状态码,DNS解析时间、TCP握手时间等等
三、Jping执行方式
我只需要通过终端执行Jping+url地址orJping+IP或者域名地址
1、参数URL地址的方式
$Jping
PING(115.238.23.253):56databytes
64bytesfrom115.238.23.253:icmp_seq=0ttl=40time=37.347ms
64bytesfrom115.238.23.253:icmp_seq=1ttl=40time=37.749ms
64bytesfrom115.238.23.253:icmp_seq=2ttl=40time=37.788ms
---www.taobao.com.danuoyi.tbcache.compingstatistics---
3packetstransmitted,3packetsreceived,0.0%packetloss
round-tripmin/avg/max/stddev=37.347/37.628/37.788/0.199ms
%Total%Received%XferdAverageSpeedTimeTimeTimeCurrent
DloadUploadTotalSpentLeftSpeed
100258100258004440--:--:----:--:----:--:--444
状态码:302
DNS解析时间:0.523(s)
TCP握手:.029(s)
发送第一个Get请求时间:0.552(s)
接收到Server的第一个包时间:0.581(s)
从开始到server关闭连接的时间:0.581(s)
HTTP请求内容大小:258(B)
HTTP包请求的速度:444.000(B/s)
2、参数IP域名的方式
JesondeMacBook-Air:myjobjeson$Jpingwww.imoocc.com
PING(115.238.23.253):56databytes
64bytesfrom115.238.23.253:icmp_seq=0ttl=40time=38.801ms
64bytesfrom115.238.23.253:icmp_seq=1ttl=40time=37.789ms
64bytesfrom115.238.23.253:icmp_seq=2ttl=40time=37.044ms
---www.taobao.com.danuoyi.tbcache.compingstatistics---
3packetstransmitted,3packetsreceived,0.0%packetloss
round-tripmin/avg/max/stddev=37.044/37.878/38.801/0.720ms
相关文章推荐
- 在asp.net在服务端向客户端添加脚本实现自动弹出消息
- nagios自动安装脚本(一个脚本实现服务端+客户端自动安装)
- Java中利用socket实现简单的服务端与客户端的通信(基础级)
- (转载)ASP.NET 2.0客户端回调的实现分析 (二)
- linux下简单time machine实现,可选择快速备份恢复脚本
- jax-ws实现Webservice入门教程 (客户端调用服务端实现)
- (转贴)实现带有数据绑定的客户端脚本控制的二级联动菜单
- 冒泡排序、选择排序、堆排序、快速排序、插入排序算法复杂度分析与算法实现(自己总结与转)
- 利用Tcp和socket实现的客户端与服务端的简单通信
- socket编程 -- epoll模型服务端/客户端通信的实现
- 使用AjaxPro.Net框架实现在客户端调用服务端方法
- python---TCP UDP IPv4 IPv6 客户端和服务端的实现
- 基于TILE-GX实现快速数据包处理框架-netlib实现分析【转】
- 常见内部排序算法 简单数组实现与分析(快速(偶原创partition函数,望众高手指正)、归并、希尔、插入、选择、冒泡)
- android客户端和servlet服务端的简单登录实现
- Asp.Net2.0中TreeView使用javascript客户端实现选择节点联动的脚本
- Flex使用BlazerDS实现客户端与服务端通信
- C/S结构中如何实现服务端与客户端的同步,实现动态刷新
- HTTP接口的服务端和客户端的实现
- 实现自己的脚本语言ngscript之二:语法分析