利用CURL工具诊断WEB页面访问性能

一:总结

当我们发现WEB页面访问性能缓慢时,常常存在几种可能的原因

1) 网络性能慢

2) IIS服务器性能慢

3) 数据库性能慢

这三个原因常常交织在一起,导致我们无法轻易分辨出到底是谁引起了性能问题。

另外,Web页面的访问性能下降,可能是随机性的。当用户反馈性能慢时,再介入排查,可能现象已经消失了。

有没有一个办法能够像Ping一样持续的检测WEB页面的访问性能,并能够方便的区分出是网络问题?IIS问题?

答案是有的,那就是利用linux下的工具curl。利用这个工具,我们可以编写一个shell脚本,实现类似ping的功能,持续的检测某个网站的响应时间。

该工具使用方法如下:


这个命令的功能是请求https://1xx.xx.xx.71/iCloud/test/Dynamic.aspx页面100000次。

这个命令执行后,就会不断在屏幕上打印请求这个页面各阶段所耗费的时间。

从打印中可以看到各参数解释如下

参数

参数的含义

http_code

页面请求的结果,200表示成功,404表示页面未找到

time_namelookup

域名翻译的时间,因为示例中直接请求的是IP,所以域名翻译时间为0

time_connect

建立tcp连接的时间,这可以看出网络性能好坏

time_total

请求这个页面耗费的总时间= time_namelookup+ time_connect+页面下载时间

通过这个显示,我们就可以分辨出,当性能下降时,是网络导致的(time_namelookup和time_connect变长),还是页面下载的慢(前两者不变,但time_total变长)。

如果页面下载慢,怎么进一步区分是IIS服务变慢,还是数据库访问变慢了呢?

我们可以在WEB服务器上部署两个测试页面,一个测试页面是Static页面,返回一个空页面。另外一个测试页面是动态页面,需要访问数据库才能动态产生页面。

同时对这两个页面进行持续的请求。如果发现Static页面的time_total变慢,意味着IIS服务存在问题。如果Static页面的访问时间未变,但是动态页面的访问时间明显变慢,意味着数据库变慢导致页面访问变慢。

总结网站访问性能慢,可能分为如下几个原因,都可以用curl的访问结果进行判断。


二:CURL命令常用参数说明

1)抓取页面内容到一个文件中

[root@10.10.90.97 ~]# curl -ohome.html  http://www.sina.com.cn

2)忽略安全证书验证访问https网站

   [root@10.10.90.97 ~]# curl --insecure  https://www.google.com.hk

3)静默模式,不输出任何内容

[root@10.10.90.97 ~]# cur –s

4)-w 格式化输出字符串

比如这样的格式:

curl --insecure -o /dev/null -s -w"http_code:%{http_code} time_namelookup:%

{time_namelookup} time_connect:%{time_connect}time_total:%{time_total} " www.si

na.com.cn

输出后的结果是:

http_code:200 time_namelookup:0.016time_connect:0.187 time_total:0.562

    注:WINDOWS命令执行方法如下

curl -o NUL -s -w "http_code:%{http_code}time_namelookup:%{time_namelookup}

 time_connect:%{time_connect}time_total:%{time_total} "  http://www.baidu.com

 

三:Linux下Requrl.sh脚本执行说明

requrl.sh是在linux下编写的shell脚本,核心思想是循环调用CURL命令,将调用的时间耗费打印出来。

i=1

while [ $i -le $num ] 

do 

    c=`curl --insecure -o/dev/null -s -w "http_code:%{http_code} time_namelookup:%{time_namelookup}time_connect:%{time_connect} time_total:%{time_total} " $url` 

    t=`date +%T`

    echo $t": "$c

    #s=$s$c"\n"

    i=$[$i+1] 

done 

 

使用方法

1) 用root用户,将requrl.sh脚本放在预定目录下

2) 设置该脚本的可执行权限chmod 777 requrl.sh

3) 在脚本所在目录中,执行 ./requrl.sh –n 10 www.baidu.com.cn (次数和目标地址都要替换)

 

脚本见附件,需要用bin方式上传到linux机器中

#!/bin/bash  
#requesturl.sh  
   
usage="  
Usage: $0 [options...] <url>\n  
Options:\n  
-h This help text\n  
-n <num> The numbers to request\n  
"  
if [ $# -lt 1 ]  
then  
    echo -e $usage  
    exit 1  
fi  
num=10  
while getopts "n:h" arg  
do  
    case $arg in  
        n)  
            num=$OPTARG  
            if [ $num -lt 1 ]  
            then  
                num=1  
            fi  
            ;;  
        h)  
            echo -e $usage  
            exit 1  
            ;;  
        ?)  
            echo "Unknow argument"  
            exit 1  
            ;;  
        esac  
done  
   
url=$(eval echo "\$$#")  


if [ "http://" != ${url:0:7} ] && [ "https://" != ${url:0:8} ]  
then  
    echo "The url need to add the http:// or https:// prefix"  
    exit 1  
fi  
   
echo "Request url: "$url  
echo "Request number: "$num  
   
i=1
while [ $i -le $num ]  
do  
    c=`curl --insecure -o /dev/null -s -w "http_code:%{http_code} time_namelookup:%{time_namelookup} time_connect:%{time_connect} time_total:%{time_total} " $url`  
    t=`date +%T`
    echo $t": "$c
    #s=$s$c"\n"
    i=$[$i+1]  
done  
echo -e $s | \
awk '{OFS="\n"}{if($1) for(i=1;i<=NF;i++)print $i}' | \
awk -F: -v num=$num -v failnum=0 \
    '{if($1 != "http_code")result[$1]+=$2;if($1=="http_code" && $2 != 200)failnum++} \
    END{print "Request Failed: " failnum "\n------Average Value------"; \
    for(i in result) {print i ": " result[i]/num;} \
    print "-------------------------"}' 


四:Window下使用requrl脚本

下载并安装对应版本的CURL程序,下载地址是http://curl.haxx.se/download.html。将下载后解压的可执行文件,放到本地目录下,比如d:\curl

根据操作系统的不同可选择以下版本,注意选择SSL相关的版本,有的网站是带HTTS安全认证的。



并将windows下调用脚本释放到和curl可执行程序在一个目录下,比如d:\curl.

进入命令行窗口,切换当前目录到d:\curl

执行命令:requrl 10000 http://www.baidu.com.cn

注意,Winows下命令与linux环境下命令稍有不同。

执行结果如下:

Window 下批处理脚本代码如下:

::利用curl工具持续获取某个网址的响应时间  
::requesturl.bat  
@echo off 
if "%1"=="" goto usage 
if "%1"=="/?" goto usage 
if "%1"=="help" goto usage 
if "%2"=="" goto usage 


set num=%1
set url=%2
echo 尝试次数:%num%
echo 目标网址:%url%

 
 echo %url% >url.txt
 type url.txt|find  "http://" >url1.txt  
 type url.txt|find  "https://" >>url1.txt
 type url1.txt|find "http">url2 || goto format
 echo url is ok

for /l %%i in (1,1,%num%) do  curl --insecure -o NUL -s -w "http_code:%%{http_code} time_namelookup:%%{time_namelookup} time_connect:%%{time_connect} time_total:%%{time_total} " %url% && echo _ 
goto end
 
:usage
echo 参数错误,说明如下:
echo 用法: %0 检测次数 检测网址 
echo 例如: requrl 100 http://www.baidu.com.cn


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
curl是一个命令行工具,用于通过URL访问网络资源。它可以在启动时提供需要访问的互联网地址,并告诉它是否要将数据保存在终端或文件中。与使用浏览器访问网页不同,curl通常在爬虫程序或网页分析程序中使用。它可以用于定期爬取网站、获取源码并解析有用的部分,也可以用于企业内部系统的接口调用,附加GET类型的参数,并返回执行成功或失败的响应。在Linux系统中,curl是自带的,可以直接在命令行终端中使用。在Windows系统中,也可以使用curl,但需要单独安装。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [使用 curl 从命令行访问互联网 | Linux 中国](https://blog.csdn.net/weixin_33068055/article/details/111913096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [windows下的安装与使用curl实现命令行访问Web网站](https://blog.csdn.net/oscar999/article/details/101546092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值