aceld / aceld/zinx

CPU百分百-不懂就问系列

未关闭
#174 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Go
星标
7.8k
派生
1.3k
PR 合并指标
30 天内没有已合并 PR

描述

不懂就问:
不太了解如何调用,于是干脆把代码整个复制,我们是通过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暴增的情况

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

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。