在性能測試過程中,我們可能會關(guān)注很多指標(biāo),比如CPU、IO、網(wǎng)絡(luò)、磁盤等,通過這些指標(biāo)大致可以判斷哪個(gè)環(huán)節(jié)遇到了性能瓶頸,但是當(dāng)這些指標(biāo)無法判斷出性能瓶頸時(shí),我們可能就需要對一些中間件進(jìn)行監(jiān)控,比如Nginx,Tomcat等,當(dāng)然可能還有很多其他中間件,我們本章主要探討Nginx+Tomcat的部署及監(jiān)控,以及使用Jmeter對我們的服務(wù)器進(jìn)行壓測,在壓測過程中,可能也會遇到Jmeter的一些瓶頸,話不多說,先搞起來。
關(guān)于Nginx實(shí)現(xiàn)負(fù)載均衡
Nginx作為反向代理服務(wù)器,實(shí)現(xiàn)負(fù)載均衡。首先瀏覽器發(fā)起請求,到達(dá)Nginx,由Nginx將請求地址轉(zhuǎn)發(fā)給相應(yīng)的tomcat服務(wù)器,再由tomcat服務(wù)器將結(jié)果返回給Nginx,Nginx將結(jié)果再轉(zhuǎn)發(fā)給瀏覽器。大致流程如下:

環(huán)境準(zhǔn)備
- Centos6.3
- JDK1.8
- Tomcat8
客戶端
- Vmware
- Xshell
- Xftp
Xsehll配置
我們安裝Centos6.3后,使用Xshell進(jìn)行連接,Xshell安裝比較簡單,基本都是下一步下一步。建議使用root用戶進(jìn)行登錄,密碼為虛擬機(jī)創(chuàng)建用戶時(shí)密碼,Xshell主要作用是方便我們敲Linux命令。如下圖所示:

Xftp配置
我們安裝Centos6.3后,使用Xftp進(jìn)行連接,Xftp安裝比較簡單,基本都是下一步下一步。建議使用root用戶進(jìn)行登錄,密碼為虛擬機(jī)創(chuàng)建用戶時(shí)密碼。協(xié)議選擇SFTP,Xftp主要作用是上傳和下載文件。如下圖所示:

JDK環(huán)境配置
我們使用xftp把jdk放到/usr/local 下,然后輸入vi /etc/profile,在文件末尾加入如下內(nèi)容:
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,出現(xiàn)如下內(nèi)容下圖,說明JDK環(huán)境配置成功
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
驗(yàn)證Nginx是否啟動成功
curl http://localhost
出現(xiàn)下面信息說明安裝成功
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a >nginx.org</a>.<br/>
Commercial support is available at
<a >nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Nginx常用命令
cd /usr/local/nginx/sbin
-
./nginx啟動 -
./nginx -s stop關(guān)閉 -
./nginx -s reopen重啟 -
./nginx -v查看版本 -
./nginx -h可以看到命令的幫助信息
Tomcat部署
- 把2個(gè)Tomcat包放在
/usr/local,為了避免端口沖突,我們需要修改tomcat/conf/server.xml三處地方,
tomcat1如下:
<Server port="8006" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
tomcat2如下:
<Server port="8007" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Connector port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8011" protocol="AJP/1.3" redirectPort="8443" />
修改完成之后,tomcat1的端口位8081,tomcat2的端口為8082
- 修改完tomcat端口號之后,為了區(qū)分tomcat1和tomcat2,修改
tomcat/webapps/ROOT/index.jsp,tomcat1修改為如下內(nèi)容
<html>
<head>
<title>第一個(gè) JSP 程序</title>
</head>
<body>
<%
out.println("111111111");
%>
</body>
</html>
tomcat2修改為如下內(nèi)容
<html>
<head>
<title>第一個(gè) JSP 程序</title>
</head>
<body>
<%
out.println("22222222");
%>
</body>
</html>
- 進(jìn)入
/usr/local/,輸入chmod 777 -R tomcat1 tomcat2給2個(gè)tomcat賦予權(quán)限(如果權(quán)限不夠,把bin也賦予權(quán)限),然后進(jìn)入/usr/local/tomcat/bin,輸入service iptables stop先關(guān)閉防火墻,然后./startup.sh啟動tomcat1和tomcat2,啟動成功截圖如下:
tomcat1.png
tomcat2.png
修改nginx.conf
首先我們使用find / -name nginx.conf找到nginx.conf的位置,我們使用/usr/local/nginx/conf/nginx.conf這個(gè)路徑的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,啟動成功,當(dāng)我們訪問localhost時(shí),會發(fā)現(xiàn)不是Nginx的首頁了,而是出現(xiàn)/usr/local/tomcat1/webapps/ROOT/index.jsp或者是/usr/local/tomcat2/webapps/ROOT/index.jsp的頁面。當(dāng)我們來回刷新,會發(fā)現(xiàn)在下面的2個(gè)頁面來回跳轉(zhuǎn),這就實(shí)現(xiàn)了負(fù)載均衡技術(shù)。


查看Nginx的一些狀態(tài)信息
訪問虛擬機(jī)ip/status,出現(xiàn)如下內(nèi)容,說明stub_status模塊部署成功

各數(shù)據(jù)項(xiàng)說明:
- Active connections: 當(dāng)前nginx正在處理的活動連接數(shù).
- Server accepts handled requests : nginx總共處理了414 個(gè)連接,成功創(chuàng)建414 握手(證明中間沒有失敗的),總共處理了491個(gè)請求
- Reading: nginx讀取到客戶端的Header信息數(shù)
- Writing: nginx返回給客戶端的Header信息數(shù)
- Waiting: 開啟keep-alive的情況下,這個(gè)值等于 active – (reading + writing),意思就是nginx已經(jīng)處理完成,正在等候下一次請求指令的駐留連接。
所以,在訪問效率高,請求很快被處理完畢的情況下,Waiting數(shù)比較多是正常的.如果reading +writing數(shù)較多,則說明并發(fā)訪問量非常大,正在處理過程中。
為什么是訪問ip/status
為什么是訪問ip/status?還記得我們在編譯的時(shí)候使用./configure --with-http_stub_status_module嗎?編譯的時(shí)候安裝了stub_status模塊,然后我們對nginx.conf進(jìn)行了一些配置,除了加負(fù)載集群,還新增了一個(gè)路徑 location /status 。
ngxtop
centos6 暫時(shí)沒有解決ngxtop啟動失敗問題,大家可以訪問我的阿里云,命令行輸入ngxtop,對照官方文檔進(jìn)行操作,ngxtop地址
Tomcat監(jiān)控Probe
- 首先把probe.war放入tomcat下面的webapps文件夾
- 修改CATALINA_HOME/conf/tomcat-users.xml,新增以下內(nèi)容
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="poweruser"/>
<role rolename="probeuser"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="sss" password="sss" roles="manager-gui"/>
<user username="fbysss" password="sss" roles="manager-script,manager-jmx,manager-status,poweruser,probeuser"/>
修改CATALINA_HOME/bin/catalina.sh,新增
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote",開啟jvm遠(yuǎn)程監(jiān)控-
重啟tomcat,訪問ip:端口號/probe,出現(xiàn)如下截圖說明搭建成功
probe.png
歡迎關(guān)注微信公眾號:軟件測試汪。軟件測試交流群:809111560
轉(zhuǎn)載請注意出處,謝謝合作


