服務器配置 8核 16G
查看內存 free -h
nginx配置
worker_processes auto; ? ? ? ? # 自動檢測CPU核心數
worker_rlimit_nofile 65535; ? ? # 提高文件描述符限制
?
events {worker_connections 8192; ? # 每個worker的最大連接數multi_accept on; ? ? ? ? ? # 一次性接受所有連接use epoll; ? ? ? ? ? ? ? ? # 使用epoll事件模型
}
?
http {include mime.types;default_type application/octet-stream;sendfile on; ? ? ? ? ? ? ? # 高效文件傳輸tcp_nopush on; ? ? ? ? ? ? # 減少網絡包數量tcp_nodelay on; ? ? ? ? ? ? # 實時數據傳輸keepalive_timeout 65; ? ? ? # 長連接超時時間server_tokens off; ? ? ? ? # 隱藏Nginx版本信息# Gzip壓縮gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# 虛擬主機配置include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;
}
mysql數據庫調優
基本配置
[mysqld]
# 基礎設置
# 僅本地訪問
bind-address = 127.0.0.1 ? ?
port = 3306
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 最大連接數
max_connections = 300 ? ? ? ?
# 連接超時時間
wait_timeout = 600 ? ? ? ? ?
?
# 內存分配 (約占總內存的60%)
# InnoDB緩沖池大小
innodb_buffer_pool_size = 6G ?
# 日志文件大小
innodb_log_file_size = 512M ?
# MyISAM索引緩沖區
key_buffer_size = 128M ? ? ? ? ?
#排序操作緩沖區大小 推薦值:1M-8M,根據服務器內存和查詢復雜度調整 如從 2M 逐步增加到 4M、8M
sort_buffer_size = 4M ? ? ? ? ?
# 隨機讀緩沖區 ? ? ?
read_rnd_buffer_size = 4M ? ? ? ? ?
# JOIN操作緩沖區 ? ? ?
join_buffer_size = 4M ? ? ? ?
?
# 性能優化
# 平衡性能與安全性
innodb_flush_log_at_trx_commit = 2 ?
# 二進制日志同步頻率
sync_binlog = 100 ? ? ? ? ? ? ? ? ? ?
# IOPS估計值
innodb_io_capacity = 2000 ? ? ? ? ? ?
# 讀IO線程數
innodb_read_io_threads = 8 ? ? ? ? ?
# 寫IO線程數
innodb_write_io_threads = 8 ? ? ? ? ?
# 線程并發數
innodb_thread_concurrency = 16
?
# 在【mysqld】下加入以下配置(解決group by報錯解決)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
group_concat_max_len = 102400
# 時區設置
default-time_zone = '+8:00'
開啟緩慢sql日志
# 啟用慢查詢日志
slow_query_log = 1
# 慢查詢日志文件路徑
slow_query_log_file = /var/log/mysql/mysql-slow.log
# 設置慢查詢時間閾值(單位:秒)
long_query_time = 3
# 記錄未使用索引的查詢
log_queries_not_using_indexes = 1
php-fmp 配置優化
基礎配置
計算最大進程數# 計算平均php進程平均內存
ps -ylC php-fpm7.4 --sort:rss | awk '{sum+=$8; n++} END {print "平均內存(KB): " sum/n}'
# 計算最大進程數 PHP-FPM + MySQL 總內存建議控制在 12GB 左右(留 4GB 給系統)
# 可用內存(MB) ÷ 單個進程內存(MB) = 最大進程數
配置 /etc/php/7.4/fpm/pool.d/www.conf
[www]
pm = dynamic
; (1024MB*6) ÷ 32MB ≈ 192(pm.max_children值)
pm.max_children = 190 ? ? ?
; 初始進程數
pm.start_servers = 20 ? ?
; 最小空閑進程數
pm.min_spare_servers = 10 ?
; 最大空閑進程數
pm.max_spare_servers = 30 ? ?
; 空閑進程超時時間
pm.process_idle_timeout = 10s
; 單個請求最大執行時間(秒)
request_terminate_timeout = 30
; 慢請求日志閾值
request_slowlog_timeout = 5s ?
; 慢請求日志路徑
slowlog = /var/log/php7.4-fpm-slow.log
; 提高文件描述符限制
rlimit_files = 65535 ? ? ?
? ?
啟用 OPcache 默認啟動
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=1
opcache.fast_shutdown=1
壓力測試 ApacheBench
安裝
sudo apt install apache2-utils# 模擬1個客戶端請求100次:
ab -n 100 http://www.example.com/# 模擬100個客戶端請求10000次:
ab -n 10000 -c 100 http://www.example.com/# 調用POST方法的接口10次,傳輸的數據格式為JSON:
ab -n 10 -p json-file http://www.example.com/# 調用OPTIONS方法的接口10次:
ab -n 10 -m OPTIONS http://www.example.com/# 輸出每次請求的返回信息:
ab -n 10 -v 2 http://www.example.com/
測試效果顯著