双十一临近,系统的压测也随之而来。所以打算对系统进行一次压测,通过压测来了解服务器性能瓶颈,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题;如果当前架构快达到性能瓶颈了,是横向扩容性能提升大,还是纵向扩容性能提升大。
如果需要了解这些信息,需要在两方面下功夫,一个是对服务器进行性能压测,一个是对服务器进行性能监控。
通过对服务器进行性能测试:我们可以了解到当前架构的性能瓶颈,还可以对架构横向扩容和纵向扩容来进行测试,对后期的架构扩容提供数据参考。
综合考虑,工具使用如下:
jmeter: jmeter官网
zabbix: zabbix官网
jvisualvm: jdk自带版本
jmeter架构如下:
搭建步骤
1.在所有期望运行 JMeter 作为 Load Generator 的机器上安装JMeter,并确定其中一台机器作为 Controller,其他的机器作为 Agent。agent搭建在linux(centos 6.5)服务器环境下,server搭建在windows(server 2016)环境下。
2.在Controller 机器的 JMeter 安装目录下找到 bin 目录,再找到 JMeter.properties 这个文件,使用记事本或者其他文字编辑工具打开它;
3.在打开的文件中查找“remote_hosts=”这个字符串,你可以找到这样一行“remote_hosts=127.0.0.1”。其中的 127.0..0.1 表示运行 JMeter Agent 的机器,这里需要修改为“remote_hosts=ip1,ip2”。JMeter 的 Controller 和 Agent之间进行通讯的RMI端口号默认;
4.保存文件,并重新启动 Controller 机器上的 JMeter.bat,并进入 Run -> Remote Start 菜单项,查看机器。
windows安装Controller
首先安装jdk,在jmeter3.*以上版本要求jdk 1.8+,但是由于我这边系统jdk1.8验签不过,所以jmeter换成了2.13,jdk使用的1.7版本。
下载windows版本的jmeter
解压jmeter,设置path变量,修改配置文件:
在server机器的jmeter安装目录下bin目录下,找到jmeter.properties文件,修改远程主机选项,添加自己的agent服务器的地址。
remote_hosts=192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5
修改jmeter.bat文件
1
2
|
新增
set
rmi_host
=
-
Djava
.
rmi
.
server
.
hostname
=
修改
set
ARGS
=
%
DUMP
%
%
HEAP
%
%
NEW
%
%
SURVIVOR
%
%
TENURING
%
%
PERM
%
%
DDRAW
%
%
rmi_host
%
|
安装完成之后,在命令行运行jmeter命令,如果可以正常启动jmeter,说明环境配置ok。但是需要注意的是,如果是双网卡服务器,需要指定内网ip通信。启动方式如下:
1
|
jmeter
-
Djava
.
rmi
.
server
.
hostname
=
192.168.1.1
|
安装agent:
1
2
3
4
|
wget
http
:
//mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.3.zip
unzip
apache
-
jmeter
-
3.3.zip
-
d
/
usr
/
local
/
cd
/
usr
/
local
/
ln
-
s
apache
-
jmeter
-
3.3
/
jmeter
|
启动脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#!/bin/bash
# chkconfig: 345 26 74
# description: jmeter agent
myip
=
`
ifconfig
eth0
|
awk
'/inet addr/{gsub(/addr:/,"");print $2}'
`
cmd
=
"/usr/local/jmeter/bin/jmeter-server -Djava.rmi.server.hostname=$myip"
start
(
)
{
$
cmd
&
}
stop
(
)
{
jmeter_pid
=
`
ps
aux
|
grep
jmeter
-
server
|
grep
-
v
grep
|
awk
'{print $2}'
`
for
pid
in
$
jmeter_pid
;
do
kill
-
9
$
pid
done
}
act
=
$
1
case
$
act
in
'start'
)
start
;
;
'stop'
)
stop
;
;
'restart'
)
stop
sleep
2
start
;
;
*
)
echo
'[start|stop|restart]'
;
;
esac
|
原文地址原文地址