新聞中心
JVM調(diào)優(yōu)jstack怎么找出最耗cpu的線程并定位代碼
第一步:先找出java的進(jìn)程Id(PID) 假設(shè)java應(yīng)用名稱是zcg_commodity
成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),10多年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都成百上千家客戶提供網(wǎng)頁設(shè)計(jì)制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),同時(shí)也為不同行業(yè)的客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)。
ps -ef|grep zcg_commodity
得到進(jìn)程Id為32464
第二步:找出該進(jìn)程內(nèi)最消耗CPU的線程
top -Hp pid
輸入top -Hp 32464
TIME列就是各個(gè)java線程耗費(fèi)的CPU的時(shí)間,比如圖中是線程ID的為2012的線程,
通過 printf “%x\n” 2012
得到2012的十六進(jìn)制為 7dc
第三步:
一般會(huì)進(jìn)到j(luò)dk的bin目錄下,root權(quán)限執(zhí)行
jstack 32464|grep 7dc
Java開發(fā)如何準(zhǔn)確的定位到占用內(nèi)存或CPU最高的一行代碼
要定位到行,代碼要debug編譯,至少要帶上行信息。
線程占用內(nèi)存高低,可以用jmap做heap dump出來給MomoryAnalysis分析他可以按線程統(tǒng)計(jì),一般也可以用它來找出造成OOM的原因。
線程占用CPU,上述內(nèi)存的問題是一個(gè)方面,另外也可以jstack打線程棧來分析。Linux上ps -T -p可以看底層線程的CPU占用(Windows上需要額外按工具),記得線程編號(hào)可以在jstack打出來的線程棧中檢查。
java占用cpu高?
java進(jìn)程占用CPU過高常見的兩種情況:
1,代碼中有死循環(huán)或者接近死循環(huán)的操作
2,快速創(chuàng)建大量臨時(shí)變量,導(dǎo)致頻繁觸發(fā)gc回收
文章題目:java消耗cpu代碼 java耗cpu的代碼
文章起源:http://www.ef60e0e.cn/article/ddsiedd.html