处于RUNNABLE状态的Java线程未真正运行
生活随笔
收集整理的這篇文章主要介紹了
处于RUNNABLE状态的Java线程未真正运行
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近,我在Java應(yīng)用程序服務(wù)器安裝上進(jìn)行了分析/調(diào)整,以識(shí)別瓶頸并修復(fù)它們。 在此過(guò)程中(調(diào)整),最常見(jiàn)的操作是在系統(tǒng)加載時(shí)檢索許多線程轉(zhuǎn)儲(chǔ)。 請(qǐng)記住,重載(在某些情況下)可能會(huì)產(chǎn)生副作用,可能會(huì)導(dǎo)致我們得出錯(cuò)誤的結(jié)論。 因此,“控制”負(fù)載比實(shí)際重負(fù)載更可取。 當(dāng)系統(tǒng)處于加載狀態(tài)時(shí),您會(huì)注意到許多Java線程處于RUNNABLE狀態(tài),但它們并未真正運(yùn)行。 他們正在等待“ 某物 ”。 導(dǎo)致線程即使處于RUNNABLE狀態(tài)也要等待的最常見(jiàn)原因如下: CPU資源不足 :當(dāng)運(yùn)行的線程多于虛擬CPU時(shí),上下文切換,內(nèi)核,OS作業(yè)和系統(tǒng)的其他進(jìn)程會(huì)有延遲是正常的。 RAM不足 :如果您的RAM不足,則您的系統(tǒng)將使用swap,這總是一個(gè)問(wèn)題。 I / O :當(dāng)線程處于read()或write()調(diào)用中并等待數(shù)據(jù)寫入或讀取時(shí),該線程處于RUNNABLE狀態(tài),但實(shí)際上并未運(yùn)行。 網(wǎng)絡(luò)慢 :這與#3有關(guān),因?yàn)榫W(wǎng)絡(luò)慢得多,它將導(dǎo)致與網(wǎng)絡(luò)操作有關(guān)的“正在運(yùn)行”線程的較長(zhǎng)延遲。 流程優(yōu)先級(jí) :流程可以具有不同的優(yōu)先級(jí)。 如果JVM進(jìn)程以低優(yōu)先級(jí)運(yùn)行,則其他進(jìn)程將在CPU中更頻繁地運(yùn)行。 您可以使用top (GNU Linux), prstat (Solaris), 任務(wù)管理器 (Windows)之類的工具來(lái)執(zhí)行此操作。 垃圾收集(GC) :運(yùn)行GC時(shí),JVM的所有線程(GC線程除外)在某些地方(世界停止)都處于凍結(jié)狀態(tài)。 在這些時(shí)候,GC正在刪除無(wú)用的引用對(duì)象,因此釋放了堆的可用內(nèi)存大小(但僅限于此)。 我們必須使用這樣的策略(例如CMS或G1),以最小化停靠點(diǎn)的頻率和持續(xù)時(shí)間。 完全由JVM引起的唯一原因是最后一個(gè)(GC活動(dòng))。 所有其他方面主要取決于操作系統(tǒng)和硬件。 因此,我們還必須始終監(jiān)視系統(tǒng)(操作系統(tǒng)和硬件),而不僅僅是JVM。 您必須記住,Java不使用/遵循其自己的線程模型。 此外,當(dāng)前的JVM(熱點(diǎn))使用本機(jī)OS線程,并且線程調(diào)度由底層OS實(shí)現(xiàn)。 參考:處于Java集成和源博客的優(yōu)點(diǎn)的 JCG合作伙伴 Adrianos Dadis并沒(méi)有真正運(yùn)行處于RUNNABLE狀態(tài)的Java Thread 。
翻譯自: https://www.javacodegeeks.com/2012/08/java-thread-at-runnable-state-is-not.html
總結(jié)
以上是生活随笔為你收集整理的处于RUNNABLE状态的Java线程未真正运行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 广州网签备案查询(广州网签备案)
- 下一篇: (flash linux)