linux nginx常見問題及優化,壓力測試,tomcat服務器優化

nginx常見問題javascript

nginx優化
全局配置優化
[root@web2 nginx]# vim conf/nginx.conf
user nobody;
worker_processes 1;(與cpu核心數一致)
worker_rlimit_nofile 3000;(最大打開文件數量)
error_log /var/log/nginx.error_log info;(定義日誌級別)css

注意修改操做系統配置文件
[root@web2]# /etc/security/limits.conf(凡是涉及併發量的配置都要改,不改系統配置,每一個worker最大併發鏈接數是不起做用的)
#<domain> <type> <item> <value>
#
* soft nofile 100000
* hard nofile 100000html

注:
domain:能夠是用戶,也能夠是組
type:能夠是兩個值 一個是soft(軟限制)一個是hard(硬限制)
item:項目控制
value:值,默認值1024java

item項目控制:
core -限制核心文件大小(KB)
data - 最大數據大小(KB)
fsize - 最大文件大小
memlock - 最大鎖定在內存地址空間(KB)
nofile - 最大打開的文件描述符的數目
rss - 最大駐留集大小(KB)
stack - 疊最大堆棧大小(KB)
cpu -CPU最大的CPU時間(分鐘)
nproc -c最大進程數
as - 地址空間的限制(KB)
maxlogins -用戶登陸的最大數量
maxsyslogins -最大登陸系統
priority - 優先級來運行用戶進程
locks - -最大數量的用戶能夠把文件鎖
sigpending -最大數量的待處理的信號
msgqueue - 最大內存使用的POSIX消息隊列(字節)
nice -優先級提升到最大值:[ 20, 19 ]
rtprio -最大實時優先級node

event模塊優化
max_clients=worker_processes * worker_connectionslinux

event{
worker_connections 65536;(每一個worker最大併發鏈接數)
use epoll;
}nginx

http模塊優化
http{
server_tokens off;(不顯示nginx具體版本號)
sendfile on;(提高nginx讀文件性能)
tcp_nodelay on;(關閉tcp延遲發送數據)
keepalive_timeout 10;(保持鏈接的超時時間)
gzip on;(開壓縮)
gzip_min_length 1000;(超過1000個字節以上的頁面才壓縮)
gizp_comp_level 4;(壓縮比例,標準)
gzip_types text/plain text/css application/json application/x-javascript text/
xml application/xml application/xml+rss text/javascript;(對特定的類型壓縮,次類型在/nginx/conf/mime.types裏)
client_header_buffer_size 1k;(存客戶端的頭部信息)
large_client_header_buffers 4 4;(大請求包頭部信息的緩存個數與容量,
先根據client_header_buffer分配,若是不夠,再根據large值分配)
}web

若是須要處理大量靜態文件,
須要保持這些文件局柄爲打開狀態,避免後續再次打開
http{
open_file_cache max=2000 inactive=20s;(設置服務器最大緩存2000個句柄,關閉20秒內無請求的文件句柄)
open_file_cache_valid 60s;(文件句柄的有效時間是60秒,60秒後過時)
open_file_cache_min_user 5;(只有訪問次數超過5次會被緩存)
open_file_cache_errors off;
}算法

客戶端瀏覽器緩存數據
http{
location ~ \.(jpg|jpeg|gif|peng|css|ico|xml){
expires 30d;
}
}
[root@web2 html]# firefox http://192.168.2.200/a.jpg(測試訪問)apache

防盜鏈語句:
location ~ \.(jpg|png|gif){
valid_referers none blocked www.xx.com;
if($invalid_refer){
rewrite ^/ http://www.xx.com/403.html;
}
}
none表示沒有referer,也就是直接訪問,好比直接在瀏覽器打開一個圖片
blocked表示沒有referer,但內容被防火牆或代理刪除
server_name就是最後的域名,可使用*.xx。com來表示二級域名

——————————————————————————————————————————————————————————

經常使用壓力測試工具
ab:
ab -c 併發數 -n 總請求數 url

http_load:
http_load -p 併發數 -s 測試時間 url

webbench:
webbench -c 併發數 -t 測試時間 url

siege:
siege -c 併發數 -r 重複次數 url

——————————————————————————————————————————————————————————

tomcat服務器

tomcat是apache軟件基金會的jakarta項目中的一個核心項目
由apache,sun和其餘一些公司及我的共同開發而成
因爲有了sun的參與和支持,最新的servlet和jsp規範
能夠在tomcat中獲得體現

java servlet
servlet是一種擴展web服務器功能的組件貴伐
爲了不這些侷限性。java servlet技術產生,
他可以以一種可移植的方法來提供動態的,面向用戶的內容
處理用戶請求
當須要實現一個通用的服務時,可使用或擴展有java servlet api
提供genericservlet類
httpservlet類提供額一些方法,諸如doget和dopost,
以用於處理特定於http的服務
web server自己沒有計算能力不能處理動態資源請求
servl能夠處理動態資源請求

常見的servl容器
IBM——》websphere
Oracle——》weblogic
apache——》tomcat
rehat——》jboos
xx——》resin
開發者通常主要開發的是servlet容器中的servlet代碼

jsp
sun首先發展出servlet,其功能比較強勁,體系設計也很先進
但他輸出html語句仍是採用了老的cgi方式,一句一句輸出
因此,編寫和修改html很是不方便
後來sun推出了相似於asp的鑲嵌式的jsp,把jsptag鑲嵌到html語句中
簡化和方便了網頁的設計和修改

——————————————————————————————————————————————
安裝tomcat(須要java環境)
[root@web2 ]# rpm -ivh jdk-8u77-linux-x64.rpm (java環境)
[root@web2 ]# tar apache-tomcat-8.0.30.tar.gz (解tomcat包)
[root@web2 ]# mv apache-tomcat-8.0.30 /usr/local/tomcat(移動到目錄下)
[root@web2 bin]# ./configtest.sh start(啓動腳本,端口爲8080,不會和80端口衝突)

tomcat目錄
lib:庫文件目錄
temp:臨時目錄
work:自動編譯目錄jsp代碼轉換爲service
webapp:頁面目錄

測試訪問:[root@web2 tomcat]# vim webapps/ROOT/test.jsp(在根頁面下寫一個jsp測試)
<html>
<body>
<center>
Now time is:<%=new java.util.Date()%>(java嚴格區分大小寫)
</center>
</body>
</html>
[root@web2 ]# firefox http://127.0.0.1:8080/test.jsp(測試訪問)

tomcat配置文件
[root@web2 tomcat]# ls conf/
server.xml:主配置文件
context.xml:每一個webapp有專有的配置文件,這個爲各webapp提供默認配置
web.xml:全部的webapp提供默認部署相關的配置
tomcat-users.xml:用戶認證的帳號和密碼配置文件
catalina.properties:java屬性的定義文件,用於設定類加載器路徑等
logging.properties:日誌相關配置文件


server.xml主配置文件框架
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>

server.xml框架解析
service是tomcat實例的頂層元素,一個tomcat實例
servlet是一個集合,他由一個或多個connector以及一個engine組成
connector是直接與用戶交互的組件,負責接受用戶請求和向客戶返回響應結果
engine負責處理全部connector所得到的客戶請求,
他處理同一個servlet中全部connector元素接收到的客戶請求
它匹配請求和本身的虛擬主機,並將請求發送給對應的<Host>處理
默認的主機是localhost
一個<engine>元素能夠包含多個<Host>元素,每一個<Host>元素定義一個虛擬主機
它包含多個web應用

servlet.xml
port:指定服務器http端口號
address:指定鏈接器監聽的地址,默認爲全部地址
protocol:鏈接器使用的協議,支持http和ajp
enableLookups:是否查詢客戶端主機名,性能消耗嚴重
connectionTimeout:指定超市時間數
name:主機名
appbase:網站項目根目錄
unpackWARS:是否自動解壓war包
autoDeloy:tomcat啓動時自動部署新項目
docBase:應用程序的路徑或war包項目路徑
path:web應用程序的url訪問路徑


測試:搭建基於域名的虛擬主機
[root@web2 tomcat]# echo "hail hydra!!" > hydra/ROOT/index.html(建立目錄及頁面)
[root@web2 tomcat]# vim conf/server.xml (配置文件)
<Host name="www.hydra.com" appBase="hydra" unpackWARs="true" autoDeploy="true">
</Host>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(中止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(啓動)
[root@web2 bin]# firefox http://www.hydra.com:8080(重啓後測試訪問)

測試給host添加context(appbase定義基礎(根)目錄,,基礎目錄下游不少項目,docbase定義首頁路徑)
[root@web2 tomcat]# echo "hail hydra!!" > hydra/base/index.html(建立目錄及頁面)
[root@web2 tomcat]# vim conf/server.xml
<Host name="www.hydra.com" appBase="hydra" unpackWARs="true" autoDeploy="true">
<Context path=""docBase="base" reloadable="true"/>
</Host>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(中止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(啓動)

測試給host添加context(appbase定義基礎(根)目錄,path指定用戶訪問的url,docbase指定頁面存儲位置)
[root@web2 tomcat]# mkdir -p /var/www/html(建立目錄及頁面)
[root@web2 tomcat]# echo "hail hydra!!" > /var/www/html/index.html
[root@web2 tomcat]# vim conf/server.xml
<Host name="www.hydra.com" appBase="hydra" unpackWARs="true" autoDeploy="true">
<Context path="/hydra" docBase="/var/www/html/"/>
</Host>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(中止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(啓動)

————————————————————————————————————————————————————————————————————————————

加密站點
[root@web2 tomcat]# mkdir ssl
[root@web2 tomcat]# keytool -genkeypair -alias tomcat -keyalg RSA -keystore /usr/local/tomcat/ssl/keystore(生成RSA加密算法的密鑰對,保存在路勁下)
輸入密鑰庫口令: 123456

修改servlet.xml配置文件
[root@web2 tomcat]# keytool -help(獲取全部可用命令)
[root@web2 tomcat]# vim conf/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"(監聽8443端口)
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"(最大150個進程,頭部信息https,容許加密,走tls路線)
keystoreFile="/usr/local/tomcat/ssl/keystore" keystorePass=123456(密鑰文件路徑,密鑰須要輸入密碼,寫上生成時的密碼就能夠)
clientAuth="false" sslProtocol="TLS" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(中止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(啓動)

——————————————————————————————————————————————————————————————————————————————

tomca優化

jvm優化
[root@web2 tomcat]# vim bin/catalina.sh
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m"
server:服務器模式運行
Xms:java虛擬機初始化時的最小內存
Xmx:java虛擬機可以使用的最大內存

併發量優化
修改connector屬性
[root@web2 tomcat]#[root@web2 tomcat]# vim conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="1000"(客戶請求最大線程)
minSpareThreads="100"(最小空閒進程)
maxSpareThreads="1000"(最大空閒線程)
enableLookups="false"
URIEncoding="utf-8"
acceptCount="1000"(監聽端口隊列最大數)
/>
[root@web2 bin]# /usr/local/tomcat/bin/shutdown.sh stop(中止)
[root@web2 bin]# /usr/local/tomcat/bin/startup.sh start(啓動)

——————————————————————————————————————————————————————————————————————

相關文章
相關標籤/搜索