用过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. PAT——1028. 人口普查

    某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...

  2. [LuoguP1221]最多因子数

    [Luogu1221]最多因子数(Link) 求区间[L,R]内约数个数最多的数和它的约数个数. 这个题吧,乍一看确实不是很难,然后稍微一想,嗯,是个傻*题.这是唯一感受,不要问我为什么. 首先我们定 ...

  3. 通过系统进程查找sql语句

    一.通过系统进程id查找sql语句 SELECT /*+ ORDERED */ sql_text FROM v$sqltext a WHERE (a.hash_value, a.address) IN ...

  4. MySQL->处理重复数据[20180517]

    限制数据重复的方式:表上增加主键(Primary Key)或增加唯一性索引(Unique)     主键对重复资料进行限制,这样资料在导入时就无法重复插入 create table primary_t ...

  5. WebGl 画线

    效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  6. [Doctrine Migrations] 数据库迁移组件的深入解析四:集成diff方式迁移组件

    场景及优势 熟悉Symfony框架之后,深刻感受到框架集成的ORM组件Doctrine2的强大之处,其中附带的数据迁移也十分方便.Doctrine2是使用Doctrine DBAL组件把代码里面的表结 ...

  7. Linux入门进阶第五天——用户管理(帐号管理 )上

    一.帐号与群组 关于使用者帐号: 用户的ID与帐号信息所在位置是 /etc/passwd,而管理密码的数据则是在 /etc/shadow 每个登陆的使用者至少都会取得两个 ID , 一个是使用者 ID ...

  8. Linux入门第四天——shell基础

    一.shell概述 1.概述 命令行解释器(壳,也就是我们的操作界面),计算机只认识0101的二进制,我们需要通过ASCII表来进行翻译 较为官方的解释是: Shell 是一个用 C 语言编写的程序, ...

  9. 第三次随笔——虚拟机及Linux入门

    虚拟机及Linux入门 虚拟机的安装 对于虚拟机的概念我早有接触,但是从来没有真正的实践过,借这次作业机会我终于实践了虚拟机的安装,安装的过程较为顺利,但还是出现了以下问题: 无法选择64位的系统 解 ...

  10. 20155217 2016-2017-2 《Java程序设计》第3周学习总结

    20155217 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 要产生对象必须先定义类,类定义时使用class关键词,建立实例要使用new关键词. ...