aceld / aceld/zinx

CPU百分百-不懂就问系列

Đang mở
#174 3 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Go
Star
7.8k
Fork
1.3k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

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

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.