lwan 是一個高性能和可伸縮的 web 伺服器軟體,支援 glibc/linux 平台。
lwan 開發了将近 3 年時間,目前還是個人研究的成果。主要是為了建構一個堅固、輕量級高性能的 web 伺服器。
特點:
占用記憶體低 (1萬個空閑連接配接隻占用 ~500kib)
最小化的記憶體配置設定和拷貝
最小化的系統調用
精确的 http 請求解析
使用最高效的方法來處理檔案服務
大于 16k 的檔案不需要進行核心和使用者層的拷貝
更小的檔案使用記憶體映射緩沖向量 i/o 發送
處理壓縮小檔案時考慮header 開銷
大多數無等待、多線程設計
核心代碼隻有 7200 行左右
性能:
在一台使用 i7 處理器的筆記本上可以達到每秒 32 萬無磁盤通路的 http 請求。當通路磁盤,測試檔案在 16kb 時可達到每秒 29 萬個請求;而更大的檔案可到每秒 18.5 萬請求。以上測試使用 keep-alive 連接配接,如果不使用 keep-alive 這個數字可能降低 6 倍左右。
下圖是不同并發連接配接數測試的每秒請求數:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLkhTOyYWZwQGZmJWO4I2MhRmMkJ2NmhTYlJGZ5YTN1cDMwYzNwkDO28CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
其中綠線是使用如下示例代碼的 hello world 擴充應用,棕色線是 100 位元組的檔案。
此外 lwan 也提供 api 擴充,示例代碼: