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