LNMP(Linux + Nginx + MySQL + PHP)是常见的Web服务架构,以下是从各个层面进行性能优化的建议:
内核参数调整
# 编辑/etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_syn_backlog = 8192
net.core.somaxconn = 32768
vm.swappiness = 10
执行sysctl -p
生效
文件描述符限制
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
磁盘I/O优化
noatime,nodiratime
配置优化
worker_processes auto; # 自动设置为CPU核心数
worker_connections 10240;
multi_accept on;
use epoll;
# 开启gzip压缩
gzip on;
gzip_min_length 1k;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
# 静态文件缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
}
启用HTTP/2
listen 443 ssl http2;
启用Brotli压缩(需安装模块)
brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
配置优化(my.cnf)
[mysqld]
innodb_buffer_pool_size = 总内存的50-70%
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2 # 非关键业务可设为2
sync_binlog = 0
query_cache_type = 0 # MySQL 8.0已移除查询缓存
max_connections = 500
table_open_cache = 2000
索引优化
ANALYZE TABLE
更新统计信息查询优化
PHP-FPM配置
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500 # 防止内存泄漏
OPcache启用
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
其他优化
对象缓存
页面缓存
数据库缓存
监控工具
定期维护
压力测试
ab -n 10000 -c 100 http://example.com/
wrk -t4 -c1000 -d30s http://example.com/
通过以上优化,LNMP环境的性能通常能有显著提升。具体配置应根据服务器硬件配置和实际业务需求进行调整。