-
項目背景
公司為縮減服務器成本,需要對WMS系統服務器CPU核數進行縮容,需要在新的服務器上對核心接口及主要業務流程進行壓測,評測新服務器上的應用是否滿足預期性能指標
-
測試場景
4級、5級掃碼接口混合場景
-
測試環境
應用 |
配置 |
數量 |
MCS(單實例,其它應用混合部署) |
16C/64G/SAS Raid10 |
1 |
Mysql |
16C/128G/SSD Raid5 |
1 |
壓力機 |
16C/64G/SAS Raid10 |
1 |
-
網絡環境
公司內網
-
問題描述
Jmeter壓測時,應用負載波動很大,持續幾十秒鍾之后,使用user使率下降到個位數,sys使用率突然上升到90%以上
-
問題排查
- 查看應用日志並沒有報錯異常
- 查看Mysql資源使用率(一直不高)
- 降低並發數,問題仍然存在,只不過user使用率下降周期變長,sys使用率仍然飆到90%
- Dump應用線程,發現大量線程都在Waiting狀態
5. 增加Tomcat連接池到1000,問題仍然存在
6. strace查看應用進程發現有 Connection time out的錯誤
7. 通過步驟6的線索,查看應用端口連接狀態,發現有2w多的timeout狀態的連接。
看到這就知道問題所在了,如果客戶端的並發量持續很高,會出現大量處於timewait狀態的連接,會使服務器因端口資源不足而拒絕為一部分客戶端請求。修改內核參數之后問題解決,修改內容如下:
sysctl -w net.ipv4.tcp_tw_reuse
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.ip_local_port_range="2048 65000"