本文转载自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. SpringBoot系列十一:SpringBoot整合Restful架构(使用 RestTemplate 模版实现 Rest 服务调用、Swagger 集成、动态修改日志级别)

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot整合Restful架构 2.背景 Spring 与 Restful 整合才是微架构的核心,虽然在整 ...

  2. Maven外部依赖

    正如大家所了解的那样,Maven确实使用 Maven 库的概念作依赖管理.但是,如果依赖是在远程存储库和中央存储库不提供那会怎么样? Maven 提供为使用外部依赖的概念,就是应用在这样的场景中的. ...

  3. e789. 限制用JSpinner实现数字选择的值

    // Create a number spinner that only handles values in the range [0,100] int min = 0; int max = 100; ...

  4. Android 开发规范

    一. 总包命名规范: 1. 主程序:com  . 公司简写 . 项目名称简写 如彩票主程序: com.whszzy.caipiao 2. 独立模块:com . 公司简写 . 项目名称简写 . 模块名称 ...

  5. wapp HTTP Error 404. The requested resource is not found.

    原因: 本地80端口被占用,需要修改WAMP的默认端口 修改设置: 找到 bin/apache/apache***/conf/httpd.conf文件 将文件中的80修改为8088 修改这两个地方端口 ...

  6. JS 在火狐浏览器下关闭弹窗

    1.首先,要确定火狐设置是否允许通过JS代码window.close()方法关闭标签. 确定方式如下:      在Firefox地址栏里输入 about:config    在配置列表中找到dom. ...

  7. Enigma Virtual Box:生成可执行文件。

    Enigma Virtual Box Enigma Virtual Box[1]  是软件虚拟化工具,它可以将多个文件封装到应用程序主文件,从而制作成为单执行文件的绿色软件.它支持所有类型的文件格式, ...

  8. fiddler 工具使用配置

    前言: 之前为了手动测试项目组之间提供的接口,确定到底是哪一个接口出了问题.一般情况下,我们都直接采用了 Google 浏览器上,F12 后,Network 找到想要的 URL,然后,直接在浏览器上访 ...

  9. Linux中Subversion配置实例

    一.安装 yum install subversion 二.配置 本系统采用为每个项目单独建一版本库的策略.配置文件,密码文件,访问控制文件等都放在版本库的conf目录下. 所以每次开始一个新项目都必 ...

  10. .NET 获取Get方式URL中的参数键值

    在Web开发中,我们常常会涉及到需要获取Get方式URL中的参数键值的情况,这里简单介绍三种方法: 第一种:常用的做法有使用JavaScript获取location.href后用正则表达式匹配获取此U ...