LNMP (Linux + Nginx + MySQL + PHP) 是常见的Web服务架构,以下是一套全面的性能优化方案:
# /etc/sysctl.conf 添加或修改以下参数
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.somaxconn = 65535
vm.swappiness = 10
执行 sysctl -p
使配置生效
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
noatime,nodiratime
worker_processes auto; # 自动设置为CPU核心数
worker_rlimit_nofile 65535;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100;
client_header_timeout 10;
client_body_timeout 10;
reset_timedout_connection on;
send_timeout 10;
# 开启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;
# 静态文件缓存
open_file_cache max=65535 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;
open_file_cache_errors on;
}
[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_thread_concurrency = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 8
key_buffer_size = 256M
max_connections = 300
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 4M
tmp_table_size = 256M
max_heap_table_size = 256M
table_open_cache = 2000
thread_cache_size = 100
wait_timeout = 300
interactive_timeout = 300
slow_query_log = 1
long_query_time = 2
-- 定期执行
OPTIMIZE TABLE 表名;
ANALYZE TABLE 表名;
pm = dynamic
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
request_terminate_timeout = 30s
request_slowlog_timeout = 5s
; 开启OPcache
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
opcache.enable_cli=1
// 在PHP应用中集成Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
add_header Cache-Control "public";
}
# 安装htop, nmon等监控工具
apt-get install htop nmon sysstat
配置logrotate定期清理日志
优化是一个持续的过程,建议: 1. 每次只修改一个配置项 2. 修改前后进行性能测试对比 3. 监控系统资源使用情况 4. 根据实际负载情况调整参数
以上配置需要根据您的服务器硬件配置和实际业务需求进行调整。