在 macOS 做伺服器壓力測試要注意的 1 項設定 — net.inet.tcp.msl

最近在 macOS 上面做 HTTP server 的壓力測試時,發現一件怪事:

「不論怎麼調整 Sever 的程式碼,壓力測試時都只能處理 16,000 個左右的 requests 」

一查才知道 macOS 大約只有 16,000 個 ports 可以供連線使用,每次連線結束就需要等約 15 秒的時間,被佔用的 port 才會重新恢復可以使用的狀態,這個情況導致 15 秒內平均每秒可以處理的連線數約在 1,000 左右。

如果要緩解這個問題,可以使用以下指令縮短等待時間,例如縮短到 100ms:

$ sudo sysctl -w net.inet.tcp.msl=100

mslMaximum segment lifetime 的縮寫。

恢復的指令:

$ sudo sysctl -w net.inet.tcp.msl=15000

另 1 種方法則是建議在 Linux 上面做壓力測試。

p.s. 其實 Linux 也可能會有類似的問題,它的 MSL 預設是 60 秒,只是它沒有 16,000 這個限制,所以遇到這個問題的可能性相對低很多。

Linux 查 msl 的指令:

$ sysctl -a | grep tcp_fin_timeout

參考資料

https://rocketeer.be/blog/2014/04/benchmarking-on-osx-http-timeouts/

Facebook Threads X

對抗久坐職業傷害

研究指出每天增加 2 小時坐著的時間,會增加大腸癌、心臟疾病、肺癌的風險,也造成肩頸、腰背疼痛等常見問題。

然而對抗這些問題,卻只需要工作時定期休息跟伸展身體即可!

你想輕鬆改變現狀嗎?試試看我們的 PomodoRoll 番茄鐘吧! PomodoRoll 番茄鐘會根據你所設定的專注時間,定期建議你 1 項辦公族適用的伸展運動,幫助你打敗久坐所帶來的傷害!

贊助我們的創作

看完這篇文章了嗎? 休息一下,喝杯咖啡吧!

如果你覺得 MyApollo 有讓你獲得實用的資訊,希望能看到更多的技術分享,邀請你贊助我們一杯咖啡,讓我們有更多的動力與精力繼續提供高品質的文章,感謝你的支持!