Jmeter资源监控工具ServerAgent运行原理的一些研究
用过Jmeter的应该都了解,有个ServerAgent工具,放在linux或者windows服务器上开启服务后,在Jmeter中配置下监视器,就可以抓取到服务器的一些资源信息,抓取的主要是cpu、内存、磁盘、网络等大项,基本够用,肯定是比不上其他的一些资源监控工具详细,但是配置方便啊,拷贝,开启服务就能用,具体的配置过程就不说了,比较好奇实现原理,就研究了下。
分析过程
jmeter运行端就称为客户端吧,ServerAgent所在的机器称为服务端。服务器运行ServerAgent服务后,监听的默认端口是4444。
客户端要拿到服务端的资源数据,肯定是有数据交互的,只不过交互不一定是http协议的,用fiddler可能抓不到通讯过程(实测,确实抓不到)。
那就用万能抓包工具吧,从客户端网卡抓,神器wireshark。
首先搭建好了环境,配置了jmeter测试请求及资源监听,运行并用wireshark抓包,服务器那边是这样的:

从ServerAgent的日志来着,应该是开启监听后,建立tcp连接—>接收test指令测试—>接收cpu、内存等客户端预先配置的监控指标收集命令—>关闭连接,大致是这么个步骤。
那就看看wireshark吧。wireshark是抓整个网卡的,所以一些无效信息会比较多,通过两端的ip过滤,果然找到了4444端口相关的交互信息。
首先,确定通讯协议是tcp。然后就是tcp的三次握手,以及发送test指令,发送资源收集指令,一清二楚。

第一次是客户端发往服务端的,no.57,标识为SYN,表示客户端想要发起连接,带了一个客户端SEQ=0(SEQ随机生成);
第二次是服务端响应客户端,no.58,标识为ACK,表示服务端的响应,并返回ACK=客户端SEQ+1(本次返回ACK=1),同时带上服务端SEQ=0;
第三次为客户端的确认,no.59,检查ACK是否等于客户端SEQ+1,如果正确,则发送ACK=服务端SEQ+1(本次ACK=1);服务端收到后,三次握手完成,连接成功;
第四次为发送请求数据,no.60,标识为PSH,表示有请求数据,可以看到确实带了个test指令,只不过是16进制的;
第五次为服务端对test指令的响应,no.61,返回了个Yep;
第六次就是真正的请求资源了,no.62,发了所有配置的资源选项,只不过仍然是16进制的;

至此,工作过程已经很明确了,tcp会一直保持连接,直至主动断开为止,客户端会源源不断接收到服务端的资源数据。
测试
那我们就发tcp测试下吧,把wireshark抓到的16进制拿过来,或者自己把那段资源指标转为16进制,可能有结束符或者空格,转出来不一定对,还是直接照16进制那个抄吧。
把AgentServer重启一下,然后用jmeter创建tcp请求,照着wireshark抄那个请求的16进制Data。

然后运行测试,发现请求会一直执行,直到手动结束测试。看看服务端和得到的响应数据吧。

看这控制台输出,应该是没问题。然后看下jmeter请求的返回值。

返回了不少,不过也是16进制的,当然执行的时间越长,返回的数据量越多。
把16进制解出来看下,嗯没错,就是这些了,按照顺序对到相应的指标上就行了。

这么看,完全可以用ServerAgent做个简单的资源监控系统啊,代码里发请求,解析返回的响应,然后呈现在图像上,易配置,跨操作系统,基本不占资源,想开就开,岂不是美滋滋。
Jmeter资源监控工具ServerAgent运行原理的一些研究的更多相关文章
- Jmeter结构体系及运行原理
Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结 ...
- JMeter 之Synchronizing Timer运行原理
JMeter测试并发场景,是通过设置Synchronizing Timer(同步定时器),熟悉LoadRunner性能测试的话,就知道里面有个概念:集合点. Synchronizing Timer则可 ...
- Jmeter组成结构及运行原理
Jmeter结构主要组成要素包括:测试计划,线程组,采样器以及监听器.对于各部件的作用域关系如下图: Jmeter是纯Java程序,使用JVM,运行采用多线程完成,往往单台负载机由于机器配置有限,支持 ...
- 性能测试四十七:jmeter性能监控工具ServerAgent
在liunx压力机进行压测的时候,可以在widows下开一个jmeter,只进行监控用,不产生压力,监控效果和dstat差不多 jmeter安装客户端插件 把工具放到服务端任意目录并解压,我这里放到了 ...
- Jmeter运行原理
Jmeter运行原理: JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载 ...
- jmeter的运行原理和测试计划要素
jmeter运行原理 1.jmeter运行在JVM虚拟机上,jmeter是以线程的方式运行的. 2.jmeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上够可以运行多 ...
- JMeter实战(二) 运行原理
运行原理 如果不用工具,要做 100 并发的压力测试,得想办法组织 100 个人,每个人操作1台电脑,一声令下,100 个人同时点击,对系统造成 100 并发.现实中,很难找 100 个人和 100 ...
- ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行
ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...
- 场景9 深入RAC运行原理
场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新 —> Data Guard —> RAC(Real Ap ...
随机推荐
- PHP面试系列 之Linux(四)---- Shell脚本
一.脚本执行方式 1.先赋予权限 chmod +x test.sh; 再直接执行 ./test.sh 2.调用解释器使得脚本执行 3.使用source命令 source test.sh 二.编写基础 ...
- 安卓混合开发——原生Java和H5交互,保证你一看就懂!
** 在Android开发中,越来越多的商业项目使用了Android原生控件与WebView进行混合开发,当然不仅仅就是显示一个WebView那么简单,有时候还需要本地Java代码与HTML中的Jav ...
- 基于maven的JavaWeb项目构建部署
需要准备的安装文件: 1 JDk http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html jdk-8 ...
- vlc源码分析(三) 调用live555接收RTSP数据
首先了解RTSP/RTP/RTCP相关概念,尤其是了解RTP协议:RTP与RTCP协议介绍(转载). vlc使用模块加载机制调用live555,调用live555的文件是live555.cpp. 一. ...
- Xcode引入了第三方的类库之后真机调试提示莫名其妙的错误
其中的解决方法就是修改Build Setting里面的Build Active Architecture Only(仅仅编译动态代码),将这个里面的值修改为YES即可.
- C++的前置++、后置++和前置--、后置--
一.C++的前置++和后置++ 在C++中,运算符重载是你必须要掌握的重点,而前置++和后置++有什么区别呢?其实前置++和后置++是有关于 影响效率的问题,前置++比后置++的效率要高,原因是因为前 ...
- 什么是ajax和json,说说他们的优缺点
ajax异步传输的js和xml.实现页面无刷新状态更新页面和异步提交 所谓异步,简单解释就是:向服务器发送请求的时候,我们不必等待结果,而是同时做其他的事情,等到有了结果后它自己会根据设定进行后续操作 ...
- koa中静态文件资源中间件实现
项目实践过程中,会使用非常多的静态资源,怎样可以直接在浏览器中访问到这些静态资源 const fs = require('fs'); const path = require('path'); mod ...
- phporjquery生成二维码
一.php生成二维码 下载文章末尾链接中phpcode文件 include "./phpqrcode/qrlib.php"; //QRcode::png('http://www.b ...
- DELPHI一个对付内存汇漏的办法和技巧
DELPHI是要手动释放内存的,如果客户端程序有泄漏,可能不是很大问题, 但是如果你是用DELPHI做服务端程序,有泄漏的话,时间一长会占用很多内存,直到服务端程序要关闭重启.所以内存泄漏还是有害的. ...