「黑馬程序員成都中心」關於Nginx+tomcat服務器配置性能調優


前言

在項目功能完成後,項目部署到服務器是非常重要的一環。

而在部署過程中將各個參數調整對於性能的提升是非常明顯的。這樣既可以節約硬件成本,又可以將相應時間縮短,又可以提高服務器的穩定性,可謂是一舉三得。

服務器的優化是非常複雜的過程,主要是幾個方面,服務器的安全提升、服務器的性能調優等等。

單說性能優化,這關乎到語言的選擇,框架的選擇,服務器(linux/freebsd)等等的選擇,而我們學習的是java語言,我們知道,單點tomcat在不使用nginx的情況下,能承載的最多也就是200-300的併發量,而加上了nginx之後,能大幅度提升服務器的併發承載量,不僅僅是因為nginx可以做負載均衡(load-banlance),更重要的是nginx可以讓請求進行排隊,而不是將壓力賦予給tomcat,這樣tomcat可以更加專注地完成業務操作,從而提高性能。

今天我們就來講講服務器最基本的參數調整提高服務器的性能– tomcat+nginx

服務器的選擇

首先,我們來分析一下服務器的選擇,看一看大公司是使用什麼系統來進行部署,

好的操作系統能提高好的性能、穩定性和安全性,而這些對大型網站的性能、安全性和穩定性都是至關重要的。

淘寶網(阿里巴巴): Linux操作系統 + Web 服務器:Apache

新浪:FreeBSD + Web 服務器:Apache

Yahoo:FreeBSD + Web 服務器:自己的

Google: 部分Linux + Web 服務器:自己的

百度:Linux + Web 服務器: Apache

網易:Linux + Web 服務器: Apache

eBay: Windows Server 2003/8 (大量) + Web 服務器:Microsoft IIS

MySpace: Windows Server 2003/8 + Web 服務器:Microsoft IIS

由此可見,開源操作系統做Web應用是首選已經是一個既定事實。在開源操作系統中Linux和FreeBSD差不太多,很難說哪個一定比另外一個要優秀很多、能夠全面的超越對手,應該是各有所長。但熟悉Linux的技術人員更多些,利於系統管理、優化等,所以Linux使用更廣泛。而Windows Server和IIS雖然有的網站使用,但不開源,而且需要購買微軟的一系列應用產品,限制了其使用。總之,開源操作系統,尤其是Linux做Web應用是首選已經是一個既定事實。

雖然對linux服務器的優化也特別重要,今天我們不重要講系統的優化,主要講部署軟件參數的優化

Nginx優化

進程數的優化

一般nginx中,進程數一般設置為服務器cpu核數的倍數,例如:CPU為雙核,則設置進程數目為4或者8,每個nginx進程消耗的內存10兆的模樣

worker_processes 8;

將進程分配給制定CPU

假如是8核 cpu 分配如下:

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000

00100000 01000000 10000000

Nginx最大打開文件數

當使用linux時,最大文件打開數是有限制的。在linux中可使用ulimit –n來查看最大文件打開數,一般設置值為系統最大文件打開數除以最大進程數,但是大多數都是除不盡,導致資源分配不均勻,所以最好與最大進程數一致

worker_rlimit_nofile 655350;

use epoll;

使用epoll 的I/O 模型

補充說明:

與apache相類,nginx針對不同的操作系統,有不同的事件模型

A)標準事件模型

Select、poll屬於標準事件模型,如果當前系統不存在更有效的方法,nginx會選擇select或poll

B)高效事件模型

Kqueue:使用於 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD2.0 和 MacOSX. 使用雙處理器的MacOSX系統使用kqueue可能會造成內核崩潰。

Epoll: 使用於Linux內核2.6版本及以後的系統。

/dev/poll:使用於 Solaris 7 11/99+, HP/UX 11.22+(eventport), IRIX 6.5.15+ 和 Tru64UNIX 5.1A+。

Eventport:使用於 Solaris 10. 為了防止出現內核崩潰的問題,有必要安裝安全補丁。

最大連接數

每個進程允許的最多連接數,理論上每臺nginx服務器的最大連接數為worker_processes*worker_connections。

worker_connections 655350;

超時時間

設置超時時間,使用 keepalive_timeout 90;

客戶端請求頭部緩衝區大小

客戶端請求頭部的緩衝區大小,這個可以根據你的系統分頁大小來設置,一般一個請求頭的大小不會超過1k,不過由於一般系統分頁都要大於1k,所以這裡設置為分頁大小。

在Linux中,使用getconf PAGESIZE 來獲得,並設置給nginx

client_header_buffer_size4k;

打開文件緩存大小

這個默認是沒有開啟的,此參數將為打開文件指定緩存大小

open_file_cachemax=65535 inactive=60s;

open_file_cachemax為最大緩存大小,inactive為緩存多久沒使用就進行回收

檢查緩存有效信息時間

open_file_cache_valid80s;

open_file_cache_min_uses1;

open_file_cache 指令中的inactive參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive時間內一次沒被使用,它將被移除。

開啟gzip

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.0;

gzip_comp_level 2;

gzip_types text/plain application/x-javascript text/css

application/xml;

gzip_vary on;

緩存靜態文件

緩存靜態文件:

location ~* ^.+\.(swf|gif|png|jpg|js|css)$ {

root /usr/local/ku6/ktv/show.ku6.com/;

expires 1m;}

Tomcat性能優化

1、 最大連接數最大線程等設置

修改server.xml

maxThreads:Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創建的最大的線程數。

acceptCount:指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。

connnectionTimeout:網絡連接超時,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通常可設置為30000毫秒。

minSpareThreads:Tomcat初始化時創建的線程數。

maxSpareThreads:一旦創建的線程超過這個值,Tomcat就會關閉不再需要的socket線程

修改後示例:

useBodyEncodingForURI="true" enableLookups="false"connectionTimeout="30000"

maxConnections="2000" acceptCount="2000"maxThreads="1500"

minSpareThreads="200" maxSpareThreads="1000"compression="on" compressionMinSize="2048"

noCompressionUserAgents="gozilla, traviata"maxProcessors="1000" minProcessors="5"acceptorThreadCount="10" redirectPort="8443" />

2、 啟動參數設置

修改/bin/catalina.sh,增加如下設置:

JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'

需要把這個兩個參數值調大,大小的可以根據服務器內存的大小進行調整。例如:

JAVA_OPTS='-Xms1024m –Xmx2048m'

我們服務器是8G 內存,跑了3個tomcat服務,給分配了2G的內存。

總結

以上為nginx+tomcat的性能優化參數調整,個人測試8核16G的服務器中,服務器單點原本沒配置優化參數,服務器承載量為1000個併發量,配置成功後,服務器動態併發訪問為3000,靜態資源併發訪問量可達到3500。以此證明參數的配置非常有用,可以提高服務器的穩定性和性能。

但是以上配置非常地片面,具體參數的調整,需要根據服務器的硬件配置來具體調整。

服務器的配置一定是一個靈活的過程,切記不可生搬硬套,只有在多次的壓力測試,得到最佳測試結果數據的情況下才是最好的參數配置,以上參數配置只是大多數情況下的一個參考標準。

「黑馬程序員成都中心」關於Nginx+tomcat服務器配置性能調優


分享到:


相關文章: