從事php開(kāi)發(fā)的都知道,LNMP一般是指linux+Nginx+MySQL+PHP組合傻谁,也是日常開(kāi)發(fā)和線上環(huán)境中最簡(jiǎn)單的Web服務(wù)器架構(gòu)书劝。為盡可能的提升服務(wù)器響應(yīng)速度,LNMP的配置優(yōu)化是十分關(guān)鍵的步驟咐容。下面分別總結(jié)一下LNMP各組件的配置優(yōu)化方法舆逃。
Linux
關(guān)于Linux優(yōu)化,我們這次主要從內(nèi)核配置方面去講(硬件優(yōu)化增加投入即可)戳粒。內(nèi)核配置優(yōu)化主要圍繞如何提供更好更穩(wěn)定的TCP/IP服務(wù)為主路狮,可以查看這篇文章:從TCP/IP協(xié)議談Linux內(nèi)核參數(shù)優(yōu)化, 這里不在單獨(dú)寫(xiě)了蔚约。
工作進(jìn)程數(shù)量
Nginx運(yùn)行工作進(jìn)程個(gè)數(shù)奄妨,建議按照cpu 數(shù)目來(lái)指定,一般為它的倍數(shù) (如,2個(gè)四核的cpu計(jì)為8)苹祟。
<pre>worker_processes 8;
</pre>
CPU親和力
worker_cpu_affinity 為每個(gè)進(jìn)程分配cpu砸抛,一般情況下一個(gè)進(jìn)程分配一個(gè)cpu评雌,例如8cpu:
<pre>worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000直焙;
</pre>
最大打開(kāi)文件數(shù)
<pre>worker_rlimit_nofile 65535;
</pre>
這個(gè)指令是指當(dāng)一個(gè)nginx進(jìn)程打開(kāi)的最多文件描述符數(shù)目景东,理論值應(yīng)該是最多打開(kāi)文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻奔誓,所以最好與ulimit -n的值保持一致斤吐。
注:文件資源限制的配置可以在/etc/security/limits.conf設(shè)置,針對(duì)root/user等各個(gè)用戶(hù)或者*代表所有用戶(hù)來(lái)設(shè)置厨喂。
<pre>* soft nofile 65535
- hard nofile 65535
</pre>
用戶(hù)重新登錄生效和措。
Nginx事件處理模型
<pre>events {
use epoll;
}
</pre>
nginx采用epoll事件模型蜕煌,處理效率高派阱。
工作進(jìn)程連結(jié)束
<pre>worker_connections 65535;
</pre>
設(shè)置每個(gè)進(jìn)程允許的最多連接數(shù), 理論上每臺(tái)nginx 服務(wù)器的最大連接數(shù)為worker_processes*worker_connections斜纪,一般設(shè)置為65535贫母。
開(kāi)啟Gzip壓縮
使用gzip壓縮功能,可能為節(jié)約帶寬傀广,加快傳輸速度颁独。
一般我們需要壓縮的內(nèi)容有:文本,js伪冰,html誓酒,css,對(duì)于圖片贮聂,視頻靠柑,flash什么的不壓縮,使用gzip的功能是需要消耗CPU的吓懈。
<pre>gzip on;
gzip_min_length 2k;
gzip_buffers 4 32k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_typestext/plain text/css text/JAVAscriptApplication/json application/JavaScript application/x-javascriptapplication/xml;
gzip_vary on;
gzip_proxied any;
gzip on; #開(kāi)啟壓縮功能
</pre>
參數(shù)說(shuō)明:
- gzip_min_length 1k :設(shè)置允許壓縮的頁(yè)面最小字節(jié)數(shù)歼冰,頁(yè)面字節(jié)數(shù)從header頭的Content-Length中獲取,默認(rèn)值是0耻警,不管頁(yè)面多大都進(jìn)行壓縮隔嫡,建議設(shè)置成大于1K,如果小與1K可能會(huì)越壓越大甘穿。
- gzip_buffers 4 32k :壓縮緩沖區(qū)大小腮恩,表示申請(qǐng)4個(gè)單位為32K的內(nèi)存作為壓縮結(jié)果流緩存,默認(rèn)值是申請(qǐng)與原始數(shù)據(jù)大小相同的內(nèi)存空間來(lái)存儲(chǔ)gzip壓縮結(jié)果温兼。
- gzip_http_version 1.1 :壓縮版本秸滴,用于設(shè)置識(shí)別HTTP協(xié)議版本,默認(rèn)是1.1募判,目前大部分瀏覽器已經(jīng)支持GZIP解壓荡含,使用默認(rèn)即可咒唆。
- gzip_comp_level 6 :壓縮比例,用來(lái)指定GZIP壓縮比释液,1壓縮比最小全释,處理速度最快,9壓縮比最大均澳,傳輸速度快恨溜,但是處理慢,也比較消耗CPU資源找前。
- gzip_types text/css text/xml application/javascript :用來(lái)指定壓縮的類(lèi)型,‘text/html’類(lèi)型總是會(huì)被壓縮判族。默認(rèn)值: gzip_types text/html (默認(rèn)不對(duì)js/css文件進(jìn)行壓縮)
- 壓縮類(lèi)型躺盛,匹配MIME型進(jìn)行壓縮;
- 不能用通配符 text/*形帮;
- text/html默認(rèn)已經(jīng)壓縮 (無(wú)論是否指定)槽惫;
- 設(shè)置哪壓縮種文本文件可參考 conf/mime.types。
- gzip_vary on :varyheader支持辩撑,改選項(xiàng)可以讓前端的緩存服務(wù)器緩存經(jīng)過(guò)GZIP壓縮的頁(yè)面界斜,例如用Squid緩存經(jīng)過(guò)nginx壓縮的數(shù)據(jù)。
連接超時(shí)設(shè)置
<pre>keepalived_timeout 65;
client_header_timeout 30;
client_body_timeout 30;
sned_timeout 60;
proxy_send_timeout 300合冀;
reset_timedout_connection on;
</pre>
參數(shù)說(shuō)明:
- keepalived_timeout :客戶(hù)端連接保持會(huì)話(huà)超時(shí)時(shí)間各薇,超過(guò)這個(gè)時(shí)間,服務(wù)器斷開(kāi)這個(gè)鏈接君躺,對(duì)于一些請(qǐng)求比較大的內(nèi)部服務(wù)器通訊的場(chǎng)景,適當(dāng)加大為120s或者300s,具體根據(jù)不同場(chǎng)景峭判,默認(rèn)值是60秒。
- client_header_timeout : 客戶(hù)端向服務(wù)器發(fā)送一個(gè)完整的request header的超時(shí)時(shí)間棕叫,如果客戶(hù)端在此時(shí)間內(nèi)沒(méi)有發(fā)送一個(gè)完整的request header林螃,那么Nginx返回HTTP 408錯(cuò)誤(Request Timed Out),默認(rèn)值是60秒俺泣。
- client_body_timeout: 客戶(hù)端與服務(wù)器建立連接后發(fā)送request body的超時(shí)時(shí)間疗认,如果客戶(hù)端在此時(shí)間內(nèi)沒(méi)有發(fā)送任何內(nèi)容,那么Nginx返回HTTP 408錯(cuò)誤(Request Timed Out),默認(rèn)值是60秒伏钠。
- reset_timeout_connection :告訴nginx關(guān)閉不響應(yīng)的客戶(hù)端連接横漏。這將會(huì)釋放那個(gè)客戶(hù)端所占有的內(nèi)存空間。
- send_timeout :發(fā)送數(shù)據(jù)至客戶(hù)端超時(shí)時(shí)間贝润,默認(rèn)60s,如果連續(xù)的60s內(nèi)客戶(hù)端沒(méi)有收到1個(gè)字節(jié),連接關(guān)閉绊茧。
- proxy_send_timeout:發(fā)送請(qǐng)求給upstream服務(wù)器的超時(shí)時(shí)間,超時(shí)設(shè)置不是整個(gè)發(fā)送期間, 而是在兩次write操作期間, 如果超時(shí)后,upstream沒(méi)有收到新的數(shù)據(jù),nginx會(huì)關(guān)閉連接打掘。
Buffer緩解后端的負(fù)載
在大部分場(chǎng)景下华畏,利用 Nginx 的 buffer(緩沖) 和 cache(緩存) 能力鹏秋,可以大大地減輕負(fù)擔(dān)。
<pre>client_body_buffer_size 16K
client_header_buffer_size 1K
</pre>
- client_body_buffer_size:允許客戶(hù)端請(qǐng)求的最大單個(gè)文件字節(jié)數(shù),在32位系統(tǒng)上默認(rèn)是8k亡笑,在64位系統(tǒng)上默認(rèn)是16k侣夷。可以在http, server 和 location模塊中指定
- client_header_buffer_size:用于設(shè)置客戶(hù)端請(qǐng)求的Header頭緩沖區(qū)大小仑乌,大部分情況1KB大小足夠百拓, 默認(rèn)的值是1k
開(kāi)啟高效傳輸模式
<pre>http {
include mime.types;
default_type application/octet-stream;
……
sendfile on;
tcp_nopush on;
……
}
</pre>
- sendfile on:開(kāi)啟高效文件傳輸模式,sendfile指令指定nginx是否調(diào)用sendfile函數(shù)來(lái)輸出文件晰甚,對(duì)于普通應(yīng)用設(shè)為 on衙传,如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用,可設(shè)置為off厕九,以平衡磁盤(pán)與網(wǎng)絡(luò)I/O處理速度蓖捶,降低系統(tǒng)的負(fù)載。注意:如果圖片顯示不正常把這個(gè)改成off扁远。
- tcp_nopush on:必須在sendfile開(kāi)啟模式才有效俊鱼,防止網(wǎng)路阻塞,積極的減少網(wǎng)絡(luò)報(bào)文段的數(shù)量(將響應(yīng)頭和正文的開(kāi)始部分一起發(fā)送畅买,而不一個(gè)接一個(gè)的發(fā)送并闲。)
expires 緩存調(diào)優(yōu)
緩存,主要針對(duì)于圖片谷羞,css帝火,js等元素更改機(jī)會(huì)比較少的情況下使用,特別是圖片洒宝,占用帶寬大购公,我們完全可以設(shè)置圖片在瀏覽器本地緩存365d,css雁歌,js宏浩,html可以緩存?zhèn)€10來(lái)天,這樣用戶(hù)第一次打開(kāi)加載慢一點(diǎn)靠瞎,第二次比庄,就非常快了乏盐!緩存的時(shí)候佳窑,我們需要將需要緩存的拓展名列出來(lái), Expires緩存配置在server字段里面父能。
<pre>location ~* .(ico|jpe?g|gif|png|bmp|swf|flv) {
expires 7d;
}
</pre>
fastcgi 調(diào)優(yōu)
<pre>fastcgi_connect_timeout 600;
fastcgi_send_timeout 600;
fastcgi_read_timeout 600;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
fastcgi_temp_path/usr/local/nginx1.10/nginx_tmp;
fastcgi_intercept_errors on;
fastcgi_cache_path/usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g;
</pre>
- fastcgi_connect_timeout 600 :指定連接到后端FastCGI的超時(shí)時(shí)間梅鹦。
- fastcgi_send_timeout 600 :向FastCGI傳送請(qǐng)求的超時(shí)時(shí)間紊浩。
- fastcgi_read_timeout 600 :指定接收FastCGI應(yīng)答的超時(shí)時(shí)間俄删。
- fastcgi_buffer_size 64k :指定讀取FastCGI應(yīng)答第一部分需要用多大的緩沖區(qū),默認(rèn)的緩沖區(qū)大小為鹃唯。fastcgi_buffers指令中的每塊大小,可以將這個(gè)值設(shè)置更小瓣喊。
- fastcgi_buffers 4 64k :指定本地需要用多少和多大的緩沖區(qū)來(lái)緩沖FastCGI的應(yīng)答請(qǐng)求坡慌,如果一個(gè)php腳本所產(chǎn)生的頁(yè)面大小為256KB,那么會(huì)分配4個(gè)64KB的緩沖區(qū)來(lái)緩存藻三,如果頁(yè)面大小大于256KB洪橘,那么大于256KB的部分會(huì)緩存到fastcgi_temp_path指定的路徑中,但是這并不是好方法棵帽,因?yàn)閮?nèi)存中的數(shù)據(jù)處理速度要快于磁盤(pán)熄求。一般這個(gè)值應(yīng)該為站點(diǎn)中php腳本所產(chǎn)生的頁(yè)面大小的中間值,如果站點(diǎn)大部分腳本所產(chǎn)生的頁(yè)面大小為256KB逗概,那么可以把這個(gè)值設(shè)置為“8 32K”抡四、“4 64k”等。
- fastcgi_busy_buffers_size 128k :建議設(shè)置為fastcgi_buffers的兩倍仗谆,繁忙時(shí)候的buffer。
- fastcgi_temp_file_write_size 128k :在寫(xiě)入fastcgi_temp_path時(shí)將用多大的數(shù)據(jù)塊淑履,默認(rèn)值是fastcgi_buffers的兩倍隶垮,該數(shù)值設(shè)置小時(shí)若負(fù)載上來(lái)時(shí)可能報(bào)502BadGateway。
- fastcgi_temp_path :緩存臨時(shí)目錄秘噪。
- fastcgi_intercept_errors on :這個(gè)指令指定是否傳遞4xx和5xx錯(cuò)誤信息到客戶(hù)端狸吞,或者允許nginx使用error_page處理錯(cuò)誤信息。注:靜態(tài)文件不存在會(huì)返回404頁(yè)面指煎,但是php頁(yè)面則返回空白頁(yè)蹋偏!
- fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cachelevels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g :fastcgi_cache緩存目錄,可以設(shè)置目錄層級(jí)至壤,比如1:2會(huì)生成16*256個(gè)子目錄威始,cache_fastcgi是這個(gè)緩存空間的名字,cache是用多少內(nèi)存(這樣熱門(mén)的內(nèi)容nginx直接放內(nèi)存像街,提高訪問(wèn)速度)黎棠,inactive表示默認(rèn)失效時(shí)間,如果緩存數(shù)據(jù)在失效時(shí)間內(nèi)沒(méi)有被訪問(wèn),將被刪除镰绎,max_size表示最多用多少硬盤(pán)空間脓斩。
- fastcgi_cache cache_fastcgi :#表示開(kāi)啟FastCGI緩存并為其指定一個(gè)名稱(chēng)。開(kāi)啟緩存非常有用畴栖,可以有效降低CPU的負(fù)載随静,并且防止502的錯(cuò)誤放生。cache_fastcgi為proxy_cache_path指令創(chuàng)建的緩存區(qū)名稱(chēng)吗讶。
- fastcgi_cache_valid 200 302 1h :#用來(lái)指定應(yīng)答代碼的緩存時(shí)間燎猛,實(shí)例中的值表示將200和302應(yīng)答緩存一小時(shí)恋捆,要和fastcgi_cache配合使用。
- fastcgi_cache_valid 301 1d :將301應(yīng)答緩存一天扛门。
- fastcgi_cache_valid any 1m :將其他應(yīng)答緩存為1分鐘鸠信。
- fastcgi_cache_min_uses 1 :該指令用于設(shè)置經(jīng)過(guò)多少次請(qǐng)求的相同URL將被緩存。
- fastcgi_cache_key http://request_uri :該指令用來(lái)設(shè)置web緩存的Key值,nginx根據(jù)Key值md5哈希存儲(chǔ).一般根據(jù)request_uri(請(qǐng)求的路徑)等變量組合成proxy_cache_key 星立。
- fastcgi_pass :指定FastCGI服務(wù)器監(jiān)聽(tīng)端口與地址,可以是本機(jī)或者其它葬凳。
禁用訪問(wèn)日志文件
這一點(diǎn)影響較大绰垂,因?yàn)楦吡髁空军c(diǎn)上的日志文件涉及大量必須在所有線程之間同步的IO操作。
<pre>access_log off;
log_not_found off;
error_log /var/log/nginx-error.log warn;
</pre>
若你不能關(guān)閉訪問(wèn)日志文件火焰,至少應(yīng)該使用緩沖:
<pre>access_log /var/log/nginx/access.log main buffer=16k;
</pre>
關(guān)閉版本顯示
<pre>server_tokens off;
</pre>
server_tokens并不會(huì)讓nginx執(zhí)行的速度更快劲装,但它可以關(guān)閉在錯(cuò)誤頁(yè)面中的nginx版本數(shù)字,這樣對(duì)于安全性是有好處的昌简。
MySql
innodb_file_per_table
表的數(shù)據(jù)和索引存放在共享表空間里或者單獨(dú)表空間里占业。我們的工作場(chǎng)景安裝是默認(rèn)設(shè)置了innodb_file_per_table = ON,這樣也有助于工作中進(jìn)行單獨(dú)表空間的遷移工作纯赎。MySQL 5.6中谦疾,這個(gè)屬性默認(rèn)值是ON。
innodb_flush_log_at_trx_commit
默認(rèn)值為1犬金,表示InnoDB完全支持ACID特性念恍。當(dāng)你的主要關(guān)注點(diǎn)是數(shù)據(jù)安全的時(shí)候這個(gè)值是最合適的,比如在一個(gè)主節(jié)點(diǎn)上晚顷。但是對(duì)于磁盤(pán)(讀寫(xiě))速度較慢的系統(tǒng)峰伙,它會(huì)帶來(lái)很巨大的開(kāi)銷(xiāo),因?yàn)槊看螌⒏淖僨lush到redo日志都需要額外的fsyncs该默。
如果將它的值設(shè)置為2會(huì)導(dǎo)致不太可靠(unreliable)瞳氓。因?yàn)樘峤坏氖聞?wù)僅僅每秒才flush一次到redo日志,但對(duì)于一些場(chǎng)景是可以接受的权均,比如對(duì)于主節(jié)點(diǎn)的備份節(jié)點(diǎn)這個(gè)值是可以接受的顿膨。如果值為0速度就更快了,但在系統(tǒng)崩潰時(shí)可能丟失一些數(shù)據(jù):只適用于備份節(jié)點(diǎn)叽赊。說(shuō)到這個(gè)參數(shù)就一定會(huì)想到另一個(gè)sync_binlog恋沃。
innodb_flush_method
這項(xiàng)配置決定了數(shù)據(jù)和日志寫(xiě)入硬盤(pán)的方式。一共有三種方式必指,我們默認(rèn)使用O_DIRECT 囊咏。O_DIRECT模式:數(shù)據(jù)文件的寫(xiě)入操作是直接從mysql innodb buffer到磁盤(pán)的,并不用通過(guò)操作系統(tǒng)的緩沖,而真正的完成也是在flush這步梅割,日志還是要經(jīng)過(guò)OS緩沖霜第。
innodb_log_buffer_size
這項(xiàng)配置決定了為尚未執(zhí)行的事務(wù)分配的緩存。其默認(rèn)值(1MB)一般來(lái)說(shuō)已經(jīng)夠用了户辞,但是如果你的事務(wù)中包含有二進(jìn)制大對(duì)象或者大文本字段的話(huà)泌类,這點(diǎn)緩存很快就會(huì)被填滿(mǎn)并觸發(fā)額外的I/O操作〉琢牵看看Innodb_log_waits狀態(tài)變量刃榨,如果它不是0,增加innodb_log_buffer_size双仍。
innodb_buffer_pool_size
這個(gè)參數(shù)應(yīng)該是運(yùn)維中必須關(guān)注的了枢希。緩沖池是數(shù)據(jù)和索引緩存的地方,它屬于MySQL的核心參數(shù)朱沃,默認(rèn)為128MB苞轿,正常的情況下這個(gè)參數(shù)設(shè)置為物理內(nèi)存的60%~70%。(不過(guò)我們的實(shí)例基本上都是多實(shí)例混部的逗物,所以這個(gè)值還要根據(jù)業(yè)務(wù)規(guī)模來(lái)具體分析搬卒。)
innodb_log_file_size
這是redo日志的大小。redo日志被用于確保寫(xiě)操作快速而可靠并且在崩潰時(shí)恢復(fù)翎卓。如果你知道你的應(yīng)用程序需要頻繁地寫(xiě)入數(shù)據(jù)并且你使用的是MySQL 5.6秀睛,那么你可以一開(kāi)始就把它這是成4G。(具體大小還要根據(jù)自身業(yè)務(wù)進(jìn)行適當(dāng)調(diào)整)
innodb_support_xa
innodb_support_xa可以開(kāi)關(guān)InnoDB的XA兩段式事務(wù)提交莲祸。默認(rèn)情況下,innodb_support_xa=true椭迎,支持XA兩段式事務(wù)提交锐帜。由于XA兩段式事務(wù)提交導(dǎo)致多余flush等操作,性能影響會(huì)達(dá)到10%畜号,所有為了提高性能缴阎,有些DBA會(huì)設(shè)置innodb_support_xa=false。這樣的話(huà)简软,redolog和binlog將無(wú)法同步蛮拔,可能存在事務(wù)在主庫(kù)提交,但是沒(méi)有記錄到binlog的情況痹升。這樣也有可能造成事務(wù)數(shù)據(jù)的丟失建炫。
innodb_additional_mem_pool_size
該參數(shù)用來(lái)存儲(chǔ)數(shù)據(jù)字段信息和其他內(nèi)部數(shù)據(jù)結(jié)構(gòu)。表越多疼蛾,需要在這里分配的內(nèi)存越多肛跌。如果InnoDB用光了這個(gè)池內(nèi)的內(nèi)存,InnoDB開(kāi)始從操作系統(tǒng)分配內(nèi)存,并且往MySQL錯(cuò)誤日志寫(xiě)警告信息衍慎,默認(rèn)8MB转唉。一般設(shè)置16MB。
max_connections
MySQL服務(wù)器默認(rèn)連接數(shù)比較小稳捆,一般也就100來(lái)個(gè)最好把最大值設(shè)大一些赠法。一般設(shè)置500~1000即可每一個(gè)鏈接都會(huì)占用一定的內(nèi)存,所以這個(gè)參數(shù)也不是越大越好乔夯。有的人遇到too many connections會(huì)去增加這個(gè)參數(shù)的大小砖织,但其實(shí)如果是業(yè)務(wù)量或者程序邏輯有問(wèn)題或者sql寫(xiě)的不好,即使增大這個(gè)參數(shù)也無(wú)濟(jì)于事驯嘱,再次報(bào)錯(cuò)只是時(shí)間問(wèn)題镶苞。在應(yīng)用程序里使用連接池或者在MySQL里使用進(jìn)程池有助于解決這一問(wèn)題。
server-id
復(fù)制架構(gòu)時(shí)確保 server-id 要不同鞠评,通常主ID要小于從ID茂蚓。
log_bin
如果你想讓數(shù)據(jù)庫(kù)服務(wù)器充當(dāng)主節(jié)點(diǎn)的備份節(jié)點(diǎn),那么開(kāi)啟二進(jìn)制日志是必須的剃幌。如果這么做了之后聋涨,還別忘了設(shè)置server_id為一個(gè)唯一的值。就算只有一個(gè)服務(wù)器负乡,如果你想做基于時(shí)間點(diǎn)的數(shù)據(jù)恢復(fù)牍白,這(開(kāi)啟二進(jìn)制日志)也是很有用的:從你最近的備份中恢復(fù)(全量備份),并應(yīng)用二進(jìn)制日志中的修改(增量備份)抖棘。
二進(jìn)制日志一旦創(chuàng)建就將永久保存茂腥。所以如果你不想讓磁盤(pán)空間耗盡,你可以用 PURGE BINARY LOGS 來(lái)清除舊文件切省,或者設(shè)置expire_logs_days 來(lái)指定過(guò)多少天日志將被自動(dòng)清除最岗。記錄二進(jìn)制日志不是沒(méi)有開(kāi)銷(xiāo)的,所以如果你在一個(gè)非主節(jié)點(diǎn)的復(fù)制節(jié)點(diǎn)上不需要它的話(huà)朝捆,那么建議關(guān)閉這個(gè)選項(xiàng)般渡。
skip_name_resolve
當(dāng)客戶(hù)端連接數(shù)據(jù)庫(kù)服務(wù)器時(shí),服務(wù)器會(huì)進(jìn)行主機(jī)名解析芙盘,并且當(dāng)DNS很慢時(shí)驯用,建立連接也會(huì)很慢。因此建議在啟動(dòng)服務(wù)器時(shí)關(guān)閉skip_name_resolve選項(xiàng)而不進(jìn)行DNS查找儒老。唯一的局限是之后GRANT語(yǔ)句中只能使用IP地址了蝴乔,因此在添加這項(xiàng)設(shè)置到一個(gè)已有系統(tǒng)中必須格外小心。
sync_binlog
sync_binlog 的默認(rèn)值是0驮樊,像操作系統(tǒng)刷其他文件的機(jī)制一樣淘这,MySQL不會(huì)同步到磁盤(pán)中去而是依賴(lài)操作系統(tǒng)來(lái)刷新binary log剥扣。
當(dāng)sync_binlog =N (N>0) ,MySQL 在每寫(xiě)N次二進(jìn)制日志binary log時(shí)铝穷,會(huì)使用fdatasync()函數(shù)將它的寫(xiě)二進(jìn)制日志binary log同步到磁盤(pán)中去钠怯。當(dāng)innodb_flush_log_at_trx_commit和sync_binlog 都為 1 時(shí)是最安全的,在mysqld服務(wù)崩潰或者服務(wù)器主機(jī)crash的情況下曙聂,binary log只有可能丟失最多一個(gè)語(yǔ)句或者一個(gè)事務(wù)晦炊。但是魚(yú)與熊掌不可兼得,雙1會(huì)導(dǎo)致頻繁的IO操作宁脊,因此該模式也是最慢的一種方式断国。出于我們的業(yè)務(wù)考慮在業(yè)務(wù)壓力允許的情況下默認(rèn)的都是雙1配置。
log_slave_update
當(dāng)業(yè)務(wù)中需要使用級(jí)聯(lián)架構(gòu)的時(shí)候log_slave_update = 1這個(gè)參數(shù)必須打開(kāi)榆苞,否者第三級(jí)可能無(wú)法接收到第一級(jí)產(chǎn)生的binlog稳衬,從而無(wú)法進(jìn)行數(shù)據(jù)同步。
tmpdir
如果內(nèi)存臨時(shí)表超出了限制坐漏,MySQL就會(huì)自動(dòng)地把它轉(zhuǎn)化為基于磁盤(pán)的MyISAM表薄疚,存儲(chǔ)在指定的tmpdir目錄下.因此盡可能將tmpdir配置到性能好速度快的存儲(chǔ)設(shè)備上。
慢日志相關(guān)
<pre>slow_query_log = 1 #打開(kāi)慢日志
</pre>
PHP
進(jìn)程數(shù)
<pre>pm = dynamic
pm參數(shù)指定了進(jìn)程管理方式赊琳,有兩種可供選擇:static或dynamic街夭,從字面意思不難理解,為靜態(tài)或動(dòng)態(tài)方式躏筏。如果是靜態(tài)方式板丽,那么在php-fpm啟動(dòng)的時(shí)候就創(chuàng)建了指定數(shù)目的進(jìn)程,在運(yùn)行過(guò)程中不會(huì)再有變化(并不是真的就永遠(yuǎn)不變)趁尼;而動(dòng)態(tài)的則在運(yùn)行過(guò)程中動(dòng)態(tài)調(diào)整埃碱,當(dāng)然并不是無(wú)限制的創(chuàng)建新進(jìn)程,受pm.max_spare_servers參數(shù)影響酥泞;動(dòng)態(tài)適合小內(nèi)存機(jī)器乃正,靈活分配進(jìn)程,省內(nèi)存婶博。靜態(tài)適用于大內(nèi)存機(jī)器,動(dòng)態(tài)創(chuàng)建回收進(jìn)程對(duì)服務(wù)器資源也是一種消耗
pm.max_children = 24
static模式下創(chuàng)建的子進(jìn)程數(shù)或dynamic模式下同一時(shí)刻允許最大的php-fpm子進(jìn)程數(shù)量
pm.start_servers = 16
動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量
pm.min_spare_servers = 12
動(dòng)態(tài)方式下服務(wù)器空閑時(shí)最小php-fpm進(jìn)程數(shù)量
pm.max_spare_servers = 24
動(dòng)態(tài)方式下服務(wù)器空閑時(shí)最大php-fpm進(jìn)程數(shù)量
</pre>
一般php-fpm進(jìn)程占用20~30m左右的內(nèi)存就按30m算荧飞。如果單獨(dú)跑php-fpm凡人,動(dòng)態(tài)方式起始值可設(shè)置物理內(nèi)存Mem/30M。
最大處理請(qǐng)求數(shù)
<pre>pm.max_requests = 10240
</pre>
最大處理請(qǐng)求數(shù)是指一個(gè)php-fpm的worker進(jìn)程在處理多少個(gè)請(qǐng)求后就終止掉叹阔,master進(jìn)程會(huì)重新respawn一個(gè)新的挠轴,這個(gè)配置的主要目的是避免php解釋器或程序引用的第三方庫(kù)造成的內(nèi)存泄露。
最長(zhǎng)執(zhí)行時(shí)間
<pre>max_execution_time = 20
request_terminate_timeout = 20
</pre>
這個(gè)是用來(lái)處理因?yàn)镻HP執(zhí)行時(shí)間超長(zhǎng)而報(bào)502錯(cuò)誤的解決耳幢。這個(gè)時(shí)長(zhǎng)配置可以在php.ini(max_execution_time)或php-fpm.conf中配置均可岸晦,為了不影響全局配置欧啤,可在php-fpm.conf中實(shí)現(xiàn)