主頁 > 軟體設計 > 典型傳統專案部署實戰(jdk,tomcat,mysql,nginx實戰)

典型傳統專案部署實戰(jdk,tomcat,mysql,nginx實戰)

2021-10-27 09:35:55 軟體設計

引言

為了加強基礎知識的復習,鞏固學習成果,小猿將最近上線的公司專案重新部署一遍并記載整個程序,并說明要點,為傳統專案部署做個綜合案例以便做參考,
作業系統
CentOS 記憶體4g 雙核
資料庫作業系統
CentOS 記憶體2g 雙核

jdk安裝

小猿以前的文章中有過專門安裝jdk的文章,如果是安裝jdk小白,請點看小猿的jdk離線安裝如果了解jdk機理,小猿就直接上步驟,

stem-one:獲取系統位數

首先 在安裝各個軟體之前,需要確定自己作業系統的一些資訊,如要獲取自己作業系統的位數,確定是那種系統,才可以決定安裝那個軟體,

#獲取系統
getconf LONG_BIT

step-two:jdk的下載

下載jdk,下載jdk版本也是有講究的,如無特殊需求,還是建議下載jdk1.8.192版本以前的版本,據小猿了解從oracle 公司從 jdk1.8.192開始收費了,所以下載版本的時候需要注意,目前,要下載oracle公司的產品,則必須要注冊oracle賬號,即先注冊后下載,

官網下載地址

https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
在這里插入圖片描述

step-three:卸載jdk

查看openjdk

如果有直接卸載

rpm  -qa | grep jdk

在這里插入圖片描述

卸載安裝包

在這里插入圖片描述

rpm  -e  --nodeps  java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64

step-four:jdk安裝

rpm包安裝

如果不是壓縮軟體,是rpm包,就直接安裝

rpm -ivh xxx

壓縮包安裝

如果是是.gz檔案,就直接解壓

tar -zxvf jdk-8u191-linux-x64.tar.gz  -C /usr/local/jdk

step-five:配置環境變數

打開環境變陣列態檔

vim  /etc/profile

在底部加上下面的配置代碼

#set jdk environment
JAVA_HOME=/usr/local/jdk/jdk1.8.0_191
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
PATH=${JAVA_HOME}/bin:$PATH
export JAVA_HOME CLASSPATH PATH

需要重新使得profile檔案生效

source /etc/profile

step-six: 查看是否安裝成功

java -version

在這里插入圖片描述

mysql安裝

step-one: 卸載系統自帶mysql

卸載方法與上面卸載openjdk是類似的此處不再贅述,

step-two: 下載mysql

下載mysql也有版本分別,自從mysql 被oracle公司收購后,mysql就推出企業版,如8.0版本都有企業版和社區版之分,而mysql5.7以前的諸多版本都是社區版,但目前國內許多的中小型專案都用開源專案,因此無需擔心付費的問題:
官網下載地址: https://downloads.mysql.com/archives/community/
在這里插入圖片描述

step-three:mysql準備作業

解壓mysql壓縮檔案

tar  -zxvf  mysql安裝包  -C  /usr/local/
mv  -f   mysql安裝檔案夾   mysql

創建mysql用戶和用戶組

groupadd mysql
useradd mysql -g mysql

創建data檔案和my.cnf檔案

cd /usr/local/mysql
mkdir  data
touch  my.cnf

掛載mysql到mysql用戶和用戶組

cd /usr/local
chown -R  mysql:mysql ./mysql

step-four: 撰寫組態檔

vim  my.cnf

組態檔如下

[client]    # 客戶端設定,即客戶端默認的連接引數
port = 7006  # 默認連接埠
socket = /usr/local/mysql/data/mysql.sock  # 用于本地連接的socket套接字,mysqld守護行程生成了這個檔案
default-character-set=utf8mb4

[mysql]
socket=/usr/local/mysql/data/mysql.sock
# set mysql client default chararter
default-character-set=utf8mb4
 
[mysqld]     # 服務端基本設定
# 基礎設定
#user = root
#server-id = 1  # Mysql服務的唯一編號 每個mysql服務Id需唯一
port = 7006    # MySQL監聽埠
basedir = /usr/local/mysql   # MySQL安裝根目錄
datadir = /usr/local/mysql/data  # MySQL資料檔案所在位置
tmpdir  = /usr/local/mysql/tmp   # 臨時目錄,比如load data infile會用到
socket =  /usr/local/mysql/data/mysql.sock  # 為MySQL客戶端程式和服務器之間的本地通訊指定一個套接字檔案
pid-file =  /usr/local/mysql/data/localhost.pid # pid檔案所在目錄
skip_name_resolve = 1         # 只能用IP地址檢查客戶端的登錄,不用主機名
character-set-server = utf8mb4   # 資料庫默認字符集,主流字符集支持一些特殊表情符號(特殊表情符占用4個位元組)
transaction_isolation = READ-COMMITTED # 事務隔離級別,默認為可重復讀,MySQL默認可重復讀級別
collation-server = utf8mb4_general_ci  # 資料庫字符集對應一些排序等規則,注意要和character-set-server對應
#init_connect='SET NAMES utf8mb4'  # 設定client連接mysql時的字符集,防止亂碼
lower_case_table_names = 1        # 是否對sql陳述句大小寫敏感,1表示不敏感
max_connections = 400             # 最大連接數
max_connect_errors = 1000         # 最大錯誤連接數
explicit_defaults_for_timestamp = true # TIMESTAMP如果沒有顯示宣告NOT NULL,允許NULL值
max_allowed_packet = 128M         # SQL資料包發送的大小,如果有BLOB物件建議修改成1G
interactive_timeout = 1880000        # MySQL連接閑置超過一定時間后(單位:秒)將會被強行關閉
wait_timeout = 1880000               # MySQL默認的wait_timeout值為8個小時, interactive_timeout引數需要同時配置才能生效
tmp_table_size = 16M              # 內部記憶體臨時表的最大值 ,設定成128M;比如大資料量的group by ,order by時可能用到臨時表;超過了這個值將寫入磁盤,系統IO壓力增大
max_heap_table_size = 128M        # 定義了用戶可以創建的記憶體表(memory table)的大小
query_cache_size = 0              # 禁用mysql的快取查詢結果集功能;后期根據業務情況測驗決定是否開啟;大部分情況下關閉下面兩項
query_cache_type = 0

## 設定sqlmode  默認情況下mysql5.7.5以上的板本都有sqlmode,而ONLY_FULL_GROUP_BY則是默認的 如果不配置則會出現select后面查詢的欄位沒有出現在group by中的錯誤
#nested exception is java.sql.SQLSyntaxErrorException: Expression #2 of SELECT list is not in GROUP BY clause and
# contains nonaggregated column 'wlhy_xysk.s.vehicle_license_no' which is not functionally dependent on columns in GROUP BY clause;
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'


#Threads_created:創建過的執行緒數,
#  1G  ---> 8
#  2G  ---> 16
#  3G  ---> 32
thread_cache_size = 8
# 用戶行程分配到的記憶體設定,每個session將會分配引數設定的記憶體大小
key_buffer_size = 256M         #key_buffer_size指定索引緩沖區的大小,它決定索引處理的速度
read_buffer_size = 2M             # MySQL讀入緩沖區大小,對表進行順序掃描的請求將分配一個讀入緩沖區,MySQL會為它分配一段記憶體緩沖區,
read_rnd_buffer_size = 8M         # MySQL的隨機讀緩沖區大小
sort_buffer_size = 8M             # MySQL執行排序使用的緩沖大小
binlog_cache_size = 1M            # 一個事務,在沒有提交的時候,產生的日志,記錄到Cache中;等到事務提交需要提交的時候,則把日志持久化到磁盤,默認binlog_cache_size大小32K 
back_log = 130                    # 在MySQL暫時停止回應新請求之前的短時間內多少個請求可以被存在堆疊中;官方建議back_log = 50 + (max_connections / 5),封頂數為900
skip-external-locking     #跳過外部鎖 如果是多型服務器希望打開external locking特征則直接注釋,如果是單臺服務器則直接打開即可
#skip-grant-tables


# 日志設定
log_error = /usr/local/mysql/data/logs/error.log # 資料庫錯誤日志檔案
slow_query_log = 1                # 慢查詢sql日志設定
long_query_time = 1               # 慢查詢時間;超過1秒則為慢查詢
slow_query_log_file = /usr/local/mysql/data/logs/slow_query.log # 慢查詢日志檔案
log_queries_not_using_indexes = 1 # 檢查未使用到索引的sql
log_throttle_queries_not_using_indexes = 5   # 用來表示每分鐘允許記錄到slow log的且未使用索引的SQL陳述句次數,該值默認為0,表示沒有限制
min_examined_row_limit = 100                 # 檢索的行數必須達到此值才可被記為慢查詢,查詢檢查回傳少于該引數指定行的SQL不被記錄到慢查詢日志
expire_logs_days = 5              # MySQL binlog日志檔案保存的過期時間,過期后自動洗掉
 
# 主從復制設定
#skip_slave_start,這樣復制行程就不會隨著資料庫的啟動而啟動
#skip-slave-start
# 開啟mysql binlog功能
#log-bin = mysql-bin
# binlog記錄內容的方式,記錄被操作的每一行
#binlog_format = ROW 
# 對于binlog_format = ROW模式時,減少記錄日志的內容,只記錄受影響的列
#binlog_row_image = minimal        
 
# Innodb設定
innodb_open_files = 500           # 限制Innodb能打開的表的資料,如果庫里的表特別多的情況,請增加這個,這個值默認是300
innodb_buffer_pool_size = 64M     # InnoDB使用一個緩沖池來保存索引和原始資料,一般設定物理存盤的60% ~ 70%;這里你設定越大,你在存取表里面資料時所需要的磁盤I/O越少
innodb_log_buffer_size = 2M       # 此引數確定寫日志檔案所用的記憶體大小,以M為單位,緩沖區更大能提高性能,但意外的故障將會丟失資料,MySQL開發人員建議設定為1-8M之間
innodb_flush_method = O_DIRECT    # O_DIRECT減少作業系統級別VFS的快取和Innodb本身的buffer快取之間的沖突
innodb_write_io_threads = 2     # CPU多核處理能力設定,根據讀,寫比例進行調整最好多少核的cpu配多少數
innodb_read_io_threads = 2
innodb_lock_wait_timeout = 120    # InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數,InnoDB在它自己的鎖定表中自動檢測事務死鎖并且回滾事務,InnoDB用LOCK TABLES陳述句注意到鎖定設定,默認值是50秒
innodb_log_file_size = 32M        # 此引數確定資料日志檔案的大小,更大的設定可以提高性能,但也會增加恢復故障資料庫所需的時間

為了確保不報錯,需要改變一些東西,原則上是創建完后就修改,掛載

chmod  -R 755  my.cnf

step-five: 初始化mysql

./bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

step-sex:首次啟動mysql

./support-files/mysql.server start

如果中途中有沒有創建檔案夾或者檔案的錯誤

Starting MySQL.2021-10-24T14:55:12.749885Z mysqld_safe error: log-error set to '/usr/local/mysql/data/logs/error.log', however file don't exists. Create writable for user 'mysql'.
 ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.pid).

則直接創建檔案夾或者檔案

mkdir logs
touch  ./logs/error.log

再次掛載`

chown -R mysql:mysql   ./logs
chmod  -R 755  ./logs

總之如果遭遇以下類似的問題

 ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.pid).

基本上大多數問題都是權限的問題,需要修改權限及掛載用戶組操作
還有一類問題是selinux導致,這類問題需要查看系統日志一般情況下執行下面命令基本上都能得到解決,

vim /etc/selinux/config
# 把SELINUX=enforcing改為SELINUX=disabled后存盤退出重啟機器

step-seven: 添加成開機啟動

cp support-files/mysql.server /etc/init.d/mysql

如執行了上面的命令也可以用以下命令開啟mysql 服務

./etc/init.d/mysqld  start

添加到開機啟動

# 添加開機啟動
chkconfig mysql on

step-eight:配置環境變數

在profile中添加下面內容

vim /etc/profile
#將游標移動到最底,然后加入下面的內容
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin

重繪profile檔案

source profile

step-night:設定其他引數

臨時密碼首次登錄

mysql 首次登錄需要密碼,mysql 安裝后生成了臨時密碼,查看密碼需要執行下面的操作,

cat /root/.mysql_secret 
#得到
NlT6a,hnWvkN

如果臨時密碼失效或者不想用臨時密碼,則需要修改my.cnf檔案,讓其跳過密碼授權,在mysqld中添放開下面的項,

skip-grant-tables

重啟mysql

配置密碼

use mysql
update mysql.user set authentication_string=password('root') where user='root';
flush privileges;

或者

set password=password("root");
flush privileges;

如果上述的陳述句執行報錯
在這里插入圖片描述
則按照提示直接采用下面的陳述句

alter user 'root'@'localhost' identified by 'root';

修改my.cnf,注釋掉跳過密碼,如果這一步不做則可能在設定遠程連接時遇到報錯

#skip-grant-tables

修改密碼重啟mysql

service mysql  restart

設定遠程連接使能

在Linux下為了安全,默認是不允許mysql本機以外的機器訪問mysql資料庫服務,因此需要重新授權root,

grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

或者

use mysql;
update user set host='%' where user='root';
flush privileges;

執行上述操作后重啟mysql,即mysql 安裝成功
在這里插入圖片描述

注意事項

通常情況下按照上述步驟基本都能解決問題,但是諸事都有例外,當例外發生時我們需要學會觀看日志,如黑視窗給的資訊不全面,則需要我們去查看mysql的日志,在小猿安裝是就將日志設定在/usr/local/mysql/data/logs下,所有的錯誤日志都在其中有記錄,
在這里插入圖片描述
錯誤日志都在error.log中有記錄,
在這里插入圖片描述
依照上述解決辦法的模式,這種安裝mysql的方式就基本沒問題了,

專案部署思路

為了更加清晰明了的的理解整體專案的部署,小猿直接以圖的方式來展示整個專案的部署原理圖,
在這里插入圖片描述
從上面圖中基本能清晰的得知整個專案的部署框架,我們要做的事情就是將每個環節的安裝和行管配置環境做好,

nginx安裝配置

依賴包及nginx下載

nginx安裝需要依賴以下幾個庫檔案,所以需要提前下載好給出依賴庫網址
依賴庫下載
https://www.openssl.org/source/
http://www.zlib.net/
https://ftp.pcre.org/pub/pcre/
nginx下載地址
http://nginx.org/download/
最好時庫的版本和nginx的版本匹配,否則會報錯,由于版本不匹配造成的錯誤一般都是要將版本匹配后再次安裝,下面小猿給出推薦版本:
在這里插入圖片描述
上述的四個壓縮包都需要解壓

tar -zxvf pcre-8.44.tar.gz  -C /usr/develop/nginxref/
tar -zxvf  nginx-1.16.1.tar.gz  -C /usr/local/nginxref/
tar -zxvf  zlib-1.2.11.tar.gz  -C /usr/local/nginxref/
tar -zxvf  openssl-1.1.0c.tar.gz  -C /usr/local/nginxref/

版本匹配后直接解壓完成后需要查看是否存在gcc 編譯器,若沒有則需要安裝,

gcc編譯器安裝

查看gcc及gcc++

#查看gcc版本
gcc --version
#查看gcc-c++版本
g++ --version

若沒有安裝gcc或者gcc++編譯器,則需要安裝相關編譯器

#安裝gcc
yum -y install gcc
#安裝gcc-c++
yum -y install gcc-c++

安裝pcre

cd  /usr/local/nginxref/pcre-8.44
./configure&&make&&make install

安裝zlib

cd /usr/local/nginxref/zlib-1.2.11/
 ./configure&&make&&make install

安裝openssl

cd /usr/local/nginxref/openssl-1.1.0c/
./config&&make&&make install

nginx 安裝

cd /usr/local/nginxref/nginx-1.16.1/

開始編譯并安裝nginx

./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid --with-http_ssl_module --with-pcre=/usr/local/nginxref/pcre-8.44 --with-zlib=/usr/local/nginxref/zlib-1.2.11 --with-openssl=/usr/local/nginxref/openssl-1.1.0c

直到一路安裝完成,安裝完成后,在配置的目錄中即可看到相關的執行檔案
在這里插入圖片描述

nginx 啟動

啟動之前先修改權限

cd /usr/local
chmod -R 777 nginx/

開始啟動

cd /usr/local/nginx
./nginx -c ./nginx.conf

nginx 停止

./nginx  -s stop

nginx 重啟

./nginx -s reload

nginx 注意事項

啟動報錯:如權限問題,用戶組問題,組態檔語法錯誤問題都可以查看對應的日志,
為了此目的,小猿故意制造錯誤,在error.log中可以詳細的展示出對應的錯誤項,根據報錯資訊直接更改即可,

vim ./logs/error.log

在這里插入圖片描述
解決問題后就可以重新啟動,強調的是一定要看日志,

nginx檔案配置

根據專案需求,小猿的nginx配置如下:

#user  nobody;
worker_processes  1;

#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;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    upstream tomcat8_1 {
        server localhost:9000 ;  
    }
    upstream tomcat8_2 {
        server localhost:9001 ;  
    }
    upstream tomcat8_3 {
        server localhost:9002 ;  
    }
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /usr/local/tomcats/wlhy/wlhy-site;
            index  index.html index.htm;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
       # error_page   500 502 503 504  /50x.html;
       # location = /50x.html {
        #    root   html;
       # }
       location ~ /vvise-js/{
	    root /usr/local/tomcats/wlhy/ ;
	}

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    server {
	listen 80;
	server_name pt.xywl.com;
	add_header backendIP $upstream_addr;
	add_header backendCode $upstream_status;
	location /{
	    root  html;
	    index  index.html index.htm;
	    proxy_pass http://tomcat8_1;
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
	    proxy_set_header Host $http_host;
	    proxy_http_version 1.1 ;
	    proxy_set_header Upgrade $http_upgrade;
	    proxy_set_header Connection 'upgrade';
	    client_max_body_size 100M;
            client_body_buffer_size 128k;
	    client_body_in_file_only clean;
            proxy_read_timeout 600;
	    proxy_send_timeout 600;
	}

       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
       	   root   html;
       }
       #
    }

    server { 
        listen 80;
        server_name fh.xywl.com;
        add_header backendIP $upstream_addr;
        add_header backendCode $upstream_status;
        location /{
            root  html;
            index  index.html index.htm;
            proxy_pass http://tomcat8_2;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1 ; 
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            client_max_body_size 100M;
            client_body_buffer_size 128k;
            client_body_in_file_only clean;
            proxy_read_timeout 600;
            proxy_send_timeout 600;
        }

       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
     }


    server {
        listen 80;
        server_name cy.xywl.com;
        add_header backendIP $upstream_addr;
        add_header backendCode $upstream_status;
        location /{
            root  html;
            index  index.html index.htm;
            proxy_pass http://tomcat8_3;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_http_version 1.1 ;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            client_max_body_size 100M;
            client_body_buffer_size 128k;
            client_body_in_file_only clean;
            proxy_read_timeout 600;
            proxy_send_timeout 600;
        }

       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
     }


    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

組態檔配置成功后nginx的基本安裝和部署就完成了

tomcat配置及優化

tomcat常見部署方式

war包部署

war包部署比較方便,這得益于tomcat在啟動時會自動去掃描webapps各種專案包并自動執行解壓并將專案加載入tomcat容器,從而只要訪問對應的專案名就可直接訪問專案,若果想了解更多,則可查看tomcat啟動程序的相關文章,

組態檔部署

組態檔部署稍微麻煩一些,但是這種部署方式的好處在于專案檔案可進行集中管理,部署方法
在這里插入圖片描述
tomcat 在啟動時會自動掃描上述檔案夾及檔案,如有xml代碼會自動掃描,并依據xml腳本加載專案檔案,xml組態檔如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/wlhy-platform" docBase="/usr/local/tomcats/wlhy/wlhy-platform" debug="0" reloadable="true" privileged="false" sessionCookieName="wlhy_8_1" > 
</Context>

tomcat 檔案配置

眾所周知tomcat 的主要組態檔是server.xml,該檔案屬于tomcat的核心組態檔,需要我們做深入的了解,
,兩個重要的埠都需要修改

server埠修改

<Server port="8005" shutdown="SHUTDOWN">
...
...
</Server>

connector 埠修改

   <Connector executor="tomcatThreadPool"
           port="9000"/>

tomcat 優化

connector優化

	    <Connector executor="tomcatThreadPool"
           port="9000" 
           protocol="HTTP/1.1"
           maxThreads="500"
           minSpareThreads="40"
           maxSpareThreads="500"
           minProcessors="40"
           maxProcessors="500"  
           redirectPort="8443" 
           URIEncoding="UTF-8"
           connectionTimeout="20000"
           enableLookups="false"
           disableUploadTimeout="false"
           connectionUploadTimeout="15000"
           acceptCount="300"
           keepAliveTimeout="12000"
           maxKeepAliveRequests="1"
           compression="on"
           compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" />

引數基本含義

tomcatThreadPool 執行器(執行緒池)起一個名字
maxThreads 客戶請求最大執行緒數
minSpareThreads Tomcat初始化時創建的 socket 執行緒數
maxSpareThreads Tomcat連接器的最大空閑 socket 執行緒數
enableLookups 若設為true, 則支持域名決議,可把 ip 地址決議為主機名
redirectPort 在需要基于安全通道的場合,把客戶請求轉發到基于SSL 的 redirectPort 埠
acceptAccount 監聽埠佇列最大數,滿了之后客戶請求會被拒絕(不能小于maxSpareThreads )
connectionTimeout 連接超時定義建立客戶連接超時的時間. 如果為 -1, 表示不限制建立客戶連接的時間
minProcessors 服務器創建時的最小處理執行緒數
maxProcessors 服務器同時最大處理執行緒數
URIEncoding URL統一編碼
compression 打開壓縮功能
compressionMinSize 啟用壓縮的輸出內容大小,這里面默認為2KB
compressableMimeType 壓縮型別

命令優化

常見虛擬機配置命令含義
-Xmx1024m:設定JVM最大可用記憶體為1024M
-Xms1024m:  初始堆記憶體大小,此值可以設定與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配記憶體,
-Xmn800m:設定年輕代大小為800M整個JVM記憶體大小=年輕代大小 + 年老代大小 + 持久代大小
-Xss1m: jdk堆疊大小
-XX:MetaspaceSize  首次觸發GC記憶體閾值,Meta區容量范圍為[20.8m, MaxMetaspaceSize),建議設定與MaxMetaspaceSize一致避免頻繁GC
XX:MaxMetaspaceSize 最大GC記憶體觸發值

在windows系統下需要優化catalina.sh,在linux系統下需要優化catalina.bat

優化catalina.sh
JAVA_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=512m -Xms1024m -Xmx1024m"

在這里插入圖片描述

圖形優化

在linux環境中,由于對圖形處理如果出現例外,驗證碼無法正常顯示,
在這里插入圖片描述
需要在catalina.sh中追加以下內容

JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"

在這里插入圖片描述

startup.sh 和 shutdown.sh 優化

在 startup.sh 和 shutdown.sh 的最后追加下面的內容,指定tomcat運行的jdk環境,適用于一個系統有多個jdk存在的情況,

export JDK8=/usr/local/jdk/jdk1.8.0_191
export JAVA_HOME=${JDK8}
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

在這里插入圖片描述
其他幾個tomcat按照配置方法和優化思路逐步照做即可,

警告處理

小猿在關閉tomcat的程序中遇到入戲警告,大概意思是說jdk1.8已經不支持PermSize MaxPermSize的設定操作,因此需要重新設定
在這里插入圖片描述
修改catalina.sh 中的優化配置

JAVA_OPTS="-server  -Xmx1024m  -Xss1m   -Xms1024m   -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m"

在這里插入圖片描述

處理效果

在這里插入圖片描述
結果處理完美

部署結果

服務啟動情況

server1

在這里插入圖片描述

server2

在這里插入圖片描述

首頁

在這里插入圖片描述

platform

在這里插入圖片描述
在這里插入圖片描述

carrier

在這里插入圖片描述

customer

在這里插入圖片描述
至此所有的部署作業和筆記作業圓滿完成,期望讀者們能從小猿的文章中有所識訓,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/337663.html

標籤:其他

上一篇:helm入門

下一篇:4個nginx組件助你豐富簡歷,增加面試談資

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more