上一篇 下一篇 分享链接 返回 返回顶部

云服务器怎么优化性能?Nginx、PHP、MySQL调优指南

发布人:百脉云计算 发布时间:9小时前 阅读量:2

服务器跑起来后,性能优化是提升用户体验的关键。很多时候不是配置不够,而是参数没调好。Nginx、PHP-FPM、MySQL都有各自的调优参数,合理配置后,同样的配置可以支撑更高的并发。本文给出具体的调优参数和配置建议。

一、Nginx调优

Nginx是Web服务器,负责接收用户请求、转发给PHP-FPM、返回响应。调优Nginx可以提升并发处理能力。

第一是worker_processes。这个参数决定Nginx的工作进程数,建议设置为CPU核心数。配置:worker_processes auto;,让Nginx自动检测核心数。

第二是worker_connections。这个参数决定每个工作进程的最大连接数,建议设置为10240或更高。配置:events { worker_connections 10240; }。Nginx的最大连接数是worker_processes × worker_connections。

第三是keepalive_timeout。这个参数决定长连接的保持时间,适当增大可以减少连接建立的开销。配置:keepalive_timeout 65;。

第四是gzip压缩。开启gzip压缩可以减少传输体积,提升加载速度。配置:gzip on; gzip_types text/plain text/css application/json application/javascript;。

第五是静态资源缓存。配置浏览器缓存,减少重复请求。配置:location ~* \.(jpg|png|css|js)$ { expires 30d; }。

第六是缓冲区大小。适当增大缓冲区,减少磁盘IO。配置:client_body_buffer_size 128k; client_max_body_size 100m;。

需要查看各机房的配置和实时价格,可以访问广州BGP云服务器产品页结合账号情况查看。

二、PHP-FPM调优

PHP-FPM是PHP的进程管理器,负责执行PHP脚本。调优PHP-FPM可以提升PHP处理能力。

第一是进程管理模式。pm参数有三种模式:static(固定进程数)、dynamic(动态调整)、ondemand(按需启动)。生产环境建议用dynamic,兼顾性能和资源。配置:pm = dynamic;。

第二是进程数。pm.max_children决定最大进程数,根据内存和每个进程的内存占用计算。比如8G内存,每个PHP进程占50MB,最多可以开160个进程。建议预留余量,设置120-140。配置:pm.max_children = 120;。

第三是空闲进程数。pm.start_servers决定启动时的进程数,pm.min_spare_servers和pm.max_spare_servers决定空闲进程的范围。配置:pm.start_servers = 20; pm.min_spare_servers = 10; pm.max_spare_servers = 30;。

第四是最大请求数。pm.max_requests决定每个进程处理多少个请求后重启,防止内存泄漏。配置:pm.max_requests = 500;。

第五是OPcache。OPcache缓存PHP编译后的字节码,减少重复编译。配置:opcache.enable=1; opcache.memory_consumption=128; opcache.max_accelerated_files=10000;。

第六是超时时间。max_execution_time决定PHP脚本的最大执行时间,根据业务调整。配置:max_execution_time = 300;。

三、MySQL调优

MySQL是数据库,负责存储和查询数据。调优MySQL可以提升查询速度。

第一是InnoDB缓冲池。innodb_buffer_pool_size决定缓冲池大小,建议设置为内存的50%-70%。配置:innodb_buffer_pool_size = 4G;。缓冲池越大,缓存的数据和索引越多,磁盘IO越少。

第二是日志缓冲区。innodb_log_buffer_size决定日志缓冲区大小,适当增大可以减少磁盘写入。配置:innodb_log_buffer_size = 16M;。

第三是连接数。max_connections决定最大连接数,根据业务并发调整。配置:max_connections = 500;。注意连接数过多会消耗内存,需要平衡。

第四是查询缓存。MySQL 8.0已移除查询缓存,5.7及以下可以开启。配置:query_cache_size = 64M; query_cache_type = 1;。但查询缓存有锁竞争问题,高并发下可能反而降低性能。

第五是慢查询日志。开启慢查询日志,记录执行慢的SQL。配置:slow_query_log = 1; long_query_time = 2;。定期分析慢查询,优化索引或SQL。

第六是临时表。tmp_table_size和max_heap_table_size决定内存临时表的大小,适当增大可以减少磁盘临时表。配置:tmp_table_size = 64M; max_heap_table_size = 64M;。

四、调优参数对照

组件 参数 建议值 作用
Nginx worker_processes auto 工作进程数
Nginx worker_connections 10240 单进程连接数
Nginx gzip on 压缩传输
PHP-FPM pm.max_children 内存/50MB 最大进程数
PHP-FPM opcache.enable 1 字节码缓存
MySQL innodb_buffer_pool_size 内存50%-70% 缓冲池大小
MySQL slow_query_log 1 慢查询日志

五、系统层调优

除了应用层,系统层也有一些调优参数。

第一是文件描述符。Linux默认的文件描述符上限是1024,高并发场景下不够。配置:ulimit -n 65535,并在/etc/security/limits.conf中永久生效。

第二是TCP参数。调整TCP连接队列、TIME_WAIT回收、端口范围等。配置示例:

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535

第三是文件系统。挂载时使用noatime选项,减少元数据写入。配置:mount -o noatime /dev/sda1 /data。

第四是Swap。建议关闭Swap或设置较小的Swap,避免内存不足时性能急剧下降。配置:swapoff -a。

第五是内核参数。根据业务特点调整内核参数,比如文件句柄数、网络缓冲区等。关于系统参数调优的更多细节,可以参考服务器延迟怎么降低一文中关于TCP参数调优的说明。

六、调优的注意事项

第一是不要盲目调优。调优前先用监控数据定位瓶颈,是CPU、内存、磁盘还是网络。针对瓶颈调优才有效。

第二是逐步调整。每次调整一个参数,观察效果,再调整下一个。同时调整多个参数,无法判断哪个起作用。

第三是记录配置。调优后的配置要记录,便于回滚和复制到其他服务器。

第四是压测验证。调优后用压测工具验证效果,对比调优前后的吞吐量和响应时间。

第五是不要超配。调优有上限,如果业务增长超过配置上限,需要升级配置。调优是提升资源利用率,不是无限提升性能。关于配置选型的逻辑,可以参考云服务器配置怎么选一文中关于CPU和内存匹配的说明。

七、小结

云服务器性能优化从Nginx、PHP-FPM、MySQL三个层面入手,配合系统层调优。Nginx调worker_processes、worker_connections、gzip;PHP-FPM调pm.max_children、OPcache;MySQL调innodb_buffer_pool_size、慢查询日志;系统层调文件描述符、TCP参数、文件系统。调优前先定位瓶颈,逐步调整,压测验证。调优可以提升资源利用率,但业务增长超过配置上限时,仍需升级配置。广州BGP机房配置梯度完整,适合不同规模的业务。

目录结构
全文