性能优化概述
目錄
- 性能優化概述
- 壓力測試工具
- 了解影響性能指標
- 系統性能優化
- 代理服務優化
- 配置nginx代理服務使用長連接方式
- 對于fastcgi服務器,需要設置fastcgi_keep_conn以便保持長連接[flag]
- keepalive_requests設置通過一個keepalive連接提供的最大請求數,在發出最大請求數后,將關閉連接。
- keepalive_timeout設置超時,再次期間與代理服務器的空閑keepalive連接將保持打開狀態。
- 靜態資源緩存
- 瀏覽器無緩存
- 瀏覽器有緩存
- 瀏覽器過期校驗機制
- 取消緩存
- 靜態資源壓縮
- 針對圖片
- 針對txt
- 防止資源盜鏈
- 生產實踐
- 允許跨域訪問
- 1.配置a網站
- 2.配置b網站
- 3.通過瀏覽器測試跨域訪問
- 4.在b網站上允許a網站跨域訪問
- cpu親和
- 1.查看當前CPU物理狀態
- 修改nginx啟動的work進程為自動
- Nginx通用配置 Nginx代理相關配置 Nginx Fastcgi
- Nginx安全與優化總結
- php優化
- 1.php程序配置管理文件/etc/php.ini,主要調整日志、文件上傳、禁止危險函數、關閉版本號顯示、等
- 2.php-fpm進程管理配置文件/etc/php-fpm.conf
- 3.php 狀態頁面 pm.status_path = /phpfpm_status #開啟php的狀態頁面
- 4.PHP-FPM配置文件 4核16G、4核32G
- 總結
性能優化概述
1、了解每個服務
2、需要了解業務模式
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使用的靜態頁面 [root@lb01 conf.d]# echo "nginx ab" > /code/ad.html#配置tomcat使用的靜態頁面 [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處理靜態資源 [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處理靜態資源 [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了解影響性能指標
1、網絡(1)網絡的流量(2)網絡是否丟包(3)這些會影響http的請求與調用 2、系統(1)硬件有沒有磁盤損壞,磁盤速率(2)系統的負載、內存、系統穩定性 3、服務(1)連接優化。請求優化(2)根據業務形態做對應的服務設置 4、程序(1)接口性能(2)處理速度(3)程序執行效率 5、數據庫#每個服務與服務之間都或多或少有一些關聯,我們需要將整個架構進行分層,找到對應系統或服務的短板,然后進行優化系統性能優化
文件句柄,Linux一切皆文件,文件句柄可以理解為就是一個索引,文件句柄會隨著我們進程的調用頻繁增加,系統默認文件句柄是有限制的,不能讓一個進程無限的調用,所以我們需要限制每個 進程和每個服務使用多大的文件句柄,文件句柄也是必須要調整的優化參數。
文件句柄的設置方式:
1、系統全局性修改。
2、用戶局部性修改。
3、進程局部性修改。
在高并發短連接的TCP服務器上,當服務器處理完請求后立刻主動正常關閉連接。這個場景下會出現大量socket處于TIME_WAIT狀態。如果客戶端的并發量持續很高,此時部分客戶端就會顯示連接不上。 我來解釋下這個場景。主動正常關閉TCP連接,都會出現TIMEWAIT。
為什么我們要關注這個高并發短連接呢?有兩個方面需要注意: 1. 高并發可以讓服務器在短時間范圍內同時占用大量端口,而端口有個0~65535的范圍,并不是很多,刨除系統和其他服務要用的,剩下的就更少了。 2. 在這個場景中,短連接表示“業務處理+傳輸數據的時間 遠遠小于 TIMEWAIT超時的時間”的連接。
這里有個相對長短的概念,比如取一個web頁面,1秒鐘的http短連接處理完業務,在關閉連接之后,這個業務用過的端口會停留在TIMEWAIT狀態幾分鐘,而這幾分鐘,其他HTTP請求來臨的時候是無法占用此端口的(占著茅坑不拉翔)。單用這個業務計算服務器的利用率會發現,服務器干正經事的時間和端口(資源)被掛著無法被使用的時間的比例是 1:幾百,服務器資源嚴重浪費。(說個題外話,從這個意義出發來考慮服務器性能調優的話,長連接業務的服務就不需要考慮TIMEWAIT狀態。同時,假如你對服務器業務場景非常熟悉,你會發現,在實際業務場景中,一般長連接對應的業務的并發量并不會很高。
代理服務優化
配置nginx代理服務使用長連接方式
upstream http_backend {server 127.0.0.1:8080;keepalive 16; #長連接 }server {...location /http/ {proxy_pass http://http_backend;proxy_http_version 1.1; #對于http協議應該指定為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超時時間proxy_read_timeout 60s; # 代理等待web響應超時時間proxy_send_timeout 60s; # web回傳數據至代理超時時間proxy_buffering on; # 開啟代理緩沖區,web回傳數據至緩沖區,代理邊收邊傳返回給客戶端proxy_buffer_size 32k; # 代理接收web響應的頭信息的緩沖區大小proxy_buffers 4 128k; # 緩沖代理接收單個長連接內包含的web響應的數量和大小...} }對于fastcgi服務器,需要設置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設置通過一個keepalive連接提供的最大請求數,在發出最大請求數后,將關閉連接。
Syntax: keepalive_requests number; Default: keepalive_requests 100; Context: upstreamkeepalive_timeout設置超時,再次期間與代理服務器的空閑keepalive連接將保持打開狀態。
Syntax: keepalive_timeout timeout; Default: keepalive_timeout 60s; Context: upstream#該指令出現在1.15.3版中注意:
1.scgi和uwsgi協議沒有保持連接的概念。
2.但無論是proxy、fastcgi、uwsgi協議都有cache緩存的功能,開啟后可加速網站訪問的效率。(取決硬件)
靜態資源緩存
瀏覽器無緩存
瀏覽器有緩存
瀏覽器過期校驗機制
瀏覽器If-None-Match "9-1550193224000" 詢問 web服務器 etag "9-1550193224000" 瀏覽器認為只是緩存過期,內容并沒有修改,所以協商后還是304 瀏覽器If-Modified-Since Tue, 29 Jan 2019 02:29:51 GMT詢問 web服務器 Last-Modified: Tue, 29 Jan 2019 02:29:51 GMT 瀏覽器認為只是緩存過期,內容并沒有修改,所以協商后還是304配置靜態資源緩存場景
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; } }靜態資源壓縮
文件讀取高效sendfile,如下圖
Syntax: sendfile on | off; Default: sendfile off; Context: http, server, location, if in location傳統讀取文件方式 與 sendfile讀取文件方式
將多個包一次發送,用于提升網絡傳輸效率,大文件推薦打開,需要開啟sendfile才行
Syntax: tcp_nopush on | off; Default: tcp_nopush off; Context: http, server, location提高網絡傳輸實時性,需要開啟keepalive,來一個包發一個包不等待
Syntax: tcp_nodelay on | off; Default: tcpnodelay off; Context: http, server, locationgzip壓縮比率,加快傳輸,但壓縮本身比較耗費服務器性能
Syntax: gzip_comp_level level; Default:gzip_comp_level level 1; Context: http, server, locationgzip壓縮協議版本,壓縮使用在http哪個協議,主流選擇1.1版本
Syntax: gzip_http_version 1.0 | 1.1; Default:gzip_http_version 1.1; Context: http, server, location針對圖片
location ~* .*\.(jpg|gif|png)$ {root /code/images;gzip on;gzip_http_version 1.1;gzip_comp_level 2; #極致為9,壓縮的級別gzip_types image/jpeg image/gif image/png; #文件格式}針對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;} }防止資源盜鏈
防盜鏈,指的是防止資源被其他網站惡意盜用。
基礎防盜鏈設置思路:主要是針對客戶端請求過程中所攜帶的一些Header信息來驗證請求的合法性,比如客戶端在請求的過程中都會攜帶referer信息。優點是規則簡單,配置和使用都很方便,缺點是防盜鏈所依賴的Referer驗證信息是可以偽造的,所以通過referer信息防盜鏈并非100%可靠,但是他能夠限制大部分的盜鏈情況。
Syntax: valid_referers none | blocked | server_name | string ...; Default: -; Context: server, location#none: referer來源頭部為空的情況 #blocked: referer來源頭部不為空,這些都不以http://或者https://開頭 #server_name: 來源頭部信息包含當前域名,可以正則匹配 Syntax: valid_referers none | blocked | server_name | string ...; Default: -; Context: server, location#none: referer來源頭部為空的情況 #blocked: referer來源頭部不為空,這些都不以http://或者https://開頭 #server_name: 來源頭部信息包含當前域名,可以正則匹配5.4.1 在盜鏈服務器上準備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 服務器上配置防盜鏈
location ~ .*\.(jpg|png|gif) {root /data;valid_referers none blocked 39.104.205.72;if ( $invalid_referer ) {return 403;} }以上配置含義表示,所有來自39.104.205.72都可以訪問到當前站點的圖片,如果來源域名不在這個列表中,那么$invalid_referer等于1,在if語句中返回一個403個客戶,這樣用戶便會看到一個403的頁面
5.4.4 如果不使用return而是用rewrite,那么盜鏈圖片會返回一個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 如果希望某些網站可以盜鏈
location ~ .*\.(jpg|png|gif) {root /data;valid_referers none blocked 39.104.205.72 server_name ~\.google\. ~\.baidu\.;if ( $invalid_referer ) {return 403;} }當然這種防護并不能百分百保證資源不被盜鏈,因為我們可以通過命令來修改來源的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生產實踐
1.配置網站
[root@web02 conf.d]# cat static.conf server {listen 80;server_name static.oldboy.com;root /code; location / {index index.html; } }2.上傳2張圖片
? 一張是可以被盜鏈的圖片
? 一張是廣告位的圖片
重啟服務器
[root@web02 code]# systemctl restart nginx3.配置盜鏈服務器
[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"/> #根據情況修改你的服務器地址 </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網站
[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網站
3.通過瀏覽器測試跨域訪問
4.在b網站上允許a網站跨域訪問
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.查看當前CPU物理狀態
[root@nginx ~]# lscpu |grep "CPU(s)" CPU(s): 24 #總的核心數 On-line CPU(s) list: 0-23 每個物理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 #本次演示服務器為 兩顆物理cpu,每顆物理CPU12個核心, 總共有24個核心修改nginx啟動的work進程為自動
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 不推薦調整的方式# 第一種綁定組合方式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代理相關配置 Nginx Fastcgi
[root@nginx ~]# cat nginx.conf user www; # nginx進程啟動用戶 worker_processes auto; #與cpu核心一致即可 worker_cpu_affinity auto; # cpu親和error_log /var/log/nginx/error.log warn; # 錯誤日志 pid /run/nginx.pid; worker_rlimit_nofile 35535; #每個work能打開的文件描述符,調整至1w以上,負荷較高建議2-3wevents {use epoll; # 使用epoll高效網絡模型worker_connections 10240; # 限制每個進程能處理多少個連接,10240x[cpu核心] }http {include mime.types;default_type application/octet-stream;charset utf-8; # 統一使用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版本號 client_max_body_size 200m; # 文件上傳大小限制調整# 文件高效傳輸,靜態資源服務器建議打開 sendfile on; tcp_nopush on; # 文件實時傳輸,動態資源服務建議打開,需要打開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; # 虛擬主機 include /etc/nginx/conf.d/*.conf; }Nginx安全與優化總結
1.cpu親和、worker進程數、調整每個worker進程打開的文件數
2.使用epool網絡模型、調整每個worker進程的最大連接數
3.文件的高效讀取sendfile、nopush、
4.文件的傳輸實時性、nodealy
5.開啟tcp長鏈接、以及長鏈接超時時間keepalived
6.開啟文件傳輸壓縮gzip
7.開啟靜態文件expires緩存
8.隱藏Nginx的版本號
9.禁止通過IP地址訪問,禁止惡意域名解析,只允許域名訪問
10.配置放盜鏈、以及跨域訪問
11.防DDOS、cc攻擊, 限制單IP并發連接,以及http請求
12.優雅限制nginx錯誤頁面
13.nginx加密傳輸https優化
14.nginx proxy_cache、fastcgi_cache、uwsgi_cache緩存
squid、varnish()
php優化
1.php程序配置管理文件/etc/php.ini,主要調整日志、文件上傳、禁止危險函數、關閉版本號顯示、等
#;;;;;;;;;;;;;;;;;Error logging ; #錯誤日志設置#;;;;;;;;;;;;;;;;; expose_php = Off # 關閉php版本信息 display_error = Off # 屏幕不顯示錯誤日志 error_reporting = E_ALL # 記錄PHP的每個錯誤 log_errors = On # 開啟錯誤日志 error_log = /var/log/php_error.log # 錯誤日志寫入的位置 date.timezone = Asia/Shanghai # 調整時區,默認PRC#;;;;;;;;;;;;;;;File Uploads ; #文件上傳設置#;;;;;;;;;;;;;;; file_uploads = On # 允許文件上傳 upload_max_filesize = 300M # 允許上傳文件的最大大小 post_max_size = 300M # 允許客戶端單個POST請求發送的最大數據 max_file_uploads = 20 # 允許同時上傳的文件的最大數量 memory_limit = 128M # 每個腳本執行最大內存[Session] #會話共享 session.save_handler = redis session.save_path = "tcp://172.16.1.51:6379" #有密碼寫?auth=https://blog.csdn.net/unixtech/article/details/53761832 #php禁止危險函數執行(取決于實際情況,需要和開發溝通) disable_functions = chown,chmod,pfsockopen,phpinfo2.php-fpm進程管理配置文件/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 #錯誤日志存放的位置 ;log_level = error #日志級別, alert, error, warning, notice, debug rlimit_files = 65535 #php-fpm進程能打開的文件數 ;events.mechanism = epoll #使用epoll事件模型處理請求#第三部分,進程池定義 [www] #池名稱 user = www #進程運行的用戶 group = www #進程運行的組 ;listen = /dev/shm/php-fpm.sock #監聽在本地socket文件 listen = 127.0.0.1:9000 #監聽在本地tcp的9000端口 ;listen.allowed_clients = 127.0.0.1 #允許訪問FastCGI進程的IP,any不限制 pm = dynamic #動態調節php-fpm的進程數 pm.max_children = 512 #最大啟動的php-fpm進程數 pm.start_servers = 32 #初始啟動的php-fpm進程數 pm.min_spare_servers = 32 #最少的空閑php-fpm進程數 pm.max_spare_servers = 64 #最大的空閑php-fpm進程數 pm.max_requests = 1500 #每一個進程能響應的請求數 pm.process_idle_timeout = 15s; pm.status_path = /phpfpm_status #開啟php的狀態頁面#第四部分,日志相關 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腳本執行超過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 狀態頁面 pm.status_path = /phpfpm_status #開啟php的狀態頁面
配置文件
[root@nginx ~]# curl http://127.0.0.1/phpfpm_status pool: www #fpm池名稱,大多數為www process manager: dynamic #動態管理phpfpm進程 start time: 05/Jul/2016 #啟動時間,如果重啟會發生變化 start since: 409 #php-fpm運行時間 accepted conn: 22 #當前池接受的連接數 listen queue: 0 #請求等待隊列,如果這個值不為0,那么需要增加FPM的進程數量 max listen queue: 0 #請求等待隊列最高的數量 listen queue len: 128 #請求等待隊列的長度 idle processes: 4 #php-fpm空閑的進程數量 active processes: 1 #php-fpm活躍的進程數量 total processes: 5 #php-fpm總的進程數量 max active processes: 2 #php-fpm最大活躍的進程數量(FPM啟動開始計算) max children reached: 0 #進程最大數量限制的次數,如果數量不為0,則說明phpfpm最大進程數量過小,可以適當調整。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模塊錯誤日志 php_flag[display_errors] = off php_admin_value[error_log] = /var/log/php/php-www.log php_admin_flag[log_errors] = on#php慢查詢日志 request_slowlog_timeout = 5s slowlog = /var/log/php-slow.log總結
nginx
硬件層面 代理比較的消耗CPU、內存、 靜態比較消耗磁盤IO、網絡層面 網絡帶寬大小、傳輸速率、是否有丟包、系統層面 調整文件描述。 timewait重用應用層面 nginx作為代理 keepalive 長連接服務層面 nginx作為靜態 瀏覽器緩存、文件傳輸、壓縮、防盜鏈、跨域訪問、CPU親和 nginx作為緩存 proxy_cache fastcgi_cache uwsgi_cache nginx作為安全 nginx+lua實現waf防火墻php
php.ini 錯誤日志記錄、文件大小的調整、session會話共享的配置、禁止不必要的函數(與開發協商)php-fpm 監聽地址、進程的動態調節、日志開啟。php狀態 php自身監控的狀態信息php慢查詢 什么時間、什么進程、運行什么文件、哪個函數、第幾行達到了超時時間轉載于:https://www.cnblogs.com/1naonao/p/11470403.html
總結