用过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运行原理的一些研究的更多相关文章

  1. Jmeter结构体系及运行原理

    Jmeter结构体系 把Jmeter的结构体系拆分为三维空间,如图: X1~X5:是负载模拟的一个过程,使用这些组件来完成负载的模拟: X1:选择协议,模拟用户请求,检查服务器响应是否正确,然后收集结 ...

  2. JMeter 之Synchronizing Timer运行原理

    JMeter测试并发场景,是通过设置Synchronizing Timer(同步定时器),熟悉LoadRunner性能测试的话,就知道里面有个概念:集合点. Synchronizing Timer则可 ...

  3. Jmeter组成结构及运行原理

    Jmeter结构主要组成要素包括:测试计划,线程组,采样器以及监听器.对于各部件的作用域关系如下图: Jmeter是纯Java程序,使用JVM,运行采用多线程完成,往往单台负载机由于机器配置有限,支持 ...

  4. 性能测试四十七:jmeter性能监控工具ServerAgent

    在liunx压力机进行压测的时候,可以在widows下开一个jmeter,只进行监控用,不产生压力,监控效果和dstat差不多 jmeter安装客户端插件 把工具放到服务端任意目录并解压,我这里放到了 ...

  5. Jmeter运行原理

    Jmeter运行原理: JMETER是运行在JVM虚拟机上的,每个进程的开销比loadrunner的进程开销大,如果以进程的方式来运行每台负载机上的进程数量不会允许太多,当有大量并发时就需要大量的负载 ...

  6. jmeter的运行原理和测试计划要素

    jmeter运行原理 1.jmeter运行在JVM虚拟机上,jmeter是以线程的方式运行的. 2.jmeter通过线程组来驱动多个线程,运行测试脚本对被测试服务器发起负载,每一个负载机上够可以运行多 ...

  7. JMeter实战(二) 运行原理

    运行原理 如果不用工具,要做 100 并发的压力测试,得想办法组织 100 个人,每个人操作1台电脑,一声令下,100 个人同时点击,对系统造成 100 并发.现实中,很难找 100 个人和 100 ...

  8. ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行

    ASP.NET Core 运行原理剖析1:初始化WebApp模版并运行 核心框架 ASP.NET Core APP 创建与运行 总结 之前两篇文章简析.NET Core 以及与 .NET Framew ...

  9. 场景9 深入RAC运行原理

    场景9 深入RAC运行原理 OPS(Oracle Parallel Server)通过磁盘的节点判定数据是否最新   —>   Data Guard   —>    RAC(Real Ap ...

随机推荐

  1. ThinkPHP5入门(一)----框架篇

    一.命名规范: 下划线法: 函数的命名 配置参数 常量(大写) 数据表和字段 驼峰法: 属性的命名 方法的命名 帕斯卡法: 类名 类文件名 类的命名

  2. 新闻cms管理系统 (补)-----路由优化一

    修改后台的入口文件,将访问后台页面的入口文件设为admin.php,并且访问该文件的模块默认为admin模块. 添加后台入口文件具体操作步骤: (1)项目目录下新建admin.php (2)实现入口文 ...

  3. datatable的excel导入,其中有关于datatables的很多参数设置

    datatable的excel导入,其中有关于datatables的很多参数设置 http://www.cnblogs.com/liyuhuan/p/5633095.html

  4. 在 S5PV210 的 开发板上 点亮 一个 LED 灯

    参考学习教程:周立功嵌入式Linux开发教程-(上册) 材料:首先 准备一个 安装好 Linux 的 开发板 使用  xshell 工具 连接 开发板  ,winscp 工具 连接 开发板  ,  准 ...

  5. nginx编译问题:make[1]: *** [/usr/local/pcre//Makefile] Error 127

    解决方法: 是由于nginx高版本的需要使用pcre原文件路径. 解压pcre-7.9.tar.gz 例如解压后位置在 /home/wang/pcre-7.9位置 使用nginx配置的时候 ./con ...

  6. MongoDB常用指令

    db 查看当前操作的数据库 show dbs 显示所有数据库 show collections 显示当前数据库下的所有集合 use database_name 连接到一个名叫[database_nam ...

  7. 偏前端-HTML5 sessionStorage-会话存储

    sessionStorage 是HTML5新增的一个会话存储对象,用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据.本篇主要介绍 sessionStorage(会话存储) ...

  8. gulp之几个常用插件介绍

    今天给大家分享一篇gulp几款插件的使用 以下代码用到得模块加载‘ const gulp=require("gulp"); const gulpSass=require(" ...

  9. Rabbitmq(二)

    1.安装 Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装RabbitMQ之前要先安装Erlang. erlang:http://www.erlang.org/download. ...

  10. celery知多少

    Celery 1.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组成 ...