aceld / aceld/zinx

CPU百分百-不懂就问系列

Abierto
#174 3 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Go
Estrellas
7.8k
Forks
1.3k
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

不懂就问:
不太了解如何调用,于是干脆把代码整个复制,我们是通过NGINX转发到 ZINX -TCP-SERVER上面的,也设了超时时间,每天交易笔数上万笔,
有的时候会CPU暴增,由于pprof没玩明白,只能靠现象盲猜,再某一时刻 突然会阻塞,CPU暴增300%,单独重启TCP服务无效,只能重启NGINX,再重启 TCP SERVER才能好使,看了下整个链路,盲猜可能是handler阻塞导致的 伪代码如下
```
func (c *Connection) CloseConn() {
c.Lock()
defer c.Unlock()
if c.isClosed == true {
return
}
// 关闭socket链接
_ = c.Conn.Close()
//将链接从连接管理器中删除
c.TCPServer.GetConnMgr().Remove(c)
c.isClosed = true
}
```
```
func (this *InitHandlerRouter) Handle(request ziface.IRequest) {
//调用了自己的一套协议解决年报组包分包的东西
defer func() {
if err := recover(); err != nil {
request.GetConnection().CloseConn()
//此处不知道有没有用反正我return了
return
}
}()

//请求另外一个TCP 服务 。。。。这个地方可能会超时 60秒

//返回报文信息,关闭连接
request.GetConnection().CloseConn()
}
```
那么问题来了,CPU暴增的原因,是否是和这个超时有关系,从表现上来看一出现超时,就会出现CPU暴增的情况

有没有好的解决办法,或者优化方案,客户端并非一直长连服务器,发送报文,接受报文连接就关闭了

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.