最近部署了一個房地產(chǎn)的活動推廣水孩,通過砸金蛋的方式派發(fā)獎品吸引用戶去售樓部看房镰矿。考慮到負載均衡俘种,使用了 nginx + tomcat + mysql 的分離部署方式秤标,阿里云的內(nèi)網(wǎng)流量是免費的绝淡,所以按量付費的情況會比較劃算。下面記錄對nginx苍姜、tomcat的配置優(yōu)化牢酵。
tomcat:
tomcat默認采用Bio的模式,雖然自帶有Nio衙猪,但是性能提升不明顯馍乙,使用apr庫性能提升更大,所以我們將:1 下載tomcat屈嗤,2 安裝apr庫潘拨,3 安裝tomcat-native (利用 APR 來提升Tomcat性能的本地API)1. 下載tomcat:我比較喜歡把應用放在/opt 目錄下 進入 opt 目錄吊输,下載tomcat8(tomcat官網(wǎng)有下載地址):
cd /opt
mkdir install
cd /opt/install
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.39/bin/apache-tomcat-8.0.39.tar.gz
cd /opt
tar zxvf /opt/install/apache-tomcat-8.0.39.tar.gz
# 創(chuàng)建一個install目錄饶号,用來放安裝過程中的一些文件,看個人喜好季蚂。
2. 安裝apr庫:http://apr.apache.org/download.cgi這里去下載茫船,會有三個包需要安裝:
APR主庫:
cd /opt/install
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.5.2.tar.gz
tar zxvf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/usr/local/apr
make
sudo make install
# 工具類都裝到 /usr/local 符合傳統(tǒng),我會把常用的放到 /opt 下扭屁,看個人習慣吧
APR iconv:
cd /opt/install
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-iconv-1.2.1.tar.gz
tar zxvf apr-iconv-1.2.1.tar.gz
cd apr-iconv-1.2.1
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make
sudo make install
APR-util:
cd /opt/install
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.5.4.tar.gz
tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --with-apr=/usr/local/apr
make
sudo make install
# 我都是把下載到包和安裝過程中編譯到東西統(tǒng)一放到了 /opt/install 目錄算谈,看個人喜好。
安裝好了后料滥,在系統(tǒng)變量中添加然眼,然后 source /etc/profile 使變量生效:
vim /etc/profile
末尾添加:export LD_LIBRARY_PATH=/usr/local/apr/lib
source /etc/profile
3. 安裝Tomcat Native 來調(diào)用apr庫,提升tomcat性能葵腹,需要使用 openssl 1.0.2 以上版本(通過命令 openssl version 查看版本來決定是否安裝openssl:
openssl:https://www.openssl.org/source/
cd /opt/install
wget https://www.openssl.org/source/openssl-1.1.0c.tar.gz
tar zxvf openssl-1.1.0c.tar.gz
cd openssl-1.1.0c
./config --prefix=/usr/local/openssl -fPIC
make
sudo make install
mv /usr/bin/openssl ~
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
openssl version
# -fPIC 參數(shù)請自行百度高每, install 后是為了更新軟鏈
Tomcat Native:http://tomcat.apache.org/download-native.cgi
cd /opt/install
wget http://mirrors.cnnic.cn/apache/tomcat/tomcat-connectors/native/1.2.10/source/tomcat-native-1.2.10-src.tar.gz
tar zxvf tomcat-native-1.2.10-src.tar.gz
cd tomcat-native-1.2.10-src/native
./configure --with-apr=/usr/local/apr --with-ssl=/usr/local/openssl
make
sudo make install
tomcat 所依賴的庫安裝完畢,現(xiàn)在設置tomcat的配置文件:
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="500"
minSpareThreads="20"
acceptCount="300"
disableUploadTimeout="true"
enableLookups="false"
URIEncoding="UTF-8" />
unpackWARs="true" autoDeploy="true">
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
tomcat 的配置文件就是這樣践宴,可以查詢每項的意義自己調(diào)整鲸匿。tomcat最主要的優(yōu)化在于JVM 的設置,這篇文章Linux中JDK安裝:通過命令行安裝和手動安裝手動安裝的方式阻肩,環(huán)境變量中的 JAVA_OPTS 進行設置带欢,本次優(yōu)化后的環(huán)境變量:(記得 source /etc/profile 使其生效)
export JAVA_HOME=/usr/local/java/jdk1.8.0_112
export JAVA_OPTS="-server -Xms1024m -Xmx3072m"
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CATALINA_HOME=/opt/tomcat
export LD_LIBRARY_PATH=/usr/local/apr/lib
nginx:
nginx需要安裝最新的穩(wěn)定版,安裝請參考之前的文章烤惊,因為我們tomcat會采用 Bio乔煞、Nio、Apr柒室,所以需要升級openssl到更新版本瘤缩,記得先裝新版本的openssl(參考上面tomcat部分),在安裝依賴庫的時候 注意不要再安裝 openssl 了伦泥!之前的這篇文章Ubuntu 中源碼安裝Nginx剥啤,好了 nginx 也裝好了锦溪,其調(diào)優(yōu)的配置文件:
worker_processes 2;# 系統(tǒng)有幾個核心就設置為多少
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_min_length 10240;
upstream servers {
server 127.0.0.1:8080 fail_timeout=0;
}
server {
listen 80;
server_name xxxxxx.com;
location ~ .*\.(gif|jpg|jpeg|png|ico|swf)$ {
root /opt/webapps/zjd/asset/static;
expires 30d;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_connect_timeout 240;
proxy_send_timeout 240;
proxy_read_timeout 240;
proxy_pass http://servers;
}
error_page 400 500 /opt/tomcat/webapps/zjd/asset/views/error.html;
}
}
項目打包上傳就開始運行了,兩核4G內(nèi)存府怯,完全無壓力刻诊,內(nèi)存最高才到 37%,cpu 就沒上過15%牺丙。则涯。。剛開始就這么大人同時砸(因為開始時間是定好了的冲簿,所以一開始的壓力最大)后臺數(shù)據(jù):
代碼上的反思:
改動很小的(基本上不改變)要使用緩存粟判,開發(fā)時就要想到這點,架構上就引入緩存峦剔,或者部署上線前要對這塊進行優(yōu)化档礁,重復讀取是不可取的。
單一職責吝沫,本次上線后分析日志呻澜,發(fā)現(xiàn)有一個請求速度很慢,跟蹤發(fā)現(xiàn)調(diào)用了后臺管理員才會使用的復雜sql惨险,而這是因為service層把該方法封裝得太大羹幸,名字取得范圍就很大,導致在用戶端竟然調(diào)用了它(全部代碼是我寫的情況下都發(fā)生這種情況...團隊開發(fā)的情況就可想而知)辫愉。
個人博客上代碼布局更合理栅受,地址:http://jovi.me/archives/1710-12211.html