JAPANESEHD熟女熟妇伦也便是 06 提的 07 年才说建造了
发布日期:2022-09-23 04:52    点击次数:118
蜜芽国产精品日韩一区JAPANESEHD熟女熟妇伦

你好,我是yes。

今天聊的亦然一个须生常谭的问题了:JDK Selector 的空轮询 bug。

今天来简便的扒一下,这玩意无意能回顾到 06 年,况兼基于这个 BUG 咱们再发散下,望望能给咱们什么启发。

回顾

最近我不是一直在写 Netty 系列嘛,我想谈到 Netty ,凡是你在网上看过相关贵寓,那敬佩会提到 JDK NIO 在 Linux 系统下空轮询的 bug,便是调用 Selector.select(timeout),即使没事件发生,也不会梗阻 timeout 技巧,而是立马 return,这么的空轮询导致 CPU 100%。

产生这个 bug 大约的原因我讲下:统一俄顷中断,poll 和 epoll 会被 POLLHUP 或者 POLLERR 事件叫醒,于是 Selector 就被叫醒了,关联词 JDK Selector 一看,没事件(JDK只界说了CONNECT、READ、WRITE、ACCEPT这几个事件)需要处理啊?

然后就又轮回了....没事件要处理啊,然后就又轮回了....没事件要处理啊,然后就又轮回了....

如斯往复,空轮询使得 CPU 100%。

这个 BUG 真算是个老历本了,我查了查 JDK 的 bug 库,大约 13 年 3 月份之后就没提相关的 bug 了,而且按照官方的说法这也和 Linux 版块关联,于今应该没这问题了?(我不祥情)。

咱们往复来一下 bug 库的历史。

我查了下最早提到 Selector(底层用的是 poll 或者 epoll) 在 Linux 不会梗阻的 BUG 是在 06 年 3 月 24 日。

不错看到,这 Resolved 的日历有点长,隔了一年,也便是 06 提的 07 年才说建造了,不外本日是给了个处置决议的:

处置决议简便悍戾,便是把抽风不梗阻的 Selector 删了,然后创建个新的,拔帜易帜。(有时候简便悍戾的便是最佳的)

我再往后找了找 Selector 的 bug ,发现 08 年还有 bug(不是说建造了吗?),况兼处理的日历是 13 年!最终着力是无法建造,相关的是 JDK 6 版块。

同 13 年还有近似的 bug ,不外是在 JDK 7 版块上,最终 resolution 是不完美的建造!

从这个处理技巧和着力来看,我个人测度 JDK 对此 bug 的气派是泄劲的,认为这是 Linux 自己的 bug 导致的征象(同为形态员风尚性地甩)。

从 JDK-6670302 的评价就不错看出:

大约的好奇赞佩便是:升级下 Linux 内核版块(2.4版块有这个问题)就好了, 酵素2.6 版块发布还是 4 年了都,这个建造也没啥必要了,需求很小。

这其实不错相识。

站在 JDK 开辟者的角度来看:我这代码在 windows 下开动的好好的,到你 Linux 就不行了?嗯?我的问题?Linux 为什么给我这么难过其妙的事件?你中断叫醒了个什么玩意?

关联词站 Linux 开辟者角度来看就不相同了:嗯?甩锅给我?明明是你写代码没谈判到这种稀奇情况,搁着跟我甩锅呢?

那站咱们 Java 开辟而言:你搁着跟我搁那呢?有 bug 还搁这甩,我管你 JDK 什么情况,你就得给我修!(我信赖 JDK 开辟者亦然这么看 Linux 开辟者的)

哈哈哈,真不确凿?

总之,我个人合计这个 bug 之是以会被网上的著述拿出来反复鞭尸.

一是,因为 netty 通过弧线救国的方式,如实幸免了阿谁技巧段部署在 Linux 的诓骗平直用 Java Selector 产生的空轮询 bug,是以在那时谈到 Netty 就值得拿这个说事儿。

二是,世界著述一大抄嘛,懂的都懂。

对了,天然我查 bug 库发现背面如实都没再有近似的bug,关联词网上有著讲明在 JDK8 如故重现了这个 bug!

招引:https://juejin.cn/post/6844903491505242119

啧啧,俗语说得好,靠人不如靠己,Netty 便是靠己来处置这个 bug,人人色成人在线影音也便是上头提到的简便悍戾的处置认识!

Netty :空轮回是吧,我数数你轮回几次,只好到达一定次数,我就认为你产生 bug 了,于是我就重建一个 Selector,覆没畴昔阿谁还是抽风了的 Selector!这么我管你 JDK 如故 Linux 会不会处理,我这波便是稳坐垂钓台!

这便是 Netty 的处置认识~是以也不可说是 Netty 建造了 JDK NIO 的 bug ,它仅仅弧线救国,变相幸免了这个 bug 驱散。

这其实能给咱们日常的开辟提供小数思绪,有时候求人不如求己,关于二方、三方的接口如故报以质疑的气派去看待,不要过度的信赖他们,相等是三方的接口,一定要做好对方挂掉或者复返奇怪着力的准备。

我之前对接某大厂的接口,复返值就雅雀无声的变了,莫得任何公告和见知,便是那种你认为不可能会变的值。比如一个复返城市名的接口,平方复返叫杭州市,它难过其妙变了个杭州市(常用)。天然我仅仅举个例子哈,具体是啥不便捷说。

还有之前对接过另一个大厂的接口,那时候他们的作事真实属于要挂的情况,复返的贼慢,时常超时,这种我如故有训导的,首先就我设置了接口超时恭候反应技巧是 3s,而对方作事有问题,经常都卓著了 3s,导致咱们拉不到数据。

然后我向对方提了工单,对方果然让我把超时恭候技巧休养到 10s,我听得都傻了,平方复返 100ms 的接口,让我设个 10s,这是让我随着他们的作事沿路挂是吗。

碰到这种情况可千万别听对方的,你得猜测这便是在拖垮你的诓骗,你设置的超时恭候的技巧越久,线程被占用技巧就的越长,那其他被的央求不就没线程行止理了嘛,然后央求就堆积了,最终你的诓骗就全部崩盘了。

也亏对方想得出来这种复兴,碰到这种近似的情况,若是你个人拿捏不准,实时找你共事或者携带筹商下,别傻傻的听他的就改了。

你望望所谓的大厂的接口也都这么,一言以蔽之,对待二方、三方接口,要多加个心眼,一定要做好判空、左迁等等情况。

我发现存些新同学就很不心爱判空,因为合计多写一个 if 很丑陋,啧啧,年青如故太年青了,没遭受过毒打!

是以,你们碰到三方最恶心的场景是什么?拿到留言区给大家乐呵乐呵?

好了,今天就扯到这儿~

 

我是yes,从小数点到亿点点,咱们下篇见~