我正在写一个 TCP 长连接网关的压测代码,在 client 与 server 建立了 6w 个 conn 后,运行几分钟时间后 client 就异常退出了,没有 panic ,但控制台打印了很多下面的堆栈信息:
goroutine 119057 [sleep]:
time.Sleep(0x77359400)
C:/Users/Administrator/sdk/go1.19.7/src/runtime/time.go:195 +0x13c
command-line-arguments.runOneConn(0xc0004ded00, 0xc0008f4b18, 0xc0008f4b10, 0xea60, {0x8c2c91?, 0xc02a8a1fb0?, 0x1cff060?})
D:/dev_bg/server/src/gateway/main_test.go:201 +0x24d
command-line-arguments.TestTCPServer.func2(0x0?)
D:/dev_bg/server/src/gateway/main_test.go:120 +0x8a
created by command-line-arguments.TestTCPServer
D:/dev_bg/server/src/gateway/main_test.go:110 +0x1a6
goroutine 118925 [sleep]:
time.Sleep(0x77359400)
C:/Users/Administrator/sdk/go1.19.7/src/runtime/time.go:195 +0x13c
command-line-arguments.runOneConn(0xc0004ded00, 0xc0008f4b18, 0xc0008f4b10, 0xea60, {0x8c2c91?, 0xc024cc3fb0?, 0x1cff060?})
D:/dev_bg/server/src/gateway/main_test.go:201 +0x24d
command-line-arguments.TestTCPServer.func2(0x0?)
D:/dev_bg/server/src/gateway/main_test.go:120 +0x8a
created by command-line-arguments.TestTCPServer
D:/dev_bg/server/src/gateway/main_test.go:110 +0x1a6
...重复的堆栈信息
想请教一下如何排查这个问题,server 端是没有 err 的,server 和 client 都运行在一台机器上。
1
opengps 2023-07-17 16:59:59 +08:00
单个系统内,client 最大理论发起 65535 ,异常信息应该是没有端口可用
|
3
bv 2023-07-17 17:04:07 +08:00
这个堆栈看不出什么有用信息
|
4
lasuar OP @bv 我开始推断是 panic ,判断也许是因为输出太多覆盖了,加入了 panic 时写入文件的代码,但实际也没有触发此逻辑,说明也没有 panic 。但输出就是这个,我也懵,想知道有没有其他排查方式
|
5
bv 2023-07-17 17:26:09 +08:00
出错的时候,最上面的栈信息应该有用,你可以翻到最上面看一下。
|
8
zdt3476 2023-07-17 17:51:48 +08:00
@lasuar #2 大概率还是端口的问题,你如果没有修改过的话,可用端口号都是从 3w 多开始的,所以理论上用户可用的端口只有 3w 多
|
9
huigeer 2023-07-17 17:56:01 +08:00
看看系统日志? /var/log/message ,是不是被系统强制 kill 了?
|
12
zdt3476 2023-07-18 10:18:06 +08:00
@lasuar #10 之前没注意看,还以为你是 linux 。windows 的默认就更小了,你可以在 powershell 查看: netsh int ipv4 show dynamicport tcp 。默认应该是从 49152 到 65535 。
|