1. 首页 > 快讯

致命代码!小小的循环,可能会让服务器崩溃

大家好,今天小编来为大家解答致命代码!小小的循环,可能会让服务器崩溃这个问题,很多人还不知道,现在让我们一起来看看吧!

事情是这样的。上周的一天早上,阿凡高高兴兴地去上班了。刚到座位,还没吃早餐,就收到了运维老总发来的企业微信,说他有一个服务A,nginx日志急剧增加。一下子从平时的每天133M增加到了29G。看到这里,我突然想起前一天已经发布了一个版本。早餐吃不下了,赶紧拿着电脑跑到运维组去排查问题。

首先找到服务A对应的nginx日志,通过命令tail -f xxx.log查看日志数据。发现日志中输出最多的就是调用获取配置信息的接口。这个接口是一个非常简单的接口,它从数据库中加载数据并存储到缓存中,然后提供给外界访问的接口。本身没有业务逻辑。确定接口后,通过nginx日志可以看到请求全部来自于一个核心服务B。

[[334366]]

至此,基本可以断定B服务的逻辑存在问题,并且问题的方向已经确定。我找到了B服务中调用这个接口的地方,一共有两个地方。每五分钟调用一次以进行内存缓存。这一段的逻辑一直都在,不会有问题;另一个是它是自定义的Prometheus 指标集合。 Prometheus 每15 秒收集一次数据。仔细想想,问题肯定就出在这里。

看了一下逻辑,这段代码是一个自定义的指标集合,用于收集Grafana上的相应数据。恰巧Prometheus在生产中每15秒拉一次数据,加上生产环境数据量比较大。大了,这段代码中调用接口的逻辑是循环写的,导致每15秒触发一次循环。每次循环数据量较大,每次都会调用接口,而服务B还是多实例部署,导致接口调用次数剧增,引发了这起“杀人罪”。

一旦问题定位,解决办法就比较简单了。接口调用从循环体移到外部。该计划进行了一些更改。变更完成后,合并代码,添加标签,升级其中一台服务器进行观察。发布后,整个接口的调用次数下降了。观察了一段时间,全网没有任何异常。

复盘对这个问题做了回顾,事故本身并没有造成业务异常,还好发现得早,否则每天产生的大量日志迟早会占满磁盘空间,引发问题。经过深入审查,我发现连接到Prometheus的自定义指标实际上没有实际使用价值。这篇文章的逻辑在很多版本中都有改变,但没有最终版本。不知道哪个版本会用到这个代码。已提交。这也反映出我们的版本规划存在问题。许多需求经常被更改和插入。没有严格遵循版本也是造成这个问题的一个重要原因。

我还想提醒大家,开发和发布一定要严格遵循版本迭代。不然哪天我也踏入这样的陷阱,那就更尴尬了。

工作中难免会出现错误,但有些错误可以犯,有些错误不能犯。每个程序员都会写出错误。写bug问题不大,但能否及时解决才是关键。对于真正影响在线业务的错误,时间就是金钱。你多花一分钟的时间就意味着你损失一分钟的钱。有时候一分钟的钱不多,有时候一分钟的钱就够关掉一家公司了。

所以每个程序员都应该尊重网络。

关于本次致命代码!小小的循环,可能会让服务器崩溃和的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

用户评论

墨染年华

没想到一个简单的循环也能把服务器搞垮啊!

    有9位网友表示赞同!

野兽之美

这个文章好可怕有没有,感觉我写代码要小心了。

    有18位网友表示赞同!

落花忆梦

我之前没注意过这个细节,以后 gotta be more careful now

    有19位网友表示赞同!

早不爱了

学习编程的时候确实要注重一些小细节,要不然后果很严重啊!

    有11位网友表示赞同!

优雅的叶子

51CTO.COM的文章还是挺有用的,经常能碰到一些实用的知识点。

    有9位网友表示赞同!

醉红颜

看了标题好几个关键词都能理解大概意思,感觉内容应该很有深度。

    有16位网友表示赞同!

掉眼泪

循环确实是一个编程中的常见要素,但需要谨慎使用啊!

    有20位网友表示赞同!

太易動情也是罪名

这个例子是不是可以用来警告一下那些写代码的时候不注意细节的人?

    有5位网友表示赞同!

怪咖

原来像这样的小问题也能造成这么大的bug,真是一目了然。

    有5位网友表示赞同!

站上冰箱当高冷

感觉这篇文章能让我在编写代码的时候更加谨慎小心了!

    有7位网友表示赞同!

关于道别

我平时写代码也会遇到这样的问题,看来得赶紧学习一下相关知识呀!

    有14位网友表示赞同!

(り。薆情海

分享下这篇文章链接给朋友,他们也在学编程的。

    有15位网友表示赞同!

良人凉人

这个文章太有启发意义了,让我意识到了编程细节的重要性!

    有9位网友表示赞同!

请在乎我1秒

以后写代码的时候要多读一些这类文章,提升自己的编程能力!

    有10位网友表示赞同!

一生荒唐

服务器崩溃的事情真是可怕,这篇文章提醒了我一定要注意细节!

    有14位网友表示赞同!

安陌醉生

希望51CTO.COM的文章可以继续分享更多有用的知识!

    有9位网友表示赞同!

疯人疯语疯人愿

这个标题抓人眼球,内容一定很精彩啊!

    有6位网友表示赞同!

命硬

看来编程确实是一门需要不断学习和精进的技能!

    有5位网友表示赞同!

青袂婉约

看了标题,感觉这篇文章应该很有帮助,记录一下我要去看一看。

    有11位网友表示赞同!

厌归人

分享下这个文章给我的技术圈好友,他们肯定会感兴趣!

    有10位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/7434.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666