Jmeter測壓
1.Jmeter-5.1.1下載:http://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip
2.Jmeter-5.1.1依賴java環境,只支持java8以上的版本,java8官網下載太慢(30k/s),所以我在騰訊軟件中心下載的(5M/s)
3.java8解壓后,運行.exe文件進行安裝,配置環境變量:JAVA_HOME,PATH,CLASS_PATH后,再cmd執行javac命令,沒有報錯表示安裝完成
4.解壓Jmeter,在/bin目錄下找到jmeter.bat,點擊運行,彈出黑框啟動客戶端

5.Jmeter默認英文,但支持中文,設置Options->Choose Language->Chinese
6.准備完成之后,在Test Plan下新建線程組,設置線程數(並發數),啟動時間(花費多長時間達到最大線程數),循環次數(每個線程發送多長次請求,選擇永遠則一直發)

7.在線程組下添加http請求,填寫內容如下圖

8.選擇監聽器,相當於看測壓結果的窗口,如下圖,各種花里胡哨的圖表報告,選擇完想看的圖表報告之后,點擊運行,就開始做給服務器做壓力測試了

Tomcat+Nginx負載均衡:
1.做了測試之后發現Tomcat只能正常支持200多個並發量,當然是可以通過修改Tomcat的默認配置來改變,比如默認內存、默認並發量等。當測試數據達到300后,就會有20%的請求失敗,所以需要看看tomcat集群的處理效果怎么樣
2.我搭建環境用的版本是:java8,Tomcat8.5.41解壓版(下載:https://tomcat.apache.org/download-70.cgi),nginx-1.16.0(下載:http://nginx.org/en/download.html)
3.首先保證java服務正常啟動,解壓tomcat,多復制幾個,具體幾個看需要;然后挨個該配置文件,第一步:打開/conf/server.xml配置文件修改其中的8005、8009、8080端口,這一步是保證多tomcat之前彼此不重復,第二步:打開/bin/shutdown.bat(停止tomcat)和/bin/startup.bat(運行tomcat),在第一行‘@echo off’下面新啟一行,寫入‘SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_191’,這一步是讓tomcat能夠找到Java環境,然后保存,第三步打開/bin/startup.bat以運行tomcat,打開瀏覽器測試tomcat是否運行成功。之后的tomcat都重復此操作。
4.tomcat全部打開后,開始編輯nginx配置文件,打開/conf/nginx.conf,把配置文件改為如下內容,后保存。ip_hash表示Nginx會根據ip來給請求的用戶分配tomcat,同一個用戶將會被分配給同一個tomcat處理,解決了session保存問題,但是這樣會導致請求分配不均勻。


5.此時運行ngin.exe,就OK了。訪問Nginx監聽的端口,會發現請求安裝配置文件正常的分配給各個tomcat,負載均衡就完成了
6.當然nginx的功能遠不止如此,此處只是單純實現負載均衡,比如根據url用正則判斷實現動靜分離、其他的各項設置可以滿足各種實際需求,nginx雖然小但功能還是挺強大的,貼一段配置文件詳解:
運行用戶
user nobody;
啟動進程,通常設置成和cpu的數量相等
worker_processes 1;
全局錯誤日志及PID文件
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
工作模式及連接數上限
events {
worker_connections 1024;#單個后台worker process進程的最大並發鏈接數
}
設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
#設定mime類型,類型由mime.type文件定義
include mime.types;
default_type application/octet-stream;
#設定日志格式
#access_log logs/access.log main;
#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,
#必須設為 on,如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
sendfile on;
#tcp_nopush on;
#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
#服務器設置的最大上傳文件大小
client_max_body_size 200m;
#開啟gzip壓縮
gzip on;
gzip_comp_level 2;
gzip_types text/css application/javascript application/json;
gzip_disable “MSIE [1-6].”;
#設定負載均衡的服務器列表
upstream collectionBackend {
#本機上的Squid開啟7002端口
server 127.0.0.1:7002;
}
server {
#偵聽80端口
listen 80;
#定義使用localhost訪問
server_name localhost;
#默認值90s, nginx連接到后端服務器的連接超時時間
proxy_connect_timeout 90;
#設置了發送請求給upstream服務器的超時時間。超時設置不是為了整個發送期間,而是在兩次write操作期間。如果超時后,upstream沒有收到新的數據,nginx會關閉連接
proxy_send_timeout 90;
設置與代理服務器的讀超時時間。它決定了nginx會等待多長時間來獲得請求的響應。這個時間不是獲得整個response的時間,而是兩次reading操作的時間。
proxy_read_timeout 90;
nginx設置目錄瀏覽及中文亂碼問題解決方案:
#charset koi8-r;
#設定日志格式
#access_log logs/host.access.log main;
在這個location配置段中,如果URL請求“/public/logo.gif”,那么nginx將會在服務器上查找“F:/workspace/cloud/bv-frontend-dev/public/logo.gif”文件,即請求的URL中location后面的部分會被追加到alias指定的目錄后面,而location后面的“/public”路徑將會被自動丟棄。
location /public/ {
alias F:/workspace/cloud/bv-frontend-dev/public/;
}
location / {
#rewrite的主要功能是實現RUL地址的重定向
rewrite ‘^/simple/.*.(html)$’ /simple-index/simple.html last;
rewrite ‘^/simple/.*config.js$’ /simple-index/config.js last;
rewrite ‘^/simple/./custom/(.)’ /simple-index/custom/$1 last;
rewrite ‘^/simple/./api/(.)’ /api/$1 last;
rewrite ‘^/simple/custom/(.*)’ /simple-index/custom/$1 last;
rewrite ‘^/simple/api/(.*)’ /api/$1 last;
alias同上含義:
alias F:/workspace/bestvike/collection-handle/static/;
index index.html;
}
location /simple-index {
alias F:/workspace/bestvike/collection-handle/static/;
}
location /resources/ {
rewrite ‘^/resources/simple/(.*.html)$’ /simple-index/simple/$1 last;
alias F:/workspace/bestvike/collection-handle/static/simple/;
}
location /api/ {
proxy_set_header:允許重新定義或者添加發往后端服務器的請求頭.該值可以包含文本、變量和它們的組合。在沒有定義proxy_set_header時會繼承之前定義的值。默認情況下,只有兩個字段被重定義:proxy_set_header Host $proxy_host 和 proxy_set_header Connection close
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass URL,URL為要設置的被代理服務器的地址,包含傳輸協議、主機名稱或IP地址加端口號、URI等要素。
proxy_pass http://collectionBackend/api/;
}
error_page:當發生錯誤的時候能夠顯示一個預定義的地址,實際上產生了一個內部跳轉(internal redirect),當訪問出現500、502、503、504的時候就能返回50x.html中的內容。同時我們也可以自己定義這種情況下的返回狀態碼。
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
7.nginx基本命令
nginx #打開 nginx
nginx -t #測試配置文件是否有語法錯誤
nginx -s reopen #重啟Nginx
nginx -s reload #重新加載Nginx配置文件,然后以優雅的方式重啟Nginx
nginx -s stop #強制停止Nginx服務
nginx -s quit #優雅地停止Nginx服務(即處理完所有請求后再停止服務)
nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
-?,-h : 打開幫助信息
-v : 顯示版本信息並退出
-V : 顯示版本和配置選項信息,然后退出
-t : 檢測配置文件是否有語法錯誤,然后退出
-q : 在檢測配置文件期間屏蔽非錯誤信息
-s signal : 給一個 nginx 主進程發送信號:stop(強制停止), quit(優雅退出), reopen(重啟), reload(重新加載配置文件)
-p prefix : 設置前綴路徑(默認是:/usr/share/nginx/)
-c filename : 設置配置文件(默認是:/etc/nginx/nginx.conf)
-g directives : 設置配置文件外的全局指令
8.nginx常用的正則表達試

最后,今天因為一些原因沒用給負載均衡測壓,之后再補測
