yandyand

导航

Linux使用jmeter对数据库进行压测

 

编写原因:

 

最早接触中石油的jmeterlinux一直没有时间整理,现在正好借着邮政的项目进行了深度的研究,最终将整体的压测流程的最”完美”文档编写出来 ,手把手的部署jemterlinux压测~~

 

 

 

开始执行压测步骤

 

jmeter的文件放到你的linux系统中(我这里就是用centols7系统了)

 

 

 

检查java版本

 

Why?

 

jmeter是基于java来进行开发的所以我们再使用jmeter压测时一定要确认是否有java环境

 

[root@localhost bin]# java -version

 

 

 

授予jmeter执行权限

 

windows中我们直接点看jmeter.bat程序就可以运行了,单如果想要在linux中运行就必须给咱们的文件运行权限才行

 

[root@localhost bin]# chmod +x jmeter-server

 

[root@localhost bin]# chmod +x jmeter

 

 

 

 

 

文件含义

 

Jmeter:执行jmeter压测的程序

 

Jmeter-server:jmeter的多并发压测服务器启动脚本

 

这里要引出一个jmeter的特性:

 

jmeter分布式测试:

 

jmeter提供了一个分布式压测的压测方案:

 

使用Master-Slave模式,用master机控制多台slave负载机,向被测服务器发送请求,从而能够支持几千几万的较大并发。

 

master机负责测试脚本的分发、启动、停止、从slave收集测试结果等工作。

 

如图:

 

 

 

 

 

 

 

(当然本次的压测因为我只有开了一台机器,分布式压测我就不做了...

 

 

 

配置我们jmeter使用的内存

 

Why??

 

我这里使用的虚拟机配置(贴出来:)

 

 

 

 

 

3g的内存貌似看起来也够,但往往jmeter默认压测时需要使用6-8g的内存(这么多的内存上哪弄??)没事我们可以调整jmeter的文件来让它默认使用的内存小一点:

 

打开jmeter文件:

 

 

 

查找:”/heap”

 

 

 

 

 

修改内存:

 

 

 

单位:m: g:GB

 

我这里已经修改完了,实际的内存根据自己的机器的内存来决定.

 

"${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"

 

 

 

 

 

解释一下这里的意思:

 

-Xms1g -Xmx1g:设置jvm堆内存大小阀值:初始值 512m  最大值1024m  一般把2个值设置一样大 保证jvm不会频繁gc

 

 

 

创建jmeter的测试计划

 

因为在linux中的jmeter没有图形化因此测试计划创建起来得需要使用windows端来进行配合(说白了就是使用windows创建测试计划然后把测试计划放到linux端去执行.)【当然如果你是大佬你可以自己编写,

 

:打开我们的windows端的jmeter

 

 

 

 

 

一些必要的信息要填写好,我这里为了方便就直接拿弄好的测试计划了,如果不会配置去看我的windows配置说明,哪里啥都有哈哈哈

 

但这里注意一点:

 

驱动包的路径这个一定要注意修改,当然如果不修改也没关系,后面我会在linux中进行简单的测试计划修改.

 

 

 

 

 

ok,当测试计划编写完毕后就可以把测试计划拿出来了

 

关闭jmeter----拿出测试计划!

 

 

 

创建两个目录存放一会我们的测试计划:

 

[root@localhost bin]# mkdir report

 

[root@localhost bin]# mkdir script

 

 

 

文件放进去之后就开始我们的第六步

 

 

 

放入数据库的驱动

 

要压测数据库就需要驱动进行连接,所以放入数据库的驱动

 

[root@localhost lib]# pwd

 

/root/learn_jmeter/apache-jmeter-5.2.1/lib

 

[root@localhost lib]# mv /opt/ShenTong/jdbc/oscarJDBC.jar ./

 

[root@localhost lib]# ls oscarJDBC.jar

 

oscarJDBC.jar

 

 

 

 

 

 

 

修改测试计划

 

前面如果没有修改驱动包的路径,那也不要紧,因为在linux里我们还能继续修改

 

打开测试计划:

 

[root@localhost script]# vim test_10_25.jmx

 

找到:”TestPlan.user_define_classpath”

 

 

 

 

 

把路径改成我们linux系统里面驱动包的路径:

 

<stringProp name="TestPlan.user_define_classpath">/root/learn_jmeter/apache-jmeter-5.2.1/lib/oscarJDBC.jar</stringProp>

 

 

 

 

 

这里对应着我们的测试计划的语句简单介绍下,如果不明白那就继续在windows上调整好在放进来也是可以的

 

 

 

name="dbUrl"

对应着我们的url

name="driver"

类名

name="username"

连接用户

name="password"

账户密码

name="dataSource"

jdbc连接名

name="query"

测试语句

guiclass="ThreadGroupGui"

线程组配置

name="queryType"

测试语句类型

 

(目前先介绍一下常用的,如果有兴趣可以和weindows对比然后再继续添加)

 

 

 

修改测试jmeter分布式压测参数

 

Why??

 

上面说了我们不需要执行jmeter分布式压测,那么为什么还需要配置呢??

 

因为我们不需要压测但是我们的linux得需要启动jmeter-server服务才能进行压测,我们需要通过jmeter-server服务来指定自己本身为slave进行压测

 

打开分布式压测配置文件:

 

 

 

查找:

 

/remote_hosts   

 

 

 

 

 

使用本机的话就默认127.0.0.1就可以

 

 

 

查找:

 

/disable

 

#server.rmi.ssl.disable=false

 

把注释去掉

 

server.rmi.ssl.disable=true

 

 

 

 

 

server.rmi.ssl.disable含义:在最新的jmeter版本中jmeter分布式压测使用的通信协议是通过key的方式建立的这个参数就是打开rmi通信建立渠道。

 

 

 

启动jmeter-server服务

 

上述一些压测参数的配置已经基本完成了,现在开始要启动我们的jmeter服务

 

[root@localhost bin]# ./jmeter-server -Djava.rmi.server.hostname=192.168.137.12

 

使用jmeter-server服务远程到本机进行压测

 

如果遇到:

 

 

 

 

 

ERROR StatusLogger Error parsing log4j2.xml

 

这个是log4j2.xml文件的问题

 

打开文件: vim log4j2.xml

 

删掉所有的信息

 

添加:

 

<?xml version="1.0" encoding="UTF-8"?>

 

<Configuration status="WARN">

 

        <Properties>

 

                <property name="log_level" value="info" />

 

                <Property name="log_dir" value="log" />

 

                <property name="log_pattern"

 

                        value="[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] - [%t] %logger - %m%n" />

 

                <property name="file_name" value="test" />

 

                <property name="every_file_size" value="100 MB" />

 

        </Properties>

 

        <Appenders>

 

                <Console name="Console" target="SYSTEM_OUT">

 

                        <PatternLayout pattern="${log_pattern}" />

 

                </Console>

 

                <RollingFile name="RollingFile"

 

                        filename="${log_dir}/${file_name}.log"

 

                        filepattern="${log_dir}/$${date:yyyy-MM}/${file_name}-%d{yyyy-MM-dd}-%i.log">

 

                        <ThresholdFilter level="DEBUG" onMatch="ACCEPT"

 

                                onMismatch="DENY" />

 

                        <PatternLayout pattern="${log_pattern}" />

 

                        <Policies>

 

                                <SizeBasedTriggeringPolicy

 

                                        size="${every_file_size}" />

 

                                <TimeBasedTriggeringPolicy modulate="true"

 

                                        interval="1" />

 

                        </Policies>

 

                        <DefaultRolloverStrategy max="20" />

 

                </RollingFile>

 

 

 

                <RollingFile name="RollingFileErr"

 

                        fileName="${log_dir}/${file_name}-warnerr.log"

 

                        filePattern="${log_dir}/$${date:yyyy-MM}/${file_name}-%d{yyyy-MM-dd}-warnerr-%i.log">

 

                        <ThresholdFilter level="WARN" onMatch="ACCEPT"

 

                                onMismatch="DENY" />

 

                        <PatternLayout pattern="${log_pattern}" />

 

                        <Policies>

 

                                <SizeBasedTriggeringPolicy

 

                                        size="${every_file_size}" />

 

                                <TimeBasedTriggeringPolicy modulate="true"

 

                                        interval="1" />

 

                        </Policies>

 

                </RollingFile>

 

        </Appenders>

 

        <Loggers>

 

                <Root level="${log_level}">

 

                        <AppenderRef ref="Console" />

 

                        <AppenderRef ref="RollingFile" />

 

                        <appender-ref ref="RollingFileErr" />

 

                </Root>

 

        </Loggers>

 

</Configuration>

 

 

 

执行jmeter压测测试

 

上面我们已经把jmeter-server服务开启了,那么现在让我们使用jmeter开始进行我们的最终目的!

 

[root@localhost bin]# ./jmeter -n -t  script/test_10_25.jmx -r -l report/test_log_25_1.jtl -j report/test_log_25_5.log

 

说一下含义:

 

-n : 使用非GUI页面进行压缩

 

-t : 测试计划的路径

 

-r : 设置为远程执行

 

-l : 压测报告的路径

 

-j : 压测日志的路径

 

 

 

 

 

执行之后会看到如下过程:

 

 

 

 

 

 

 

生成报告

 

既然我们已经执行完压测结果了,那么就该做测试的最后一步生成一份可视化的报告.

 

执行:

 

[root@localhost ~]# mkdir result

 

[root@localhost bin]# ./jmeter -g report/test_log_25_1.jtl -e -o /root/result

 

-e : 路径

 

-o : 生成一个index文件的报告

 

注意:在执行jmeter的时候一定要选择空的目录否则无法生成报告!

 

 

 

然后我们进入到生成报告的目录>

 

[root@localhost ~]# cd result

 

[root@localhost result]# ls

 

content  index.html  sbadmin2-1.0.7  statistics.json

 

把东西拿到我们的windows机器上,当然如果你有火狐或者curl命令打开也不是不可以哈哈哈

 

 

 

 

 

 

 

 

 

Ok!至此jmeterlinux压测也就写到这里了,如果上面有什么地方说的不对的欢迎大佬指正~

 

 

 

 

 

 

 

 

 

 

 

posted on 2020-10-26 17:54  yandyand  阅读(753)  评论(0编辑  收藏  举报