jtest命令

jtest工具初步介绍
jtest是一个专门用于proxy/cache系统的实验室性能压力测试工具,具有极高的性能。能够同时担当后台服务器和客户端。ATS系统专用的性能压测工具。

商业的压力测试工具,一般也是一个所谓的盒子,自带客户端、服务器端,能够自己生成模拟流量、copy客户提交流量等,很像目前jtest的模式

最早的jtest被设计为可以分布式的集群上运行,用上层脚本系统起停,来压测一个ATS集群系统,早先的系统并没有考虑像现在这样的多核CPU普遍性,设计为单进程工具,我们只在后续高级用法中介绍单机如何跑多个进程等。

jtest简单说明
基本测试
jtest作为专门针对ATS的测试,已经就ATS的最简单配置下,做了很多简化的默认参数,以便于用户快速的上手,我们以最简单的本机jtest压测本机的默认配置ATS为例子,介绍最基本的jtest用法:

设置ATS的remap规则:

在默认的空remap.config中添加一条规则

map http://localhost:9080/ http://127.0.0.1:9080/

运行jtest:

jtest

这个命令默认的参数,即相当于 “jtest -s 9080 -S localhost -p 8080 -P localhost -c 100 -z 0.4″,将会起100个连接使用127.0.0.1的9080端口作为jtest源服务器(jtest监听),对本机(localhost)的8080端口上跑的ATS进行测试,并控制整体命中率在40%。

输出结果:

con new ops 1byte lat bytes/per svrs new ops total time err
100 468 2329.6 39 39 36323315/363233 617 617 617 46131904 136980.9 0
100 471 2361.5 39 40 35993941/359939 619 619 619 45466393 136981.9 0
100 465 2327.0 40 41 35385495/353854 607 607 607 45095273 136982.9 0
其中:

con: 并发连接数。并发连接数,单进程单cpu处理能力取决于CPU与测试场景,请酌情设置,推荐小于9999
new: 每秒新建连接数。这个参数取决于并发连接数量与长连接效率。
ops: 每秒请求数。也作qps,是比较体现服务器性能的关键指标。
1byte:首字节平均响应时间。这个是体现整体转发效率的关键指标。
lat: 完成请求整体响应时间(收到最后一个字节)。cache系统性能关键指标。
bytes/per:每秒字节流量/每秒每连接流量
svrs:服务器端请求数
new:服务器端新建连接数
ops:服务器端每秒请求数
total:服务器端总请求的字节数
time:测试时间(秒)
err:出错数量(连接数)。稳定性测试中,这个数据可以作为一个关键指标。
jtest命令详解
jtest有非常多的参数,这些参数的组合又会产生很多特殊的效果,我们将从完整的使用说明开始,详细说明jtest测试的命令参数:

localhost:tools zym$ ./jtest/jtest -h
JTest Version 1.94 – Dec 9 2013 17:11:24 (zym@zymMBPr.local)
Usage: /Users/zym/git/traffic.git/tools/jtest/.libs/jtest [–SWITCH [ARG]]
参数格式:
参数格式是 短参数_长参数_类型_默认值_参数说明,多数参数能做到自我说明并且比较详细,更多说明参见下面的说明以及后续高级用法示例。

switch__________________type__default___description
测试机器IP与端口设置:
这几个设置是最最常用的几个参数

-p, –proxy_port int 8080 Proxy Port
-P, –proxy_host str localhost Proxy Host
-s, –server_port int 0 Server Port (0:auto select)
-S, –server_host str (null) Server Host (null:localhost)
-p -P是用来指定要测试的ATS服务器地址、端口信息
-s -S是用来指定要测试的ATS服务器,用来作为源的jtest监听域名(IP)和端口信息。
服务器压力控制:
服务器的压力仿真,主要是主动生成的随机流量控制

-r, –server_speed int 0 Server Bytes Per Second (0:unlimit)
-w, –server_delay int 0 Server Initial Delay (msec)
-c, –clients int 100 Clients
-R, –client_speed int 0 Client Bytes Per Second (0:unlimit)
-b, –sbuffersize int 4096 Server Buffer Size
-B, –cbuffersize int 2048 Client Buffer Size
-a, –average_over int 5 Seconds to Average Over
-z, –hitrate dbl 0.400 Hit Rate
-Z, –hotset int 1000 Hotset Size
-i, –interval int 1 Reporting Interval (seconds)
-k, –keepalive int 4 Keep-Alive Length
-K, –keepalive_cons int 4 # Keep-Alive Connections (0:unlimit)
-L, –docsize int -1 Document Size (-1:varied)
-j, –skeepalive int 4 Server Keep-Alive (0:unlimit)
-r -w -R,控制客户端、服务器端的速度,多数压测的情况下,不会做特殊限制,在需要仿真大并发、大延迟等情况下,可以做控制。
-b -B,模拟客户端和服务器端的buffer大小设置,buffer的大小可以极大的影响IO的能力,也会影响内存的占用。
-z -Z,这是用来控制命中率和热点数据。命中率是由热点数据的命中,加miss的请求。热点数据的多少,也会影响服务器的内存使用。
-k -K -j,控制客户端和服务器的长连接。
-i,用来控制jtest结果统计汇报间隔时间。
-L,用来控制jtest生成的随机url的返回body大小,默认-1表示完全随机,没有限制。
控制输入输出的配置:
-x, –show_urls on false Show URLs before they are accessed
-X, –show_headers on false Show Headers
-f, –ftp on false FTP Requests
– , –ftp_mdtm_err_rate dbl 0.000 FTP MDTM 550 Error Rate
– , –ftp_mdtm_rate int 0 FTP MDTM Update Rate (sec, 0:never)
-x -X,用来debug,显示url以及所有header头,是个排查利器。
ftp相关的是用来压测ftp的,不过ATS对ftp的支持已经删除啦。
测试的流程处理:
jtest测试,是可以进行复杂的处理,比如对一个网站进行深度抓取测试,对反向、正向、透明模式测试

-l, –fullpage on false Full Page (Images)
-F, –follow on false Follow Links
-J, –same_host on false Only follow URLs on same host
-t, –test_time int 0 run for N seconds (0:unlimited)
-u, –urls str (null) URLs from File
-U, –urlsdump str (null) URLs to File
-H, –hostrequest int 0 Host Request(1=yes,2=transparent)
-C, –check_content on false Check returned content
– , –nocheck_length on false Don’t check returned length
-m, –obey_redirects off true Obey Redirects
-M, –embed URL off true Embed URL in synth docs
-l -F -J,用来对html文件进行解析,并提前其中的所有图片元素等进行深度抓取的控制。
-t,控制测试运行时间,默认一直跑
-u -U,给jtest指定url,纪录jtest跑的url(如过存在解析html的方式,则纪录的可能会多于指定的)
-H,控制服务器测试模式,是否带host头,决定了服务器是跑在反向代理、正向代理、透明代理模式
-C –nocheck_length,是否检查返回的内容、长度
-m,是否跳转
-M,控制是否把uri放到返回结果的Body开头,这个一般用来做数据校验使用
请求的分散度与热点:
hash是jtest、ats里无处不在的,如何让hash互相影响,甚至测试hash碰撞等情况??

-q, –url_hash_entries int 1000000 URL Hash Table Size (-1:use file size)
-Q, –url_hash_filename str (null) URL Hash Table Filename
-q -Q,hash控制

服务器的控制:
服务器的使用类型控制,可以让jtest跑在不同的模式下

-y, –only_clients on false Only Clients
-Y, –only_server on false Only Server
-A, –bandwidth_test int 0 Bandwidth Test
-T, –drop_after_CL on false Drop after Content-Length
-y -Y,可以将jtest单独跑为服务器和客户端分离的服务。
-A,-T,可以做更快的流量压测工具。
其他控制信息机制:
-V, –version on false Version
-v, –verbose on false Verbose Flag
-E, –verbose_errors off true Verbose Errors Flag
-v -E,可以用于debug错误等
请求的随机机制:
本类参数,主要控制服务器和请求的随机程度、复杂度,构建一个复杂的测试用例,将会对服务器的稳定性测试起到很好的效果。

-D, –drand int 0 Random Number Seed
-I, –ims_rate dbl 0.500 IMS Not-Changed Rate
-g, –client_abort_rate dbl 0.000 Client Abort Rate
-G, –server_abort_rate dbl 0.000 Server Abort Rate
-n, –extra_headers int 0 Number of Extra Headers
-N, –alternates int 0 Number of Alternates
-e, –client_rate int 0 Clients Per Sec
-o, –abort_retry_speed int 0 Abort/Retry Speed
– , –abort_retry_bytes int 0 Abort/Retry Threshhold (bytes)
– , –abort_retry_secs int 5 Abort/Retry Threshhold (secs)
-W, –reload_rate dbl 0.000 Reload Rate
-D,用于生成url的随机数,如果有多个jtest并发运行,可以对这个随机的seed进行区分以控制cache的多小等
-I,请求的内容中,带的IMS比例
-g -G,客户端和服务器的Abort比例
-n -N,控制客户端发送的header数量,服务器的内容的副本数量
-e,每秒的客户端数量
-o –abort_retry_bytes –abort_retry_secs,控制重试的速度
-W 控制内容的重复度??
服务的仿真程度:
-O, –compd_port int 0 Compd port
-1, –compd_suite on false Compd Suite
-2, –vary_user_agent int 0 Vary on User-Agent (use w/ alternates)
-3, –content_type int 0 Server Content-Type (1 html, 2 jpeg)
-4, –request_extension int 0 Request Extn (1″.html” 2″.jpeg” 3″/”)
-5, –no_cache int 0 Send Server no-cache
-7, –zipf_bucket int 1 Bucket size (of 1M buckets) for Zipf
-8, –zipf dbl 0.000 Use a Zipf distribution with this alpha (say 1.2)
-9, –evo_rate dbl 0.000 Evolving Hotset Rate (evolutions/hour)
-0 -1,compress服务
-2,控制是否对不同的UA启用多副本
-3,服务器返回的内容的类型
-4,请求的内容类型
-5,是否发送给服务器no-cache控制
-7 -8,zipf服务
-9,热点的偏移调整
其他信息:
-d, –debug on false Debug Flag
-h, –help Help

详细参考

https://github.com/apache/trafficserver/blob/master/tools/jtest/README.zh.md

https://github.com/apache/trafficserver/tree/master/tools/jtest

 

人已赞赏
性能监测与优化

tsar命令

2018-4-16 20:35:45

性能监测与优化

inotifywait命令

2018-4-25 19:50:46

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索