linux大内存拷贝优化,Linux 下基础设施及系统网络优化
基礎(chǔ)設(shè)施優(yōu)化
CPU 優(yōu)化
多級緩存
充分利用 cache 是 CPU 調(diào)優(yōu)的重要手段,由于是底層優(yōu)化作用范圍廣。
性能分析利器——Perf 參數(shù)學(xué)習(xí)
提升 cache 命中率
緩存命中: CPU 要取的數(shù)據(jù)再一級緩存內(nèi),直接讀取,稱為 cache 命中率
使用 Perf 查看 Data[i][j] 和 Data[j][i] 性能對比。
對于一個(gè)二維數(shù)組,是先遍歷后排序還是先排序后遍歷性能更好。
提升多核 cache 命中率
若發(fā)生 CPU 切換,則之前 L1 和 L2 cache 會(huì)發(fā)生切換(L1 和 L2 每個(gè)CPU單獨(dú)擁有, L3 多個(gè) CPU 公用),優(yōu)化會(huì)失效。
綁定到 CPU 比不綁定 CPU 性能更加。
小結(jié):
數(shù)據(jù) cache 命中率提升
命令 cache 命中率提升
CPU 綁定
內(nèi)存優(yōu)化
應(yīng)用程序分配內(nèi)存過程
業(yè)務(wù)代碼-->應(yīng)用層內(nèi)存池-->C 庫內(nèi)存池--> 操作系統(tǒng)內(nèi)存分配
linux 默認(rèn) C 庫內(nèi)存池 Ptmalloc2
cat /proc/${PID}/maps 查看內(nèi)存分配
堆內(nèi)存最小分配132k
堆內(nèi)存最好盡早釋放
Tcmalloc C 庫內(nèi)存池適合小內(nèi)存分配,中大內(nèi)存分配不如 Ptmalloc2
界限:0-256k 小 256k-1M 中 1M 以上 大
Tcmalloc: 多線程、256k 以下
Ptmalloc2: 通用性好,大內(nèi)存
堆和棧內(nèi)存
棧速度快,缺點(diǎn):容量和聲明周期
磁盤優(yōu)化
磁盤常常是瓶頸所在
優(yōu)化技術(shù)
零拷貝(緩存 IO 技術(shù))
網(wǎng)卡支持 SG-DMA 還可以更快。
缺陷:大文件傳輸 PageCache 技術(shù)的缺陷。
直接 IO + 異步 IO
大文件傳輸可以使用此方法。
系統(tǒng)網(wǎng)絡(luò)優(yōu)化
TCP 握手優(yōu)化
SYN 請求優(yōu)化
服務(wù)端優(yōu)化
SYN 半隊(duì)列溢出
netstat -s 可以查看由隊(duì)列滿引起的連接失敗次數(shù)
設(shè)置 syncookie ,可以在隊(duì)列滿后繼續(xù)建立連接, 參數(shù)含義如下:
0:關(guān)閉
1:隊(duì)列滿開啟
2:無條件開啟
accept 隊(duì)列溢出
linux 默認(rèn)丟棄新連接,設(shè)置 tcp_abort_on_overflow 參數(shù),可以發(fā)送 RST 給客戶端。 參數(shù)含義如下:
0:丟棄
1:發(fā) RST 給客戶端
繞過三次握手發(fā)送數(shù)據(jù)
Goole 統(tǒng)計(jì),三次握手在 http 請求時(shí)間中占了 10% ~ 30%。
TFO 實(shí)現(xiàn)過程:
正常三次握手
SYN 攜帶數(shù)據(jù)
設(shè)置系統(tǒng)參數(shù) tcp_fastopen 來使用 TFO, 需要客戶端和服務(wù)器同時(shí)支持。
TCP 揮手優(yōu)化
Close 函數(shù)
Shutdown 函數(shù)
tcp_orphan_retries: 控制主動(dòng)方重傳 FIN 的次數(shù),默認(rèn)值為 0,表示 8 次
FIN_WAIT_1
tcp_max_orphans
tcp_fin_timeout
被動(dòng)方參數(shù)優(yōu)化
netstat 發(fā)現(xiàn)大量 close_wait
總結(jié)
以上是生活随笔為你收集整理的linux大内存拷贝优化,Linux 下基础设施及系统网络优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python从爬虫到数据分析项目_零基础
- 下一篇: 104 规约模拟器linux,变电站自动