前言
技术栈
操作系统 Ubuntu 20.04内核版本 Linux version 5.4.0-155-genericPython 3.11fastapi 0.99.1uvicorn 0.23.2
- uvicorn 监听端口 8003
用 jmeter 压测 fastapi/uvicorn 接口程序,大量报错:
java.net.SocketException: Connection resetorg.apache.http.NoHttpResponseException: ... failed to respond
服务器 cpu 和内存应用都不高,揣测是 tcp 连贯队列的问题
解决步骤
查看 tcp 连接数
ss -natp '( sport = :8003 )' | awk '{count[$1]++} END {for (word in count) print word, count[word]}'
查看应用程序 uvicorn 的 TCP 全连贯队列大小
# ss -nltp '( sport = :8003 )'State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 2048 0.0.0.0:8003 0.0.0.0:* users:(("uvicorn",pid=172724,fd=14))
这里的 Send-Q 就是全连贯队列大小,与 uvicorn 文档外面
backlog
2048 的默认值是对得上的查看操作系统半连贯队列大小
# sysctl -a | grep net.ipv4.tcp_max_syn_backlognet.ipv4.tcp_max_syn_backlog = 4096
查看操作系统全连贯队列大小
# sysctl -a | grep net.core.somaxconnnet.core.somaxconn = 4096
- TCP 连贯队列大小值能够批改
/etc/sysctl.conf
文件调整 排查后发现不是 tcp 连接池问题,有相干问题如下:
日志级别较低时输入日志太多影响性能与 redis 的连接数太多报错与 PostgreSQL 连接数太多报错
本文出自 qbit snap