文章講述了關(guān)于Nginx和MySQL的性能配置優(yōu)化。文章首先介紹了問題背景,然后介紹了Nginx啟動時的錯誤提示,表明worker_connections超出了系統(tǒng)的文件描述符限制。
關(guān)于對Nginx和MySQL的性能配置優(yōu)化【測試成功】
原創(chuàng) 巴韭特鎖螺絲 巴韭特鎖螺絲 2024年08月21日 00:00 陜西
一、問題背景
在14核心、64G內(nèi)存的服務(wù)器運行業(yè)務(wù)系統(tǒng),用戶普遍反饋加載卡頓,且CPU占用很高,將其擴容到40核心CPU,其他不變。調(diào)整對應(yīng)程序參數(shù)。
二、Nginx配置優(yōu)化
1、nginx 啟動時提示 file resource limit
[root@cheliangweb mysql]# nginx
nginx: [warn] 100000 worker_connections exceed open file resource limit: 1024
這個警告表示 Nginx 的工作進程數(shù) worker_connections 超過了系統(tǒng)的文件描述符限制。Nginx 在處理并發(fā)連接時需要使用文件描述符,而文件描述符的數(shù)量受到系統(tǒng)的限制。
解決:
(1)查看系統(tǒng)文件描述符限制:ulimit -n
如果限制較低,需要修改系統(tǒng)的文件描述符限制。這可以在用戶的 shell 配置文件(例如 ~/.bashrc 或 /etc/security/limits.conf)中進行設(shè)置。
ulimit -n 4096
(2) 修改 Nginx 配置:
找到worker_connections參數(shù),并確保其值不超過文件描述符限制。
(3)重啟Nginx
2、nginx線程與連接優(yōu)化
(1)啟用 Keep-Alive參數(shù):
keepalive_timeout 65;
(2)合理配置worker_processes 參數(shù)
這個值的設(shè)定應(yīng)該根據(jù)服務(wù)器的硬件配置和工作負(fù)載來合理選擇。并不是越大越好,而是要根據(jù)具體情況進行調(diào)優(yōu)。
CPU 核數(shù): 通常,可以將 worker_processes 設(shè)置為等于服務(wù)器的 CPU 核數(shù),以充分利用服務(wù)器的多核性能。服務(wù)器有超線程(Hyper-Threading)技術(shù),可以考慮將其設(shè)置為實際物理核心數(shù)的一半。
并發(fā)連接數(shù): 考慮到每個 Nginx 工作進程能夠處理的并發(fā)連接數(shù),根據(jù)預(yù)計的并發(fā)請求量適度調(diào)整??梢酝ㄟ^以下公式估算:
worker_connections 參數(shù)用于配置每個 Nginx 工作進程能夠處理的最大并發(fā)連接數(shù)。
并發(fā)連接數(shù) = worker_processes * worker_connections
三、Mysql配置優(yōu)化
重要性能參數(shù)優(yōu)化:
innodb_buffer_pool_size:
這個參數(shù)決定了 InnoDB 存儲引擎使用的內(nèi)存緩沖池大小。通常建議將其設(shè)置為物理內(nèi)存的 50-75%。
例如,如果服務(wù)器有 16GB 的內(nèi)存,可以設(shè)置為 innodb_buffer_pool_size = 12GB。
innodb_log_file_size:
這個參數(shù)決定了 InnoDB 存儲引擎的事務(wù)日志文件大小。一般建議設(shè)置為 1GB 或更大。
例如,可以設(shè)置為 innodb_log_file_size = 1GB。
query_cache_size:
該參數(shù)控制查詢緩存的大小。對于高寫入負(fù)載的數(shù)據(jù)庫,建議將其設(shè)置為 0,因為查詢緩存在高并發(fā)寫入場景下性能不佳。
對于讀密集型的數(shù)據(jù)庫,可以考慮啟用查詢緩存,并設(shè)置一個適當(dāng)?shù)拇笮?。通常,可以設(shè)置為物理內(nèi)存的一小部分,例如 query_cache_size = 256MB。
示例:服務(wù)器CPU核心數(shù)40,64G內(nèi)存,1000M帶寬,這些參數(shù)應(yīng)該怎么設(shè)置?
在具有40個CPU核心和64GB內(nèi)存的服務(wù)器上,以下是MySQL配置參數(shù)的一些推薦設(shè)置。請注意,這些只是一般的建議,實際的最佳值可能會根據(jù)你的具體應(yīng)用和工作負(fù)載有所不同。
1. **innodb_buffer_pool_size**:這是InnoDB存儲引擎用于緩存數(shù)據(jù)和索引的內(nèi)存大小。對于專用的MySQL服務(wù)器,通常將此值設(shè)置為系統(tǒng)內(nèi)存的70-80%??梢栽O(shè)置為44GB(約等于64GB的70%)。
2. **innodb_log_file_size**:這是InnoDB存儲引擎的重做日志文件大小。一個常見的建議是將其設(shè)置為innodb_buffer_pool_size的25%??梢栽O(shè)置為11GB。
3. **innodb_flush_log_at_trx_commit**:這個參數(shù)決定了InnoDB存儲引擎何時將日志刷新到磁盤。如果需要最高的數(shù)據(jù)持久性,可以將其設(shè)置為1。可以接受在崩潰時丟失一秒鐘的事務(wù),可以將其設(shè)置為2,這通常可以提供更好的性能。
4. **query_cache_size**:這是查詢緩存的大小。然而,對于具有大量內(nèi)存的服務(wù)器,查詢緩存可能會成為性能瓶頸。在許多情況下,最好將query_cache_size設(shè)置為0,以禁用查詢緩存。
5. **max_connections**:這是MySQL服務(wù)器允許的最大并發(fā)連接數(shù)。這個值取決于你的應(yīng)用程序的并發(fā)需求。一個常見的開始值是100,但你可能需要根據(jù)你的應(yīng)用程序的需求進行調(diào)整。
6. **thread_cache_size**:這是線程緩存的大小。一個常見的建議是將其設(shè)置為max_connections的10%。在你的情況下,如果max_connections設(shè)置為100,那么thread_cache_size可以設(shè)置為10。
7. **table_open_cache**:這是表緩存的大小。一個常見的建議是將其設(shè)置為max_connections的2倍。在你的情況下,如果max_connections設(shè)置為100,那么table_open_cache可以設(shè)置為200。
8. **sort_buffer_size**:每個線程進行排序操作時所使用的緩沖區(qū)大小。默認(rèn)值通常就足夠了,除非你的應(yīng)用程序執(zhí)行了大量的復(fù)雜排序。
來源:本文內(nèi)容搜集或轉(zhuǎn)自各大網(wǎng)絡(luò)平臺,并已注明來源、出處,如果轉(zhuǎn)載侵犯您的版權(quán)或非授權(quán)發(fā)布,請聯(lián)系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內(nèi)容的準(zhǔn)確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負(fù)責(zé),僅作分享之用,文章版權(quán)及插圖屬于原作者。
Copyright©2013-2025 ?JSedu114 All Rights Reserved. 江蘇教育信息綜合發(fā)布查詢平臺保留所有權(quán)利
蘇公網(wǎng)安備32010402000125
蘇ICP備14051488號-3技術(shù)支持:南京博盛藍(lán)睿網(wǎng)絡(luò)科技有限公司
南京思必達教育科技有限公司版權(quán)所有 百度統(tǒng)計