本文转载自https://www.imooc.com/article/14107

首先我想介绍下,分享这个脚本的用处:

当客户告知我们,一个页面http://www.xxx.com 有问题时,作为PE,我们第一步是会是怎么作?

我的处理经验来看,我会第一时间打开我的额浏览器,输入http://www.xxx.com,去查看页面的返回以及服务端过来的响应状态。遇到的响应可能有以下几种情况:

情况一、如果页面出现“页面无法连接”

然后我执行,ping www.xxx.com 查看是否有IP解析正常,如果有预期的 ip返回,那么这个命令的另一个用处就是查看,服务端到我本地端,通过ICMP协议的延时,如果RT>300ms,或者有“

Request timeout”,那么我判断一定是我本地到远程服务器的网络出现了异常。

情况二、如果页面可以正常打开,但是出现了如:Bad gateway 或者 Connecttion timeout

那么我需要去对应分析,状态码提示的问题

情况三、如果页面能正常打开,但是数据加载十分慢

那么这个时候,我需要去分析网络延时,或者是否后端处理速度缓慢。

处理这种问题,其实在 linux下我们只需要用到ping和curl两个命令就可以了。

Jping的作用,就是:通过最简单且直观的方式,快速的提供请求url中过程中的相关数据(包括ICMP延时、DNS请求速度、tcp握手时间等),帮助我们快速的定位分析问题。

接下来,我就分享下Jping的实现:

#########################################################################

# File Name: Jping.sh

# Program function:

# Author:Jeson

# mail:jeson@imoocc.com

# Created Time: 二 10/25 12:12:42 2016

if [ $# == 1 ];then

    if [[ "$1" =~ ^http.* ]];then

        domain_name=$(echo $1|awk -F'/' '{print $3}')

        ping -c 3 ${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 -c 3 ${domain_name}

    fi

else

    echo "Error:Input a url or domain_name or ip address!"

    exit

fi
 

脚本注解:

通过ping命令,检察1、域名DNS的解析结果,及IMCP的RT时间
通过curl来获取每一个http请求的响应状态码,DNS解析时间、TCP握手时间等等

三、Jping执行方式

我只需要通过终端执行Jping + url地址 or Jping + IP或者域名地址

1、参数URL地址的方式

$ Jping http://www.imoocc.com

PING (115.238.23.253): 56 data bytes

64 bytes from 115.238.23.253: icmp_seq=0 ttl=40 time=37.347 ms

64 bytes from 115.238.23.253: icmp_seq=1 ttl=40 time=37.749 ms

64 bytes from 115.238.23.253: icmp_seq=2 ttl=40 time=37.788 ms

--- www.taobao.com.danuoyi.tbcache.com ping statistics ---

3 packets transmitted, 3 packets received, 0.0% packet loss

round-trip min/avg/max/stddev = 37.347/37.628/37.788/0.199 ms

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 258 100 258 0 0 444 0 --:--:-- --:--:-- --:--:-- 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:myjob jeson$ Jping www.imoocc.com

PING (115.238.23.253): 56 data bytes

64 bytes from 115.238.23.253: icmp_seq=0 ttl=40 time=38.801 ms

64 bytes from 115.238.23.253: icmp_seq=1 ttl=40 time=37.789 ms

64 bytes from 115.238.23.253: icmp_seq=2 ttl=40 time=37.044 ms

--- www.taobao.com.danuoyi.tbcache.com ping statistics ---

3 packets transmitted, 3 packets received, 0.0% packet loss

round-trip min/avg/max/stddev = 37.044/37.878/38.801/0.720 ms

《转载》脚本实现从客户端服务端HTTP请求快速分析的更多相关文章

  1. Query通过Ajax向PHP服务端发送请求并返回JSON数据

    Query通过Ajax向PHP服务端发送请求并返回JSON数据 服务端PHP读取MYSQL数据,并转换成JSON数据,传递给前端Javascript,并操作JSON数据.本文将通过实例演示了jQuer ...

  2. MVC验证10-到底用哪种方式实现客户端服务端双重异步验证

    原文:MVC验证10-到底用哪种方式实现客户端服务端双重异步验证 本篇将通过一个案例来体验使用MVC的Ajax.BeginForm或jQuery来实现异步提交,并在客户端和服务端双双获得验证.希望能梳 ...

  3. Oauth2.0客户端服务端示例

    https://blog.csdn.net/qq_28165595/article/details/80459185 前言前面的理解OAuth2.0认证与客户端授权码模式详解,我们大致了解了Oauth ...

  4. Eureka源码探索(一)-客户端服务端的启动和负载均衡

    1. Eureka源码探索(一)-客户端服务端的启动和负载均衡 1.1. 服务端 1.1.1. 找起始点 目前唯一知道的,就是启动Eureka服务需要添加注解@EnableEurekaServer,但 ...

  5. 『言善信』Fiddler工具 — 16、使用Fiddler抓取移动端App请求

    目录 1.抓取Android移动端App请求 2.抓取IOS移动端App请求 3.总结: 1.抓取Android移动端App请求 前提: 因为Fiddler抓包的原理就是通过代理,所以确保被测终端要和 ...

  6. HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端

    协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...

  7. Redis设计与实现-客户端服务端与事件

    事件 redis服务器是事件驱动的,事件分为文件事件与时间事件 文件事件是服务器通过套接字与客户端连接,两者之间的通信会产生相应的文件事件,服务器监听并处理这些事件完成网络操作: 时间事件是指redi ...

  8. 软件测试_Loadrunner_性能测试_脚本录制_录制多server请求脚本

    之前我们写过使用Loadrunner录制APP脚本的基本流程:软件测试_Loadrunner_APP测试_性能测试_脚本录制_基本操作流程,但是只能用于请求单一服务器端口适用 这次主要是写的多serv ...

  9. fastHttp服务端处理请求的过程

    Github 地址 https://github.com/valyala/fasthttp fastHttp 服务端的处理请求的过程 工作过程 主要代码 设置监听地址 server.go func ( ...

随机推荐

  1. Redis与Memcached的实现对比

    原文链接:http://www.tuicool.com/articles/qUBNZva Memcached 与 Redis ,作为近些年最常用的缓存服务器,相信大家对它们再熟悉不过了.前两年还在学校 ...

  2. Spring集成线程池

    自己在程序中手动New很容易造成线程滥用,创建线程也是比较消耗资源的操作,所以建议如果有此需求,将线程池统一交给Spring框架进行管理. 如下: <!--Spring 集成线程池,不允许自己开 ...

  3. quake3中求1/sqrt(x)的算法源代码

    quake3中求1/sqrt(x)的算法源代码如下(未作任何修改): float Q_rsqrt( float number ) { long i; float x2, y; const float ...

  4. Java多线程——Lock&Condition

    Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. package ...

  5. 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 

    8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 什么是shell? shell是一个命令解释器,提供用户和及其之间的交互 致辞特定语法,比如逻 ...

  6. XCode 5资源文件不自动更新问题

    在xcode 5中的build settings ->build options ->Scan all source files and Includes设置为YES即可!

  7. UNIX环境编程学习笔记(12)——文件I/O之目录操作

    lienhua342014-09-18 1 引言 在 UNIX 系统中,目录是一种特殊的文件类型.我们可以使用 open 函数来打开目录,获取文件描述符,然后调用 stat 函数来获取目录的属性信息, ...

  8. 【NLP】simhash判断文档相似度

    http://blog.csdn.net/heiyeshuwu/article/details/44117473

  9. 复制js的“准”正确用法

    function kobe(id)      {           var targetText = document.getElementById(id);          try        ...

  10. MLE、MAP、贝叶斯三种估计框架

    三个不同的估计框架. MLE最大似然估计:根据训练数据,选取最优模型,预测.观测值D,training data:先验为P(θ). MAP最大后验估计:后验概率. Bayesian贝叶斯估计:综合模型 ...