Nginx與Tomcat/PHP架構優化的技術分享

PHP性能優化php

通常咱們是在/usr/local/php5/etc/php-fpm.conf這個文件裏面進行相應的配置。nginx

1)       若是設置成static,php-fpm進程數自始至終都是pm.max_children指定的數量,再也不增長或減小。web

2)       若是設置成dynamic,則php-fpm進程數是動態的,最開始是pm.start_servers指定的數量,若是請求較多,則會自動增長,保證空閒的進程數不小於pm.min_spare_servers,若是進程數較多,也會進行相應清理,保證多餘的進程數很少於pm.max_spare_servers。apache

這兩種不一樣的進程管理方式,能夠根據服務器的實際需求來進行調整。tomcat

這裏先說一下涉及到這個的幾個參數,他們分別是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。性能優化

Pm 表示使用那種方式,有兩個值能夠選擇,就是static(靜態)或者dynamic(動態)。在更老一些的版本中,dynamic被稱做apache-like。這個要注意看配置文件的說明。服務器

下面4個參數的含義:併發

pm.max_children:靜態方式下開啓的php-fpm進程數量。less

pm.start_servers:動態方式下的起始php-fpm進程數量。socket

pm.min_spare_servers:動態方式下的最小php-fpm進程數量。

pm.max_spare_servers:動態方式下的最大php-fpm進程數量。

若是dm設置爲static,那麼其實只有pm.max_children這個參數生效。系統會開啓設置數量的php-fpm進程。

若是dm設置爲dynamic,那麼pm.max_children參數失效,後面3個參數生效。系統會在php-fpm運行開始的時候啓動pm.start_servers個php-fpm進程,而後根據系統的需求動態在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm進程數。

其餘優化方法:

1. Compile PHP’s modules as less as possible, the simple the best (fast);

儘可能少安裝PHP模塊,最簡單是最好(快)的

2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);

2G把你的PHP FastCGI子進程數調到100或以上,在4G內存的服務器上200就能夠(建議壓力測試來得出本身服務器合理的值)

3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;

socket鏈接FastCGI,/dev/shm是內存文件系統,socket放在內存中確定會快些

4. Increase Linux 「max open files」, using the following command (must be root):

Linux下增長文件打開數,命令以下:

cat >> /etc/security/limits.conf <<EOF

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

EOF

5. Increase PHP-FPM open file description rlimit:

增長 PHP-FPM 打開文件描述符的限制:

# vi $php_install_dir/etc/php-fpm.conf

rlimit_files = 51200

6. Using PHP code accelerator, e.g eAccelerator, XCache. And set 「cache_dir」 to /dev/shm on Linux.

使用php代碼加速器,例如 eAccelerator, XCache、APC在Linux平臺上能夠把`cache_dir`指向 /dev/shm

/usr/local/php/etc/php-fpm.conf重要優化參數詳解:

pm = dynamic

pm參數指定了進程管理方式,有兩種可供選擇:static或dynamic,從字面意思不難理解,爲靜態或動態方式。若是是靜態方式,那麼在php-fpm啓動的時候就建立了指定數目的進程,在運行過程當中不會再有變化(並非真的就永遠不變);

而動態的則在運行過程當中動態調整,固然並非無限制的建立新進程,受pm.max_spare_servers參數影響;動態適合小內存機器,靈活分配進程,省內存。靜態適用於大內存機器,動態建立回收進程對服務器資源也是一種消耗。

通常php-fpm進程佔用20~30m左右的內存就按30m算。若是單獨跑php-fpm,動態方式起始值可設置物理內存Mem/30M,因爲你們通常Nginx、MySQL都在一臺機器上,因而預留一半給它們,即php-fpm進程數爲$Mem/2/30。

給一個理論值:

pm = dynamic

pm.max_children =80

pm.start_servers = 12

pm.min_spare_servers = 4

pm.max_spare_servers = 20

rlimit_files = 65535

pm.max_requests = 102400

Tomcat性能優化

線上環境使用默認tomcat配置文件,性能很通常,爲了知足大量用戶的訪問,須要對tomcat進行參數性能優化,具體優化的地方以下:

  • Linux內核的優化
  • 服務器資源配置的優化
  • Tomcat參數優化
  • 配置負載集羣優化

這裏着重講解tomcat參數的優化:server.xml文件,關閉DNS查詢、配置最大併發等參數。

maxThreads:tomcat起動的最大線程數,即同時處理的任務個數,默認值爲200

acceptCount:當tomcat起動的線程數達到最大時,接受排隊的請求個數,默認值爲100

固然這些值都不是越大越好,須要根據實際狀況來設定。能夠基於測試的基礎上來不斷的調優分析。

<Connector port="8080"  

protocol="org.apache.coyote.http11.Http11NioProtocol" 

           connectionTimeout="20000" 

           redirectPort="8443"  

           maxThreads="5000"  

           minSpareThreads="20" 

           acceptCount="1000"

           disableUploadTimeout="true"

           enableLookups="false"  

           URIEncoding="UTF-8" />

catalina.sh JVM參數優化,添加以下內容:

CATALINA_OPTS="$CATALINA_OPTS -Xms4000M -Xmx4000M -Xmn1000M -XX:SurvivorRatio=4 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=82 -DLOCALE=UTF-16LE  -DRAMDISK=/ -DUSE_RAM_DISK=ture -DRAM_DISK=true"

配置多個tomcat實例,方法也很簡單,只須要在服務器上cp多個tomcat,而後修改三個端口和發佈目錄便可,而後分別啓動便可。

爲了提高整個網站的性能,還須要在tomcat前面架設nginx web反向代理服務器,用以提升用戶高速訪問。

相關文章
相關標籤/搜索