性能优化概述
目錄
- 性能優(yōu)化概述
- 壓力測試工具
- 了解影響性能指標(biāo)
- 系統(tǒng)性能優(yōu)化
- 代理服務(wù)優(yōu)化
- 配置nginx代理服務(wù)使用長連接方式
- 對(duì)于fastcgi服務(wù)器,需要設(shè)置fastcgi_keep_conn以便保持長連接[flag]
- keepalive_requests設(shè)置通過一個(gè)keepalive連接提供的最大請求數(shù),在發(fā)出最大請求數(shù)后,將關(guān)閉連接。
- keepalive_timeout設(shè)置超時(shí),再次期間與代理服務(wù)器的空閑keepalive連接將保持打開狀態(tài)。
- 靜態(tài)資源緩存
- 瀏覽器無緩存
- 瀏覽器有緩存
- 瀏覽器過期校驗(yàn)機(jī)制
- 取消緩存
- 靜態(tài)資源壓縮
- 針對(duì)圖片
- 針對(duì)txt
- 防止資源盜鏈
- 生產(chǎn)實(shí)踐
- 允許跨域訪問
- 1.配置a網(wǎng)站
- 2.配置b網(wǎng)站
- 3.通過瀏覽器測試跨域訪問
- 4.在b網(wǎng)站上允許a網(wǎng)站跨域訪問
- cpu親和
- 1.查看當(dāng)前CPU物理狀態(tài)
- 修改nginx啟動(dòng)的work進(jìn)程為自動(dòng)
- Nginx通用配置 Nginx代理相關(guān)配置 Nginx Fastcgi
- Nginx安全與優(yōu)化總結(jié)
- php優(yōu)化
- 1.php程序配置管理文件/etc/php.ini,主要調(diào)整日志、文件上傳、禁止危險(xiǎn)函數(shù)、關(guān)閉版本號(hào)顯示、等
- 2.php-fpm進(jìn)程管理配置文件/etc/php-fpm.conf
- 3.php 狀態(tài)頁面 pm.status_path = /phpfpm_status #開啟php的狀態(tài)頁面
- 4.PHP-FPM配置文件 4核16G、4核32G
- 總結(jié)
性能優(yōu)化概述
1、了解每個(gè)服務(wù)
2、需要了解業(yè)務(wù)模式
3、最后我們需要考慮性能與安全
壓力測試工具
[root@web01 conf.d]# yum install httpd-tools -y#配置nginx [root@lb01 conf.d]# cat try.conf server {listen 80;server_name try.haoda.com;location / {root /code;try_files $uri $uri/ @java;index index.jsp index.html;}location @java {proxy_pass http://172.16.1.8:8080;} }#配置nginx使用的靜態(tài)頁面 [root@lb01 conf.d]# echo "nginx ab" > /code/ad.html#配置tomcat使用的靜態(tài)頁面 [root@web02 ~]# wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz [root@web02 ~]# tar xf apache-tomcat-9.0.16.tar.gz [root@web02 ~]# cd /usr/share/tomcat/webapps/ROOT [root@web02 ROOT]# echo "tomcat aaaaa" > tomcat.html#壓測工具測試nginx處理靜態(tài)資源 [root@lb01 conf.d]# ab -n 10000 -c 200 http://try.haoda.com/ad.htmlServer Software: nginx/1.14.2 Server Hostname: try.haoda.com Server Port: 80Document Path: /ad.html Document Length: 9 bytesConcurrency Level: 200 Time taken for tests: 1.078 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 2380000 bytes HTML transferred: 90000 bytes Requests per second: 9272.58 [#/sec] (mean) Time per request: 21.569 [ms] (mean) Time per request: 0.108 [ms] (mean, across all concurrent requests) Transfer rate: 2155.15 [Kbytes/sec] received#壓測工具測試tomcat處理靜態(tài)資源 [root@lb01 conf.d]# ab -n 10000 -c 200 http://try.haoda.com/tomcat.htmlServer Software: nginx/1.14.2 Server Hostname: try.haoda.com Server Port: 80Document Path: /tomcat.html Document Length: 13 bytesConcurrency Level: 200 Time taken for tests: 4.956 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 2510000 bytes HTML transferred: 130000 bytes Requests per second: 2017.78 [#/sec] (mean) Time per request: 99.119 [ms] (mean) Time per request: 0.496 [ms] (mean, across all concurrent requests) Transfer rate: 494.59 [Kbytes/sec] received了解影響性能指標(biāo)
1、網(wǎng)絡(luò)(1)網(wǎng)絡(luò)的流量(2)網(wǎng)絡(luò)是否丟包(3)這些會(huì)影響http的請求與調(diào)用 2、系統(tǒng)(1)硬件有沒有磁盤損壞,磁盤速率(2)系統(tǒng)的負(fù)載、內(nèi)存、系統(tǒng)穩(wěn)定性 3、服務(wù)(1)連接優(yōu)化。請求優(yōu)化(2)根據(jù)業(yè)務(wù)形態(tài)做對(duì)應(yīng)的服務(wù)設(shè)置 4、程序(1)接口性能(2)處理速度(3)程序執(zhí)行效率 5、數(shù)據(jù)庫#每個(gè)服務(wù)與服務(wù)之間都或多或少有一些關(guān)聯(lián),我們需要將整個(gè)架構(gòu)進(jìn)行分層,找到對(duì)應(yīng)系統(tǒng)或服務(wù)的短板,然后進(jìn)行優(yōu)化系統(tǒng)性能優(yōu)化
文件句柄,Linux一切皆文件,文件句柄可以理解為就是一個(gè)索引,文件句柄會(huì)隨著我們進(jìn)程的調(diào)用頻繁增加,系統(tǒng)默認(rèn)文件句柄是有限制的,不能讓一個(gè)進(jìn)程無限的調(diào)用,所以我們需要限制每個(gè) 進(jìn)程和每個(gè)服務(wù)使用多大的文件句柄,文件句柄也是必須要調(diào)整的優(yōu)化參數(shù)。
文件句柄的設(shè)置方式:
1、系統(tǒng)全局性修改。
2、用戶局部性修改。
3、進(jìn)程局部性修改。
在高并發(fā)短連接的TCP服務(wù)器上,當(dāng)服務(wù)器處理完請求后立刻主動(dòng)正常關(guān)閉連接。這個(gè)場景下會(huì)出現(xiàn)大量socket處于TIME_WAIT狀態(tài)。如果客戶端的并發(fā)量持續(xù)很高,此時(shí)部分客戶端就會(huì)顯示連接不上。 我來解釋下這個(gè)場景。主動(dòng)正常關(guān)閉TCP連接,都會(huì)出現(xiàn)TIMEWAIT。
為什么我們要關(guān)注這個(gè)高并發(fā)短連接呢?有兩個(gè)方面需要注意: 1. 高并發(fā)可以讓服務(wù)器在短時(shí)間范圍內(nèi)同時(shí)占用大量端口,而端口有個(gè)0~65535的范圍,并不是很多,刨除系統(tǒng)和其他服務(wù)要用的,剩下的就更少了。 2. 在這個(gè)場景中,短連接表示“業(yè)務(wù)處理+傳輸數(shù)據(jù)的時(shí)間 遠(yuǎn)遠(yuǎn)小于 TIMEWAIT超時(shí)的時(shí)間”的連接。
這里有個(gè)相對(duì)長短的概念,比如取一個(gè)web頁面,1秒鐘的http短連接處理完業(yè)務(wù),在關(guān)閉連接之后,這個(gè)業(yè)務(wù)用過的端口會(huì)停留在TIMEWAIT狀態(tài)幾分鐘,而這幾分鐘,其他HTTP請求來臨的時(shí)候是無法占用此端口的(占著茅坑不拉翔)。單用這個(gè)業(yè)務(wù)計(jì)算服務(wù)器的利用率會(huì)發(fā)現(xiàn),服務(wù)器干正經(jīng)事的時(shí)間和端口(資源)被掛著無法被使用的時(shí)間的比例是 1:幾百,服務(wù)器資源嚴(yán)重浪費(fèi)。(說個(gè)題外話,從這個(gè)意義出發(fā)來考慮服務(wù)器性能調(diào)優(yōu)的話,長連接業(yè)務(wù)的服務(wù)就不需要考慮TIMEWAIT狀態(tài)。同時(shí),假如你對(duì)服務(wù)器業(yè)務(wù)場景非常熟悉,你會(huì)發(fā)現(xiàn),在實(shí)際業(yè)務(wù)場景中,一般長連接對(duì)應(yīng)的業(yè)務(wù)的并發(fā)量并不會(huì)很高。
代理服務(wù)優(yōu)化
配置nginx代理服務(wù)使用長連接方式
upstream http_backend {server 127.0.0.1:8080;keepalive 16; #長連接 }server {...location /http/ {proxy_pass http://http_backend;proxy_http_version 1.1; #對(duì)于http協(xié)議應(yīng)該指定為1.1proxy_set_header Connection ""; #清除“connection”頭字段proxy_next_upstream error timeout http_500 http_502 http_503 http_504; #平滑過渡proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for;proxy_connect_timeout 30s; # 代理連接web超時(shí)時(shí)間proxy_read_timeout 60s; # 代理等待web響應(yīng)超時(shí)時(shí)間proxy_send_timeout 60s; # web回傳數(shù)據(jù)至代理超時(shí)時(shí)間proxy_buffering on; # 開啟代理緩沖區(qū),web回傳數(shù)據(jù)至緩沖區(qū),代理邊收邊傳返回給客戶端proxy_buffer_size 32k; # 代理接收web響應(yīng)的頭信息的緩沖區(qū)大小proxy_buffers 4 128k; # 緩沖代理接收單個(gè)長連接內(nèi)包含的web響應(yīng)的數(shù)量和大小...} }對(duì)于fastcgi服務(wù)器,需要設(shè)置fastcgi_keep_conn以便保持長連接[flag]
upstream fastcgi_backend {server 127.0.0.1:9000;keepalive 8; }server {...location /fastcgi/ {fastcgi_pass fastcgi_backend;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_keep_conn on; fastcgi_connect_timeout 60s;include fastcgi_params;...} }keepalive_requests設(shè)置通過一個(gè)keepalive連接提供的最大請求數(shù),在發(fā)出最大請求數(shù)后,將關(guān)閉連接。
Syntax: keepalive_requests number; Default: keepalive_requests 100; Context: upstreamkeepalive_timeout設(shè)置超時(shí),再次期間與代理服務(wù)器的空閑keepalive連接將保持打開狀態(tài)。
Syntax: keepalive_timeout timeout; Default: keepalive_timeout 60s; Context: upstream#該指令出現(xiàn)在1.15.3版中注意:
1.scgi和uwsgi協(xié)議沒有保持連接的概念。
2.但無論是proxy、fastcgi、uwsgi協(xié)議都有cache緩存的功能,開啟后可加速網(wǎng)站訪問的效率。(取決硬件)
靜態(tài)資源緩存
瀏覽器無緩存
瀏覽器有緩存
瀏覽器過期校驗(yàn)機(jī)制
瀏覽器If-None-Match "9-1550193224000" 詢問 web服務(wù)器 etag "9-1550193224000" 瀏覽器認(rèn)為只是緩存過期,內(nèi)容并沒有修改,所以協(xié)商后還是304 瀏覽器If-Modified-Since Tue, 29 Jan 2019 02:29:51 GMT詢問 web服務(wù)器 Last-Modified: Tue, 29 Jan 2019 02:29:51 GMT 瀏覽器認(rèn)為只是緩存過期,內(nèi)容并沒有修改,所以協(xié)商后還是304配置靜態(tài)資源緩存場景
server {listen 80;server_name static.haoda.com;location ~ .*\.(jpg|gif|png)$ {expires 7d;}location ~ .*\.(js|css)$ {expires 30d;} }取消緩存
location ~ \.*(png|jpg|gif|jpeg)$ {expires 30d;add_header Cache-Control no-store;add_header Pragma no-cache; } }靜態(tài)資源壓縮
文件讀取高效sendfile,如下圖
Syntax: sendfile on | off; Default: sendfile off; Context: http, server, location, if in location傳統(tǒng)讀取文件方式 與 sendfile讀取文件方式
將多個(gè)包一次發(fā)送,用于提升網(wǎng)絡(luò)傳輸效率,大文件推薦打開,需要開啟sendfile才行
Syntax: tcp_nopush on | off; Default: tcp_nopush off; Context: http, server, location提高網(wǎng)絡(luò)傳輸實(shí)時(shí)性,需要開啟keepalive,來一個(gè)包發(fā)一個(gè)包不等待
Syntax: tcp_nodelay on | off; Default: tcpnodelay off; Context: http, server, locationgzip壓縮比率,加快傳輸,但壓縮本身比較耗費(fèi)服務(wù)器性能
Syntax: gzip_comp_level level; Default:gzip_comp_level level 1; Context: http, server, locationgzip壓縮協(xié)議版本,壓縮使用在http哪個(gè)協(xié)議,主流選擇1.1版本
Syntax: gzip_http_version 1.0 | 1.1; Default:gzip_http_version 1.1; Context: http, server, location針對(duì)圖片
location ~* .*\.(jpg|gif|png)$ {root /code/images;gzip on;gzip_http_version 1.1;gzip_comp_level 2; #極致為9,壓縮的級(jí)別gzip_types image/jpeg image/gif image/png; #文件格式}針對(duì)txt
[root@Nginx conf.d]# cat static_server.conf server {listen 80;server_name static.oldboy.com;sendfile on;location ~ .*\.(txt|xml|html|json|js|css)$ {gzip on;gzip_http_version 1.1;gzip_comp_level 1;gzip_types text/plain application/json application/x-javascript application/css application/xml text/javascript;} }防止資源盜鏈
防盜鏈,指的是防止資源被其他網(wǎng)站惡意盜用。
基礎(chǔ)防盜鏈設(shè)置思路:主要是針對(duì)客戶端請求過程中所攜帶的一些Header信息來驗(yàn)證請求的合法性,比如客戶端在請求的過程中都會(huì)攜帶referer信息。優(yōu)點(diǎn)是規(guī)則簡單,配置和使用都很方便,缺點(diǎn)是防盜鏈所依賴的Referer驗(yàn)證信息是可以偽造的,所以通過referer信息防盜鏈并非100%可靠,但是他能夠限制大部分的盜鏈情況。
Syntax: valid_referers none | blocked | server_name | string ...; Default: -; Context: server, location#none: referer來源頭部為空的情況 #blocked: referer來源頭部不為空,這些都不以http://或者h(yuǎn)ttps://開頭 #server_name: 來源頭部信息包含當(dāng)前域名,可以正則匹配 Syntax: valid_referers none | blocked | server_name | string ...; Default: -; Context: server, location#none: referer來源頭部為空的情況 #blocked: referer來源頭部不為空,這些都不以http://或者h(yuǎn)ttps://開頭 #server_name: 來源頭部信息包含當(dāng)前域名,可以正則匹配5.4.1 在盜鏈服務(wù)器上準(zhǔn)備html文件,偷取我的圖片
<html> <head><meta charset="utf-8"><title>haoda.com</title> </head> <body style="background-color:black;"><img src="http://39.104.205.72/picture/niu.jpg"/> </body> </html>5.4.2 訪問頁面查看
5.4.3 服務(wù)器上配置防盜鏈
location ~ .*\.(jpg|png|gif) {root /data;valid_referers none blocked 39.104.205.72;if ( $invalid_referer ) {return 403;} }以上配置含義表示,所有來自39.104.205.72都可以訪問到當(dāng)前站點(diǎn)的圖片,如果來源域名不在這個(gè)列表中,那么$invalid_referer等于1,在if語句中返回一個(gè)403個(gè)客戶,這樣用戶便會(huì)看到一個(gè)403的頁面
5.4.4 如果不使用return而是用rewrite,那么盜鏈圖片會(huì)返回一個(gè)pei.jpg給用戶
location ~ .*\.(jpg|png|gif) {root /data;valid_referers none blocked 39.104.205.72;if ( $invalid_referer ) {rewrite ^(.*)$ /picture/pei.jpg break;} }5.4.5 如果希望某些網(wǎng)站可以盜鏈
location ~ .*\.(jpg|png|gif) {root /data;valid_referers none blocked 39.104.205.72 server_name ~\.google\. ~\.baidu\.;if ( $invalid_referer ) {return 403;} }當(dāng)然這種防護(hù)并不能百分百保證資源不被盜鏈,因?yàn)槲覀兛梢酝ㄟ^命令來修改來源的refer信息。
[root@lb01 conf.d]# curl -e "http://www.baidu.com" -I http://39.104.205.72/picture/niu.jpg [root@lb01 conf.d]# curl -e "http://39.104.205.72" -I http://39.104.205.72/picture/niu.jpg生產(chǎn)實(shí)踐
1.配置網(wǎng)站
[root@web02 conf.d]# cat static.conf server {listen 80;server_name static.oldboy.com;root /code; location / {index index.html; } }2.上傳2張圖片
? 一張是可以被盜鏈的圖片
? 一張是廣告位的圖片
重啟服務(wù)器
[root@web02 code]# systemctl restart nginx3.配置盜鏈服務(wù)器
[root@web01 conf.d]# cat try.conf server {server_name dl.oldboy.com;listen 80;root /code;location / {index index.html;} }配置盜鏈頁面
[root@web01 code]# cat /code/tt.html <html><head><meta charset="utf-8"><title>oldboyedu.com</title> </head><body style="background-color:red;"><img src="http://static.oldboy.com/smg.jpg"/> #根據(jù)情況修改你的服務(wù)器地址 </body> </html>4.web02添加防盜鏈操作
location ~* \.(gif|jpg|png|bmp)$ {valid_referers none blocked *.xuliangwei.com server_ names ~\.google\.;if ($invalid_referer) {return 403; #可以選擇直接返回403rewrite ^(.*)$ /ggw.png break; #也可以選擇返回一張水印的圖片,給公司做廣告}允許跨域訪問
1.配置a網(wǎng)站
[root@Nginx ~]# cat /code/http_origin.html <html lang="en"> <head><meta charset="UTF-8" /><title>測試ajax和跨域訪問</title><script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script> </head> <script type="text/javascript"> $(document).ready(function(){$.ajax({type: "GET",url: "http://naonao.lq.com/1.jpg",success: function(data) {alert("sucess!!!");},error: function() {alert("fail!!,請刷新再試!");}}); }); </script><body><h1>測試跨域訪問</h1></body> </html>2.配置b網(wǎng)站
3.通過瀏覽器測試跨域訪問
4.在b網(wǎng)站上允許a網(wǎng)站跨域訪問
server {server_name naonao.lq.com;listen 80;root /code;location / {index index.html;}location ~* \.(gif|jpg|png|bmp)$ {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;} }cpu親和
1.查看當(dāng)前CPU物理狀態(tài)
[root@nginx ~]# lscpu |grep "CPU(s)" CPU(s): 24 #總的核心數(shù) On-line CPU(s) list: 0-23 每個(gè)物理cpu使用的是那些核心(代表2顆物理CPU,) NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22 NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23 #本次演示服務(wù)器為 兩顆物理cpu,每顆物理CPU12個(gè)核心, 總共有24個(gè)核心修改nginx啟動(dòng)的work進(jìn)程為自動(dòng)
worker_processes auto; worker_cpu_affinity auto;[root@web01 ~]# ps -eo pid,args,psr|grep [n]ginx1242 nginx: master process /usr/ 21243 nginx: worker process 01244 nginx: worker process 11245 nginx: worker process 21246 nginx: worker process 3 不推薦調(diào)整的方式# 第一種綁定組合方式worker_processes 24;worker_cpu_affinity 000000000001 000000000010 000000000100 000000001000 000000010000 000000100000 000001000000 000010000000 000100000000 001000000000 010000000000 10000000000;# 第二種方式(使用較少)worker_processes 2;worker_cpu_affinity 101010101010 010101010101;Nginx通用配置 Nginx代理相關(guān)配置 Nginx Fastcgi
[root@nginx ~]# cat nginx.conf user www; # nginx進(jìn)程啟動(dòng)用戶 worker_processes auto; #與cpu核心一致即可 worker_cpu_affinity auto; # cpu親和error_log /var/log/nginx/error.log warn; # 錯(cuò)誤日志 pid /run/nginx.pid; worker_rlimit_nofile 35535; #每個(gè)work能打開的文件描述符,調(diào)整至1w以上,負(fù)荷較高建議2-3wevents {use epoll; # 使用epoll高效網(wǎng)絡(luò)模型worker_connections 10240; # 限制每個(gè)進(jìn)程能處理多少個(gè)連接,10240x[cpu核心] }http {include mime.types;default_type application/octet-stream;charset utf-8; # 統(tǒng)一使用utf-8字符集 # 定義日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main; # 訪問日志server_tokens off; # 禁止瀏覽器顯示nginx版本號(hào) client_max_body_size 200m; # 文件上傳大小限制調(diào)整# 文件高效傳輸,靜態(tài)資源服務(wù)器建議打開 sendfile on; tcp_nopush on; # 文件實(shí)時(shí)傳輸,動(dòng)態(tài)資源服務(wù)建議打開,需要打開keepalive tcp_nodelay on; keepalive_timeout 65;# Gzip 壓縮 gzip on; gzip_disable "MSIE [1-6]\."; gzip_http_version 1.1; gzip_comp_level 2; gzip_buffers 16 8k; gzip_min_length 1024; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml applicati on/xml+rss text/javascript image/jpeg; # 虛擬主機(jī) include /etc/nginx/conf.d/*.conf; }Nginx安全與優(yōu)化總結(jié)
1.cpu親和、worker進(jìn)程數(shù)、調(diào)整每個(gè)worker進(jìn)程打開的文件數(shù)
2.使用epool網(wǎng)絡(luò)模型、調(diào)整每個(gè)worker進(jìn)程的最大連接數(shù)
3.文件的高效讀取sendfile、nopush、
4.文件的傳輸實(shí)時(shí)性、nodealy
5.開啟tcp長鏈接、以及長鏈接超時(shí)時(shí)間keepalived
6.開啟文件傳輸壓縮gzip
7.開啟靜態(tài)文件expires緩存
8.隱藏Nginx的版本號(hào)
9.禁止通過IP地址訪問,禁止惡意域名解析,只允許域名訪問
10.配置放盜鏈、以及跨域訪問
11.防DDOS、cc攻擊, 限制單IP并發(fā)連接,以及http請求
12.優(yōu)雅限制nginx錯(cuò)誤頁面
13.nginx加密傳輸https優(yōu)化
14.nginx proxy_cache、fastcgi_cache、uwsgi_cache緩存
squid、varnish()
php優(yōu)化
1.php程序配置管理文件/etc/php.ini,主要調(diào)整日志、文件上傳、禁止危險(xiǎn)函數(shù)、關(guān)閉版本號(hào)顯示、等
#;;;;;;;;;;;;;;;;;Error logging ; #錯(cuò)誤日志設(shè)置#;;;;;;;;;;;;;;;;; expose_php = Off # 關(guān)閉php版本信息 display_error = Off # 屏幕不顯示錯(cuò)誤日志 error_reporting = E_ALL # 記錄PHP的每個(gè)錯(cuò)誤 log_errors = On # 開啟錯(cuò)誤日志 error_log = /var/log/php_error.log # 錯(cuò)誤日志寫入的位置 date.timezone = Asia/Shanghai # 調(diào)整時(shí)區(qū),默認(rèn)PRC#;;;;;;;;;;;;;;;File Uploads ; #文件上傳設(shè)置#;;;;;;;;;;;;;;; file_uploads = On # 允許文件上傳 upload_max_filesize = 300M # 允許上傳文件的最大大小 post_max_size = 300M # 允許客戶端單個(gè)POST請求發(fā)送的最大數(shù)據(jù) max_file_uploads = 20 # 允許同時(shí)上傳的文件的最大數(shù)量 memory_limit = 128M # 每個(gè)腳本執(zhí)行最大內(nèi)存[Session] #會(huì)話共享 session.save_handler = redis session.save_path = "tcp://172.16.1.51:6379" #有密碼寫?auth=https://blog.csdn.net/unixtech/article/details/53761832 #php禁止危險(xiǎn)函數(shù)執(zhí)行(取決于實(shí)際情況,需要和開發(fā)溝通) disable_functions = chown,chmod,pfsockopen,phpinfo2.php-fpm進(jìn)程管理配置文件/etc/php-fpm.conf
#第一部分,fpm配置 ;include=etc/fpm.d/*.conf#第二部分,全局配置 [global] ;pid = /var/log/php-fpm/php-fpm.pid #pid文件存放的位置 ;error_log = /var/log/php-fpm/php-fpm.log #錯(cuò)誤日志存放的位置 ;log_level = error #日志級(jí)別, alert, error, warning, notice, debug rlimit_files = 65535 #php-fpm進(jìn)程能打開的文件數(shù) ;events.mechanism = epoll #使用epoll事件模型處理請求#第三部分,進(jìn)程池定義 [www] #池名稱 user = www #進(jìn)程運(yùn)行的用戶 group = www #進(jìn)程運(yùn)行的組 ;listen = /dev/shm/php-fpm.sock #監(jiān)聽在本地socket文件 listen = 127.0.0.1:9000 #監(jiān)聽在本地tcp的9000端口 ;listen.allowed_clients = 127.0.0.1 #允許訪問FastCGI進(jìn)程的IP,any不限制 pm = dynamic #動(dòng)態(tài)調(diào)節(jié)php-fpm的進(jìn)程數(shù) pm.max_children = 512 #最大啟動(dòng)的php-fpm進(jìn)程數(shù) pm.start_servers = 32 #初始啟動(dòng)的php-fpm進(jìn)程數(shù) pm.min_spare_servers = 32 #最少的空閑php-fpm進(jìn)程數(shù) pm.max_spare_servers = 64 #最大的空閑php-fpm進(jìn)程數(shù) pm.max_requests = 1500 #每一個(gè)進(jìn)程能響應(yīng)的請求數(shù) pm.process_idle_timeout = 15s; pm.status_path = /phpfpm_status #開啟php的狀態(tài)頁面#第四部分,日志相關(guān) php_flag[display_errors] = off php_admin_value[error_log] = /var/log/phpfpm_error.log php_admin_flag[log_errors] = on#慢日志 request_slowlog_timeout = 5s #php腳本執(zhí)行超過5s的文件 slowlog = /var/log/php_slow.log #記錄至該文件中 慢日志示例 [21-Nov-2013 14:30:38] [pool www] pid 11877 script_filename = /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php [0xb70fb88c] file_get_contents() /usr/local/lnmp/nginx/html/www.quancha.cn/www/fyzb.php:23.php 狀態(tài)頁面 pm.status_path = /phpfpm_status #開啟php的狀態(tài)頁面
配置文件
[root@nginx ~]# curl http://127.0.0.1/phpfpm_status pool: www #fpm池名稱,大多數(shù)為www process manager: dynamic #動(dòng)態(tài)管理phpfpm進(jìn)程 start time: 05/Jul/2016 #啟動(dòng)時(shí)間,如果重啟會(huì)發(fā)生變化 start since: 409 #php-fpm運(yùn)行時(shí)間 accepted conn: 22 #當(dāng)前池接受的連接數(shù) listen queue: 0 #請求等待隊(duì)列,如果這個(gè)值不為0,那么需要增加FPM的進(jìn)程數(shù)量 max listen queue: 0 #請求等待隊(duì)列最高的數(shù)量 listen queue len: 128 #請求等待隊(duì)列的長度 idle processes: 4 #php-fpm空閑的進(jìn)程數(shù)量 active processes: 1 #php-fpm活躍的進(jìn)程數(shù)量 total processes: 5 #php-fpm總的進(jìn)程數(shù)量 max active processes: 2 #php-fpm最大活躍的進(jìn)程數(shù)量(FPM啟動(dòng)開始計(jì)算) max children reached: 0 #進(jìn)程最大數(shù)量限制的次數(shù),如果數(shù)量不為0,則說明phpfpm最大進(jìn)程數(shù)量過小,可以適當(dāng)調(diào)整。4.PHP-FPM配置文件 4核16G、4核32G
[root@nginx ~]# cat /etc/php-fpm.d/www.conf [global] pid = /var/run/php-fpm.piderror_log = /var/log/php-fpm.log log_level = warning rlimit_files = 655350 events.mechanism = epoll[www] user = nginx group = nginx listen = 127.0.0.1:9000 listen.allowed_clients = 127.0.0.1pm = dynamic pm.max_children = 512 pm.start_servers = 32 pm.min_spare_servers = 32 pm.max_spare_servers = 64 pm.process_idle_timeout = 15s; pm.max_requests = 2048 pm.status_path = /phpfpm_status#php-www模塊錯(cuò)誤日志 php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php/php-www.log php_admin_flag[log_errors] = on#php慢查詢?nèi)罩?request_slowlog_timeout = 5s slowlog = /var/log/php-slow.log總結(jié)
nginx
硬件層面 代理比較的消耗CPU、內(nèi)存、 靜態(tài)比較消耗磁盤IO、網(wǎng)絡(luò)層面 網(wǎng)絡(luò)帶寬大小、傳輸速率、是否有丟包、系統(tǒng)層面 調(diào)整文件描述。 timewait重用應(yīng)用層面 nginx作為代理 keepalive 長連接服務(wù)層面 nginx作為靜態(tài) 瀏覽器緩存、文件傳輸、壓縮、防盜鏈、跨域訪問、CPU親和 nginx作為緩存 proxy_cache fastcgi_cache uwsgi_cache nginx作為安全 nginx+lua實(shí)現(xiàn)waf防火墻php
php.ini 錯(cuò)誤日志記錄、文件大小的調(diào)整、session會(huì)話共享的配置、禁止不必要的函數(shù)(與開發(fā)協(xié)商)php-fpm 監(jiān)聽地址、進(jìn)程的動(dòng)態(tài)調(diào)節(jié)、日志開啟。php狀態(tài) php自身監(jiān)控的狀態(tài)信息php慢查詢 什么時(shí)間、什么進(jìn)程、運(yùn)行什么文件、哪個(gè)函數(shù)、第幾行達(dá)到了超時(shí)時(shí)間轉(zhuǎn)載于:https://www.cnblogs.com/1naonao/p/11470403.html
總結(jié)