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