Loadrunner性能监测nginx实践

最近的测试项目中有涉及到nginx,第一次接触。接下来想实践一下nginx设置不同参数配置对应用的性能影响。所以需要对nginx进行性能监测

nginx性能监测比较直接和方便的方法就是启用http_stub_status_module模块,在浏览器访问查看实时性能指标,有点类似于tomcat管理页面状态查看。缺点就是这个过程只能实时查看不能记录,不利于综合分析。当然也有用zabbix监控nginx,只是既要写shell脚本又要在服务器各种配置,感觉略有麻烦,可移植性也不是很强。想到昨天用LoadRunner写的监控tomcat的脚本,灵机一动,既然如此,先启用http_stub_status_module,之后应该也能用LoadRunner脚本去监控这些参数吧。心动不如行动,走起~

Loadrunner性能监测nginx实践

一、启用http_stub_status_module模块

0、这个模块在nginx安装时是默认不会编译进去的,当然也可以确认下是否已启用,如果本来就已启用,那就不需要接下来这些步骤了。(可以用下面步骤 6 进行确认)

1、进入nginx源码目录,重新配置编译参数

./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module

Loadrunner性能监测nginx实践

2、重新编译安装

make && make install

Loadrunner性能监测nginx实践

3、重启nginx

pkill -9 nginx

/usr/local/nginx/sbin/nginx

4、为了便于在网页上查看统计信息,在配置文件 nginx.conf 中加入

location /status {

      stub_status on;

      access_log off;

      allow 10.60.44.1;#允许哪个ip可以访问,如我的IP:10.60.44.1

}

该配置文件#为注释符

5、重新加载nginx

/usr/local/nginx/sbin/nginx -s reload

6、查看页面

http://ip/status 

Loadrunner性能监测nginx实践

提示:ip为当前nginx环境的IP地址,如果不是使用80端口,还应加上端口号 如,http://ip:port/status

7、参数说明

  • Active connections  nginx正处理的活动链接数个数;重要
  • server              nginx启动到现在共处理了多少个连接。
  • accepts             nginx启动到现在共成功创建几次握手。 
  • handled requests    nginx总共处理了几次请求。
  • Reading             nginx读取到客户端的 Header 信息数。
  • Writing             nginx返回给客户端的 Header 信息数。
  • Waiting             nginx已经处理完正在等候下一次请求指令的驻留链接,开启。

Keep-alive的情况下Waiting这个值等于 active-(reading + writing)

请求丢失数=(握手数-连接数) 可以看出,本次状态显示没有丢失请求。

8、为了使nginx能够响应足够多的请求,要保证系统可同时打开文件数量足够多

ulimit -n 20480

二、LoadRunner监控Ngnix脚本编写

1、脚本大致内容和思路跟监控Tomcat那个脚本差不多,点击下方连接查看

《loadrunner监控tomcat9实践》

2、与监控tomcat脚本的差别

①nginx.conf 中已经配置了可访问的IP,所以在此IP下可以直接访问,不需要使用用户名和密码,注释掉web_set_user()内容即可;

lr_think_time(3); 的作用,这个是采集时间间隔,一定要加,长久自定。且考虑到这个监控脚本的间隔时间,所以不宜和业务场景脚本放一起,建议单独设置脚本可在控制台同时运行,或者在不同客户端同时段运行;

③accepts参数值的获取,由于这个参数的参数值前后都是变量值,左右边界不好界定,因此需要借助web_reg_save_param函数中"Ord=X"的属性,这里可以看出,如果(参数名和值)左右边界值都是空格的话,我们需要的参数值在符合条件的第8个位置。(注意,这个位置一定要按实际情况确认)

Loadrunner性能监测nginx实践

小贴士:ORD 说明第几次出现的左边界子串的匹配项才是需要的内容。关联函数中当不写ORD时,默认只取第一个(ORD=1)。如果有一个关联参数accepts,当ORD=ALL时,参数accepts变成了数组,如果想取第8项,应该用accepts_8,而不是accepts,否则关联会报错。也就是说如果想取第8项,有种方式,一种是ORD=8,另一种是 ORD=ALL,accepts_8 

三、场景运行验证

1、在业务场景运行的同时设置一个用户的场景运行这个脚本。

2、生成这个脚本的场景分析文件。

3、添加图形查看:

(Average)

Loadrunner性能监测nginx实践

(Sum)

Loadrunner性能监测nginx实践

4、结合业务场景性能效果和ngnix参数配置、ngnix监控结果分析参数配置对应用性能的影响。



留言