go server 不稳定

发布于 2022-09-03 07:45:19 字数 758 浏览 13 评论 0

用go写了一个监控服务,大概一秒接受一次心跳请求。但是当服务器运行一段时间之后,可能会出现能接受到请求但是不会为请求返回response或者直接死掉并没有任何错误信息,cpu与memory使用情况也正常。

请问有大神遇到过这种情况没有?或者有没有知道这类问题的解决思路?希望知道的大大能给予提示下,都快被这个搞得不知所措了

我使用了beego,收到信息后我就直接

this.Data["json"] = "ok"
this.ServeJSON()

而且我接收到信息后的其他操作也没有进行,就只有一句打印信息的语句一直打印收到的信息还在执行,我的整个函数是这样的:

func (this *MainController) Post() {

defer this.Ctx.Request.Body.Close()
body, err := ioutil.ReadAll(this.Ctx.Request.Body)
go models.RecordPcLastTime(body)
content := string(body)

fmt.Println(content)

if err == nil && content != "" {
    models.Messages <- content
    this.Data["json"] = "ok"
} else {
    this.Data["json"] = "fail"
}
fmt.Println("beego server")
this.ServeJSON()
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

胡渣熟男 2022-09-10 07:45:19

我想我大概知道问题在哪里了,应该是处理Message这个缓存为1000的chan的for select处理函数出现了一些问题,导致models.Messages <- content堵塞,且返回response在此语句之下,所以能接受消息但是不能返回。同时我在models.RecordPcLastTime中也有像models.Messages发送讯息,所以导致我整个接受message的逻辑全部堵塞。早上想了好久都没有想到,然后回来看有人回答没,突然一下子就想到了,看来灵感很重要啊^_^.知道原因了应该问题就好解决了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文