本帖最後由 linux_c_py_php 於 2013-02-21 17:38 編輯 程式在論壇眾親友的給力指導下, 在公司核心部門的指導之下, 長串連效能最終達到了50萬qps, 短串連效能最終達到了7萬qps, 測試機器CPU為12核心, 64MB記憶體, 測試環境為單機lo網口. 程式基於epoll的EPOLLONESHOT選項, 充分利用了epoll的安全執行緒特性, 通過獨立的監聽線程最大化串連建立速率, 通過線程池配合epoll簡易的實現了Leader-Follower的程式結構, 對於各類商務邏輯能夠普遍適用. 程式最佳化過程中, 主要是2個瓶頸點的化解: 1, epoll安全執行緒, 所以內部的鎖會造成多線程共用epoll fd的瓶頸, 通過建立多組epoll fd, 減小鎖的競爭可以化解瓶頸, 充分利用硬體效能. 2, 短串連建立能力差, 未經過最佳化網路參數, 只能達到3萬/秒的建立能力, 經過參數最佳化, 可以達到8萬/秒的建立能力, 具體參數參考代碼裡的Readme. 代碼如下,最初的255行小代碼, 有明顯的瓶頸:(15萬QPS) server.tar.gz (1.85 KB, 下載次數: 89) 2013-02-18 00:02 上傳 下載次數: 89 一個server.c 解決上述兩個問題後的代碼, 能夠支撐50萬qps: lfepoll.tar.gz (2.69 KB, 下載次數: 106) 2013-02-19 17:48 上傳 下載次數: 106 真的很高效了. 這是引入了lua的代碼, 不支援yield, 因為考慮到需要把代碼改成狀態機器的太費勁, 並且程式本身就是leader-folllower的, 所以提供一些非同步connect等實用介面的必要性不大: lfepoll.tar.gz (4.27 KB, 下載次數: 33) 2013-02-21 15:09 上傳 下載次數: 33 支援lua(剛才傳錯了!) 測試lua版本效能, 發現luaL_loadstring頻繁調用效能損耗嚴重, 所以做成了只載入一次, 然後保持一份引用在註冊表裡, 以便重複使用, 現在程式瓶頸已經轉移到了lua_pcall, 目測已經無法最佳化了.(注意測試前修改logic.lua, 改為純echo服務, 否則會導致test壓力工具工作不正常) lfepoll.tar.gz (4.38 KB, 下載次數: 36) 2013-02-21 16:55 上傳 下載次數: 36 最佳化luaL_loadstring |