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進行參數性能優化,具體優化的地方以下:
這裏着重講解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反向代理服務器,用以提升用戶高速訪問。