本文主要介紹如何應(yīng)對cpu負(fù)載高?(什么叫cpu過載?),下面一起看看如何應(yīng)對cpu負(fù)載高?(什么叫cpu過載?)相關(guān)資訊。
首先,故障排除步驟1。使用top定位cpu使用率高的進程pid,然后按shift p按cpu排序。top command是linux下常用的性能分析工具,可以實時顯示系統(tǒng)中各個進程的資源使用情況,類似于windows的任務(wù)管理器。
第一行,任務(wù)隊列信息,與uptim: 27 : 05運行時間:up 1:57 min,當(dāng)前登錄用戶:3用戶負(fù)載均衡(正常運行時間)av: 0.00,0.00,0.00平均值后面跟著的三個數(shù)字分別是1分鐘,5分鐘,15分鐘。負(fù)載平均數(shù)據(jù)是通過每5秒檢查一次活動進程的數(shù)量,然后根據(jù)特定的算法計算出來的數(shù)值。如果這個數(shù)字除以邏輯cpu的數(shù)量,當(dāng)結(jié)果高于5時,表明系統(tǒng)第二行任務(wù)(進程)過載。
總進程:150總,運行:1運行,休眠:149休眠,停止: 0停止,僵尸進程: 0僵尸。
第三行,cpu狀態(tài)信息
0.0% us[用戶空間]用戶空間占用cpu的百分比。0.3% sy[sysctl]內(nèi)核空間占用cpu的百分比。0.0% ni[]優(yōu)先級改變的進程占用cpu的百分比99.7% id[idol]空閑cpu的百分比0.0% wa[wait]等待io占用cpu的百分比0.0% hi[硬件irq]硬中斷占用cpu的百分比0.0% si[軟件中斷]軟中斷占用cpu的百分比第4行,內(nèi)存狀態(tài)。
總共1003020k,已用234464kused,可用777824kfree,緩沖區(qū)24084k[緩存內(nèi)存量]
第五行,swap交換分區(qū)信息。
2031612ktotal,536kused,2031076kfree,505864 kcached[緩沖交換區(qū)總量]
可用內(nèi)存=空閑緩沖區(qū)ca對于內(nèi)存監(jiān)控,在頂部,我們應(yīng)該始終監(jiān)控第五行中交換分區(qū)的使用情況。如果這個值是不斷變化的,說明內(nèi)核在內(nèi)存和swap之間不斷交換數(shù)據(jù),說明真正的內(nèi)存不夠用。第四行,總在用內(nèi)存(已用)指的是現(xiàn)在系統(tǒng)內(nèi)核控制的內(nèi)存,第四行,總空閑內(nèi)存(空閑)指的是內(nèi)核還沒有納入其控制范圍的量。不是所有內(nèi)核管理的內(nèi)存都在用,過去可以重用的內(nèi)存也在用。內(nèi)核不會把這些可重用的內(nèi)存歸還給free,所以linux上的空閑內(nèi)存會越來越少,但是don 別擔(dān)心。更多l(xiāng)inux內(nèi)核視頻資料免費。獲取后臺私信【內(nèi)核】自己獲取。
第六行是空白的。
第七行下面:每個流程(任務(wù))的狀態(tài)監(jiān)控
pid進程id用戶進程所有者pr進程優(yōu)先級ninice值。負(fù)值表示高優(yōu)先級,正值表示低優(yōu)先級virt進程使用的虛擬內(nèi)存總量,以kb為單位。virt = swap resres——由進程使用且未換出的物理內(nèi)存大小,以kb為單位。res =代碼數(shù)據(jù)shr以kbs為單位的共享內(nèi)存大小進程狀態(tài)。d=不間斷睡眠狀態(tài)r=運行s=睡眠t=跟蹤/停止z=僵尸進程% cpu自上次更新以來占用的cpu時間百分比% mem進程時間使用的物理內(nèi)存百分比進程使用的總cpu時間,單位1/100秒命令進程名(命令名/命令行)詳細(xì)信息。
virt:虛擬內(nèi)存使用虛擬內(nèi)存1。進程 的虛擬內(nèi)存的大小需求與展望,包括庫、代碼、數(shù)據(jù)等。2.如果進程申請了100 m的內(nèi)存,但實際上只使用了10m,那么它將增長100m,而不是實際使用量res:resident內(nèi)存使用量memory resident 1。進程當(dāng)前使用的內(nèi)存大小,但不包括換出2。與其他進程共享3。如果申請100m內(nèi)存,實際使用10m,只會增加10m,與virt 4相反。關(guān)于庫占用的內(nèi)存,只統(tǒng)計加載的庫文件shr: shared memory共享內(nèi)存1占用的內(nèi)存大小。除了自己的進程2之外,它還包括其他進程的共享內(nèi)存。雖然該進程只使用了幾個共享庫函數(shù),但它包含了整個共享庫的大小3。計算出一個進程占用物理內(nèi)存大小的公式:res–shr 4和swap out后,會減少data1和data占用的內(nèi)存。如果top不 t有一個顯示器。按f鍵顯示它。2.這個程序所需要的真實數(shù)據(jù)空間是真正在操作中使用的。在top運行期間,可以通過top的內(nèi)部命令來控制過程的顯示模式。內(nèi)部命令如下:s更改屏幕更新頻率l關(guān)閉或打開第一部分第一行中頂部信息的表示t關(guān)閉或打開第二行中任務(wù)和第三行中cpu信息的表示m關(guān)閉或打開第一部分第四行中mem和第五行中交換信息的表示n排列列表 按pid大小的順序排列進程pc .按pu占用的順序排列進程列表m–按內(nèi)存占用的順序排列進程列表h–顯示幫助n–設(shè)置進程列表中顯示的進程數(shù)量q–退出top–更改屏幕更新周期top使用:
用法格式:top[][d][p][q][c][c][s][n][c][c][s][n]參數(shù)說明:d:指定兩次屏幕信息刷新的時間間隔。當(dāng)然,用戶可以使用s interactiv:僅通過指定監(jiān)控進程id來監(jiān)控進程的狀態(tài)。q:這個選項將使頂部刷新沒有任何延遲。如果調(diào)用者擁有超級用戶權(quán)限,那么top將以可能的最高優(yōu)先級運行。s:指定累計模式。讓top命令在安全模式下運行。這將消除由交互命令引起的潛在危險。i:使top不顯示任何空閑或死亡的進程。c:顯示整個命令行,而不僅僅是命令名。這時候發(fā)現(xiàn)如果java的進程占用太多而can 不要一直下去,要搞清楚是什么線程導(dǎo)致比例高。以圖中的過程為例。如果發(fā)現(xiàn)pid為31357的java進程一直占用很高的cpu比率,記錄它的pid。
2.檢查java進程中線程的占用情況。
top h p 31357然后按shift p按cpu排序。
描述:h表示顯示線程,p表示指定的進程。
可以看到cpu使用率高的線程,記下它們的pid,假設(shè)這里31357的cpu比率始終是50%。
或者用ps mp pid o thread,tid,time查詢進程,哪個線程的cpu占用率高。記住tid會把上圖中線程占用率最高的29108轉(zhuǎn)換成十六進制的 71b4。
3.通過jstack命令獲取資源占用異常的線程棧,可以臨時保存到一個文件中查看jstack 31357 jstack.31357原木
可以看到上面指定線程的堆棧信息。如果您想查看關(guān)于線程中鎖的附加信息,您可以添加一個l參數(shù)。
4.上述方法用于正常工藝條件下的疊層印刷。
使用jstack l命令時沒有響應(yīng)。估計cpu已經(jīng)站不住了,可以 不要執(zhí)行普通的命令。根據(jù)提示【目標(biāo)進程不響應(yīng)時可以使用f選項】,只能放大。
f &;pid&; jstack?!皃id”。文本文件(textfile)
實際的日志結(jié)果如下所示:
發(fā)現(xiàn)大量線程被阻塞,有用的結(jié)果在這里:
很明顯,線程19576已經(jīng)運行,excel導(dǎo)出的相關(guān)方法已經(jīng)實現(xiàn)。這就是問題所在。下面的任務(wù)是檢查這個地方的代碼邏輯。
jstack命令格式:
jstack [選項] pid
參數(shù)描述:
pid can t respond,它強制打印一個很長的stack列表l l l .打印關(guān)于鎖的附加信息,比如屬于java.util.concurrent m混合模式輸出(包括java和本地c/c片段)stack的ownabl: java應(yīng)用的process number 5jps命令查看java進程的pid更實用。
jps [選項] [主機id ]
參數(shù)描述:
m輸出傳遞給main方法的參數(shù),如果是嵌入式j(luò)vm,則為null。l輸出應(yīng)用程序主類的完整包名或應(yīng)用程序jar文件的完整路徑。v輸出傳遞給jvm的參數(shù)。三個參數(shù)相加顯示更詳細(xì)的信息:
發(fā)現(xiàn)jmx的遠(yuǎn)程端口是在這些java進程的啟動參數(shù)中打開的。一般情況下,通過jconsole遠(yuǎn)程連接可以看到j(luò)vm的日常參數(shù)。例如,在本地訪問上圖中的pay.war流程:
了解更多如何應(yīng)對cpu負(fù)載高?(什么叫cpu過載?)相關(guān)內(nèi)容請關(guān)注本站點。