(服务器环境:2c1G, 40G ESSD, 1Tb per month @30Mbps
CentOS 7.9 based on Linux 5.4 x86_64, BT Panel 7.7
Tengine 2.3.3, MySQL 5.6.50, PHP 8.0)
通用优化
加钱!
开启swap,适当设置swappiness值(个人设置在30左右)。
(升级Linux内核,)使用BBR拥塞控制算法,能一定程度减少TCP连接延迟。
同一台服务器上的软件间尽量换用Unix套接字提高数据交换效率。
使用性能更高的ECC证书和TLS v1.3。
普通优化
均在宝塔面板“软件设置-性能调整”中设置。
PHP
确保“PHP-FPM运行模式”为“动态模式。
max_children(最大子进程数)视内存大小而定(每个子进程需约20MB内存);
start_servers(服务启动后初始进程数),不用管,个人设置为4;
min/max _spare_servers(最 小/大 空闲进程数),空闲进程数达到最大值时清理其至最小值,
这里默认值比较大,我在小内存机器上将其设置为 3/5,实测能明显减少内存占用。
至于memcache因内存不够,故不考虑。
Nginx(Tengine)
入门级也没啥值得改的设置,若用Nginx处理图片等资源请求,可打开gzip压缩传输,用CPU资源换更短的下载时间
comp_level可选1~9,建议设置在1~5,视CPU、带宽和资源大小而自行决定
实测level 5效果明显,对于1M+的背景图片的下载速度可缩短至40%左右。
MySQL
换MariaDB! 换MariaDB! 换MariaDB! (bushi
好了现在真换Maria DB了。
这玩意内存占用是真滴特别高(那就换拥有比MySQL更纯正的MySQL血统的MariaDB
先在性能调整选择相应的优化方案,然后正常使用一段时间之后去”当前状态“查看各指标情况,
其中每项数据指标都有相应的修改建议,参考内存大小适量修改即可。
对于InnoDB,key_buffer_size
可以适当缩小
简单分析Waterfall图表
按F12打开开发者模式,进入Network选项卡,使用Shift+F5
或 Ctrl+Shift+R
不使用缓存刷新。
看Waterfall Chart里Request/Response的数据:Request sent、Waiting (TTFB)、Content Download:
TFFB(Time to First Byte
顾名思义,从发送请求到开始收到服务器响应的时间
若该时间过长(不考虑网络流量延迟),则是服务器处理请求时间较长,可以查看MySQL查询线程是否堵塞,PHP队列长度是否合适,(Nginx在低负载情况下似乎不会拖后腿
Content Download
若该时间过长,对于存储在该服务器上的资源可以开启BBR拥塞控制算法、选择适当的gzip_comp_level缩短下载时间。
若资源没存储在该服务器上可以换个好点的图床或者CDN。
别换MariaDB了,占用一样高qwq。
究极优化:换Typecho。