日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

阿里面試:NIO為什么會導(dǎo)致CPU100%?

來源: 責(zé)編: 時間:2024-05-27 17:22:19 150觀看
導(dǎo)讀在 Java 中總共有三種 IO 類型:BIO(Blocking I/O,阻塞I/O)、NIO(Non-blocking I/O,非阻塞I/O)和 AIO(Asynchronous I/O,異步I/O),它們的區(qū)別如下:在 JDK 1.4 之前,只有 BIO 一種模式,其開發(fā)過程相對簡單,新來一個連接就會創(chuàng)建一個新

在 Java 中總共有三種 IO 類型:BIO(Blocking I/O,阻塞I/O)、NIO(Non-blocking I/O,非阻塞I/O)和 AIO(Asynchronous I/O,異步I/O),它們的區(qū)別如下:zAf28資訊網(wǎng)——每日最新資訊28at.com

  1. 在 JDK 1.4 之前,只有 BIO 一種模式,其開發(fā)過程相對簡單,新來一個連接就會創(chuàng)建一個新的線程處理,但隨著請求并發(fā)度的提升,BIO 很快遇到了性能瓶頸。
  2. 所以在 JDK 1.4 以后開始引入了 NIO 技術(shù),NIO 可以在一個線程中處理多個 IO 操作,提高了資源的利用率和系統(tǒng)的吞吐量。
  3. 而到了 JDK 1.7 發(fā)布了 AIO 模型,它可以實現(xiàn)當(dāng)線程發(fā)起一個 IO 操作后,可以直接返回,無需等待 IO 操作完成。操作系統(tǒng)會在整個 IO 操作完成后,通過回調(diào)函數(shù)通知應(yīng)用程序。

1.空輪詢和CPU100%

然而,隨著 NIO 逐漸使用,人們卻發(fā)現(xiàn)了 NIO 的一個經(jīng)典問題,也就是臭名昭著的 Epoll(多路復(fù)用實現(xiàn)技術(shù))空輪詢的問題。zAf28資訊網(wǎng)——每日最新資訊28at.com

空輪詢的問題是指,在 Linux 系統(tǒng)下,使用 Java 中的 NIO 時,即使 Selector(多路復(fù)用器)輪詢結(jié)果為空,也沒有 wakeup 或新消息要處理時,NIO 依舊會進(jìn)行空輪詢,導(dǎo)致 CPU 一直上升,最終造成 CPU 使用率 100% 的問題。zAf28資訊網(wǎng)——每日最新資訊28at.com

該 BUG 相關(guān)可以參見以下鏈接:zAf28資訊網(wǎng)——每日最新資訊28at.com

  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=2147719
  • https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6403933
  • https://github.com/netty/netty/issues/327

2.空輪詢的原因

空輪詢產(chǎn)生的原因可以在 https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6670302 上找到答案,例如以下就是一個經(jīng)典的 bug 復(fù)現(xiàn)場景:zAf28資訊網(wǎng)——每日最新資訊28at.com

A DESCRIPTION OF THE PROBLEM :The NIO selector wakes up infinitely in this situation..0. server waits for connection1. client connects and write message2. server accepts and register OP_READ3. server reads message and remove OP_READ from interest op set4. client close the connection5. server write message (without any reading.. surely OP_READ is not set)6. server's select wakes up infinitely with return value 0

也就說,當(dāng)連接出現(xiàn)了 RST(強制連接關(guān)閉),因為 poll 和 epoll 對于突然中斷的連接 Socket 會對返回的 eventSet 事件集合置為 POLLHUP 或者 POLLERR,eventSet 事件集合發(fā)生了變化,這就導(dǎo)致 Selector 會被喚醒,進(jìn)而導(dǎo)致 CPU 100% 問題,其根本原因就是 JDK 沒有處理好這種情況,比如 SelectionKey 中就沒定義有異常事件的類型,導(dǎo)致異常無法被捕捉和處理,從而一直空輪詢。zAf28資訊網(wǎng)——每日最新資訊28at.com

3.如何解決空輪詢?

NIO 空輪詢可能會導(dǎo)致 CPU 100% 的解決方案通常有以下兩種:zAf28資訊網(wǎng)——每日最新資訊28at.com

  • 升級 Java 版本:早期的 JDK 版本中(JDK 1.7 之前),這個 bug 較為常見,但后續(xù)的 JDK 更新中,Oracle 和 OpenJDK 團隊已經(jīng)著手解決了這一問題,確保使用最新的 Java 版本可以減少遇到此問題的風(fēng)險。但網(wǎng)上依然有人發(fā)現(xiàn)即使在 JDK 1.8 中,使用原生的 NIO 依然會發(fā)生空輪詢的問題,只是發(fā)生的概率變低了而已。
  • 使用第三方庫:對于無法升級 Java 版本的情況,或擔(dān)心新版本的 JDK 中依然存在空輪詢問題的團隊可以考慮使用已經(jīng)解決了此問題的第三方庫,如 Netty。Netty 通過主動檢測和處理空輪詢情況,當(dāng)檢測到可能的空輪詢時,會采取措施如臨時增加 Selector 的等待時間,或者重建 Selector,以此來避免 CPU 資源的浪費。

課后思考

說說 Netty 解決空輪詢的具體實現(xiàn)細(xì)節(jié)?為什么重建 Selector 可以避免空輪詢呢?zAf28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-91022-0.html阿里面試:NIO為什么會導(dǎo)致CPU100%?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 關(guān)于 CSS 的那些事兒,我從未被告知

下一篇: Java如何根據(jù)歷史數(shù)據(jù)預(yù)測下個月的數(shù)據(jù)?

標(biāo)簽:
  • 熱門焦點
  • Find N3入網(wǎng):最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經(jīng)正式入網(wǎng),型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • 轎車從天而降電動車主被撞身亡 超速搶道所致:現(xiàn)場視頻讓網(wǎng)友吵翻

    近日,上海青浦區(qū)法院判決轎車從天而降電動車主被撞身亡案,轎車車主被判有期徒刑一年。案件顯示當(dāng)時男子駕駛轎車在上海某路段行駛,前車忽然轉(zhuǎn)彎提速超車,
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優(yōu)化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現(xiàn)了一個流處理程序
  • 之家push系統(tǒng)迭代之路

    前言在這個信息爆炸的互聯(lián)網(wǎng)時代,能夠及時準(zhǔn)確獲取信息是當(dāng)今社會要解決的關(guān)鍵問題之一。隨著之家用戶體量和內(nèi)容規(guī)模的不斷增大,傳統(tǒng)的靠"主動拉"獲取信息的方式已不能滿足用
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內(nèi)的“在線鑒別”,可找到鑒別寵物的選項。通過上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專業(yè)資質(zhì)認(rèn)證的得物鑒
  • 品牌洞察丨服務(wù)本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現(xiàn)“美團直播”的固定入口。在直播聚合頁面,外賣“神槍手”直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 阿里瓴羊One推出背后,零售企業(yè)迎數(shù)字化新解

    作者:劉曠近年來隨著數(shù)字經(jīng)濟的高速發(fā)展,各式各樣的SaaS應(yīng)用服務(wù)更是層出不窮,但本質(zhì)上SaaS大多局限于單一業(yè)務(wù)流層面,對用戶核心關(guān)切的增長問題等則沒有提供更好的解法。在Saa
  • 網(wǎng)紅炒股不為了賺錢,那就是耍流氓!

    來源:首席商業(yè)評論6月26日高調(diào)宣布入市,網(wǎng)絡(luò)名嘴大v胡錫進(jìn)居然進(jìn)軍了股市。在一次財經(jīng)媒體峰會上,幾個財經(jīng)圈媒體大佬就“胡錫進(jìn)炒股是否知道認(rèn)真報道”展開討論。有
  • 三星電子Q2營收60萬億韓元 存儲業(yè)務(wù)營收同比仍下滑超過50%

    7月27日消息,據(jù)外媒報道,從三星電子所發(fā)布的財報來看,他們主要利潤來源的存儲芯片業(yè)務(wù)在今年二季度仍不樂觀,營收同比仍在大幅下滑,所在的設(shè)備解決方案
Top 主站蜘蛛池模板: 佳木斯市| 博乐市| 京山县| 禹州市| 昌邑市| 乌拉特后旗| 韩城市| 常德市| 启东市| 台南市| 汤原县| 滦平县| 蕲春县| 井陉县| 青田县| 吉首市| 大方县| 交城县| 和顺县| 安溪县| 洞头县| 沈阳市| 武川县| 巢湖市| 扬中市| 青州市| 马边| 息烽县| 西林县| 定远县| 曲周县| 六枝特区| 哈密市| 荆门市| 台中市| 杭锦后旗| 玛纳斯县| 大余县| 彰化县| 汾西县| 永济市|