aceld / aceld/zinx

CPU百分百-不懂就问系列

オープン
#174 コメント 3 件 リアクション 0 件 担当者 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 を短くまとめたダイジェスト。