在性能测试过程中,我们可能会关注很多指标,比如CPU、IO、网络、磁盘等,通过这些指标大致可以判断哪个环节遇到了性能瓶颈,但是当这些指标无法判断出性能瓶颈时,我们可能就需要对一些中间件进行监控,比如Nginx,Tomcat等,当然可能还有很多其他中间件,我们本章主要探讨Nginx+Tomcat的部署及监控,以及使用Jmeter对我们的服务器进行压测,在压测过程中,可能也会遇到Jmeter的一些瓶颈,话不多说,先搞起来。
关于Nginx实现负载均衡
Nginx作为反向代理服务器,实现负载均衡。首先浏览器发起请求,到达Nginx,由Nginx将请求地址转发给相应的tomcat服务器,再由tomcat服务器将结果返回给Nginx,Nginx将结果再转发给浏览器。大致流程如下:
环境准备
- Centos6.3
- JDK1.8
- Tomcat8
客户端
- Vmware
- Xshell
- Xftp
Xsehll配置
我们安装Centos6.3后,使用Xshell进行连接,Xshell安装比较简单,基本都是下一步下一步。建议使用root用户进行登录,密码为虚拟机创建用户时密码,Xshell主要作用是方便我们敲Linux命令。如下图所示:
Xftp配置
我们安装Centos6.3后,使用Xftp进行连接,Xftp安装比较简单,基本都是下一步下一步。建议使用root用户进行登录,密码为虚拟机创建用户时密码。协议选择SFTP,Xftp主要作用是上传和下载文件。如下图所示:
JDK环境配置
我们使用xftp把jdk放到/usr/local
下,然后输入vi /etc/profile
,在文件末尾加入如下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_65
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
然后输入source /etc/profile
,在命令行输入java -version
,出现如下内容下图,说明JDK环境配置成功
root@ubuntu:/usr/local# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
安装Nginx
下载Nginx
切换到usr/local
,然后命令行输入wget http://nginx.org/download/nginx-1.11.6.tar.gz
解压nginx的gz包
tar -zxvf nginx-1.11.6.tar.gz
安装依赖
cd /usr/local/nginx-1.11.6切换到nginx安装目录
yum -y install pcre-devel
yum install -y zlib-devel
./configure --with-http_stub_status_module
编译
make install
启动nginx
cd /usr/local/nginx/sbin
./nginx
验证Nginx是否启动成功
curl http://localhost
出现下面信息说明安装成功
Welcome to nginx!
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.
For online documentation and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
Nginx常用命令
cd /usr/local/nginx/sbin
-
./nginx
启动 -
./nginx -s stop
关闭 -
./nginx -s reopen
重启 -
./nginx -v
查看版本 -
./nginx -h
可以看到命令的帮助信息
Tomcat部署
- 把2个Tomcat包放在
/usr/local
,为了避免端口冲突,我们需要修改tomcat/conf/server.xml
三处地方,
tomcat1如下:
tomcat2如下:
修改完成之后,tomcat1的端口位8081,tomcat2的端口为8082
- 修改完tomcat端口号之后,为了区分tomcat1和tomcat2,修改
tomcat/webapps/ROOT/index.jsp
,tomcat1修改为如下内容
第一个 JSP 程序
<%
out.println("111111111");
%>
tomcat2修改为如下内容
第一个 JSP 程序
<%
out.println("22222222");
%>
- 进入
/usr/local/
,输入chmod 777 -R tomcat1 tomcat2
给2个tomcat赋予权限(如果权限不够,把bin也赋予权限),然后进入/usr/local/tomcat/bin
,输入service iptables stop
先关闭防火墙,然后./startup.sh
启动tomcat1和tomcat2,启动成功截图如下:
修改nginx.conf
首先我们使用find / -name nginx.conf
找到nginx.conf的位置,我们使用/usr/local/nginx/conf/nginx.conf
这个路径的nginx.conf文件,使用vim nginx.conf
打开,找到http,在#gzip on;
下面作如下修改:
upstream tomcat {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=1;
}
server {
listen 80 default_server;
server_name localhost;
location / {
root html;
proxy_pass http://tomcat; #配置集群指向
index index.html index.htm;
}
location /status {
stub_status on;
access_log off;
}
}
做了如上配置后,在/usr/local/nginx/sbin
下重启nginx./nginx -s reopen
,启动成功,当我们访问localhost时,会发现不是Nginx的首页了,而是出现/usr/local/tomcat1/webapps/ROOT/index.jsp
或者是/usr/local/tomcat2/webapps/ROOT/index.jsp
的页面。当我们来回刷新,会发现在下面的2个页面来回跳转,这就实现了负载均衡技术。
查看Nginx的一些状态信息
访问虚拟机ip/status,出现如下内容,说明stub_status模块部署成功
各数据项说明:
- Active connections: 当前nginx正在处理的活动连接数.
- Server accepts handled requests : nginx总共处理了414 个连接,成功创建414 握手(证明中间没有失败的),总共处理了491个请求
- Reading: nginx读取到客户端的Header信息数
- Writing: nginx返回给客户端的Header信息数
- Waiting: 开启keep-alive的情况下,这个值等于 active – (reading + writing),意思就是nginx已经处理完成,正在等候下一次请求指令的驻留连接。
所以,在访问效率高,请求很快被处理完毕的情况下,Waiting数比较多是正常的.如果reading +writing数较多,则说明并发访问量非常大,正在处理过程中。
为什么是访问ip/status
为什么是访问ip/status?还记得我们在编译的时候使用./configure --with-http_stub_status_module
吗?编译的时候安装了stub_status模块,然后我们对nginx.conf进行了一些配置,除了加负载集群,还新增了一个路径 location /status 。
ngxtop
centos6 暂时没有解决ngxtop启动失败问题,大家可以访问我的阿里云,命令行输入ngxtop
,对照官方文档进行操作,ngxtop地址
Tomcat监控Probe
Probe github地址
- 首先把probe.war放入tomcat下面的webapps文件夹
- 修改CATALINA_HOME/conf/tomcat-users.xml,新增以下内容
修改CATALINA_HOME/bin/catalina.sh,新增
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
,开启jvm远程监控-
重启tomcat,访问ip:端口号/probe,出现如下截图说明搭建成功
软件测试汪地址
软件测试汪博客地址
欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560
转载请注意出处,谢谢合作