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