在性能測試過程中,我們可能會關(guān)注很多指標(biāo)折汞,比如CPU倔幼、IO、網(wǎng)絡(luò)爽待、磁盤等损同,通過這些指標(biāo)大致可以判斷哪個環(huán)節(jié)遇到了性能瓶頸,但是當(dāng)這些指標(biāo)無法判斷出性能瓶頸時鸟款,我們可能就需要對一些中間件進(jìn)行監(jiān)控膏燃,比如Nginx,Tomcat等何什,當(dāng)然可能還有很多其他中間件组哩,我們本章主要探討Nginx+Tomcat的部署及監(jiān)控,以及使用Jmeter對我們的服務(wù)器進(jìn)行壓測处渣,在壓測過程中伶贰,可能也會遇到Jmeter的一些瓶頸,話不多說罐栈,先搞起來黍衙。
關(guān)于Nginx實現(xiàn)負(fù)載均衡
Nginx作為反向代理服務(wù)器,實現(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)行登錄摄欲,密碼為虛擬機創(chuàng)建用戶時密碼轿亮,Xshell主要作用是方便我們敲Linux命令。如下圖所示:
Xftp配置
我們安裝Centos6.3后胸墙,使用Xftp進(jìn)行連接我注,Xftp安裝比較簡單,基本都是下一步下一步迟隅。建議使用root用戶進(jìn)行登錄但骨,密碼為虛擬機創(chuàng)建用戶時密碼。協(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
驗證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個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>第一個 JSP 程序</title>
</head>
<body>
<%
out.println("111111111");
%>
</body>
</html>
tomcat2修改為如下內(nèi)容
<html>
<head>
<title>第一個 JSP 程序</title>
</head>
<body>
<%
out.println("22222222");
%>
</body>
</html>
- 進(jìn)入
/usr/local/
绕沈,輸入chmod 777 -R tomcat1 tomcat2
給2個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
這個路徑的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時时甚,會發(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個頁面來回跳轉(zhuǎn),這就實現(xiàn)了負(fù)載均衡技術(shù)开镣。
查看Nginx的一些狀態(tài)信息
訪問虛擬機ip/status刀诬,出現(xiàn)如下內(nèi)容,說明stub_status模塊部署成功
各數(shù)據(jù)項說明:
- Active connections: 當(dāng)前nginx正在處理的活動連接數(shù).
- Server accepts handled requests : nginx總共處理了414 個連接邪财,成功創(chuàng)建414 握手(證明中間沒有失敗的),總共處理了491個請求
- Reading: nginx讀取到客戶端的Header信息數(shù)
- Writing: nginx返回給客戶端的Header信息數(shù)
- Waiting: 開啟keep-alive的情況下,這個值等于 active – (reading + writing)陕壹,意思就是nginx已經(jīng)處理完成,正在等候下一次請求指令的駐留連接。
所以,在訪問效率高,請求很快被處理完畢的情況下,Waiting數(shù)比較多是正常的.如果reading +writing數(shù)較多,則說明并發(fā)訪問量非常大,正在處理過程中树埠。
為什么是訪問ip/status
為什么是訪問ip/status帐要?還記得我們在編譯的時候使用./configure --with-http_stub_status_module
嗎?編譯的時候安裝了stub_status模塊弥奸,然后我們對nginx.conf進(jìn)行了一些配置,除了加負(fù)載集群奋早,還新增了一個路徑 location /status 盛霎。
ngxtop
centos6 暫時沒有解決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)載請注意出處速兔,謝謝合作