Java程序很耗CPU是比較好分析的,有這么幾步:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)公司、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了龍鳳免費(fèi)建站歡迎大家使用!
1.通過top命令(top之后再按shift+H可以顯示線程)查看CPU使用率高的線程;
2.將這個(gè)線程號轉(zhuǎn)換為16進(jìn)制;
3.使用jps查看服務(wù)器的Java進(jìn)程號;
4.使用jstack [進(jìn)程號] 打印當(dāng)前的進(jìn)程堆棧;
5.從打印的信息中,找到第2步得到的線程號,看看這個(gè)線程在做什么。
不一定一次就能抓準(zhǔn)線程狀態(tài),可以第1步時(shí)多記幾個(gè)線程。
--天下數(shù)據(jù)--
Java程序就是這樣的,我去年做了一個(gè)桌面軟件,也出現(xiàn)這樣的問題,后來不用java的自動垃圾回收,在必要的時(shí)候手動調(diào)用System.gc(),這種情況就很少出現(xiàn)了,但是偶爾也還有。另外,CPU占用率過高的情況一般是編程的問題,重點(diǎn)考慮線程資源共享和網(wǎng)絡(luò)流處理兩個(gè)方面,java大部分的高CPU占用率都跟這兩點(diǎn)有關(guān)系。
java進(jìn)程占用CPU過高常見的兩種情況:
1,代碼中有死循環(huán)或者接近死循環(huán)的操作
2,快速創(chuàng)建大量臨時(shí)變量,導(dǎo)致頻繁觸發(fā)gc回收
第一步:先找出java的進(jìn)程Id(PID) 假設(shè)java應(yīng)用名稱是zcg_commodity
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
第三步:
一般會進(jìn)到j(luò)dk的bin目錄下,root權(quán)限執(zhí)行
jstack 32464|grep 7dc
你是自己編寫的程序嗎?如果是請自查代碼
CPU占用過高,一般是因?yàn)槟憔€程啟動太多或者其中一個(gè)或多個(gè)線程工作太忙
工作太忙的例子,最簡單的,代碼太長,執(zhí)行需要一段時(shí)間,CPU就會升高,可以適當(dāng)?shù)丶由蟬leep(milliseconds)來使其睡眠一小會。
還有就是線程有的時(shí)候必須要時(shí)刻監(jiān)聽一個(gè)值,這個(gè)時(shí)候簡單粗暴的方式就是while(true),然后里面判斷一個(gè)boolean是否為真,如果是則break,如果不是則繼續(xù)循環(huán)
這樣的代碼是【非常】【非常】吃CPU的,還是避免它比較好,或者至少加入sleep(1)來讓其休息一下,1已經(jīng)很小了。。
線程太多的話,我們的CPU本來是很閑的,尤其是電腦閑置的時(shí)候,基本上是不會干活的,只會監(jiān)聽一下硬件設(shè)備,以及自動保存一下未保存的文檔等等,它的時(shí)間片安排的特別寬松,也就不會出現(xiàn)占用過高的問題,結(jié)果假設(shè)你的程序給它安排了幾十個(gè)線程等著執(zhí)行……
因?yàn)镃PU可不是給一個(gè)單獨(dú)的線程一堆時(shí)間,直到這個(gè)線程結(jié)束再給下一個(gè)線程。
CPU會把自己的時(shí)間片資源分配給隨機(jī)的線程,執(zhí)行時(shí)間結(jié)束后強(qiáng)制暫停線程,優(yōu)先級高的能獲得更多處理時(shí)間,但不保證必然能得到全部時(shí)間。
如果線程太多了,那么sleep方法就沒什么用了,因?yàn)楸緛硎亲尵€程休息的,結(jié)果這個(gè)休息了那個(gè)立馬就開始,所以用處不大了
這個(gè)主要還是看你想開發(fā)哪個(gè)平臺的程序,如果是安卓或者是網(wǎng)絡(luò)方面的學(xué)Java,如果是window程序那就學(xué),如果是Linux程序那就是/++,如果是蘋果系統(tǒng)的就是object-
網(wǎng)站題目:很費(fèi)cpu的java代碼 java開發(fā)cpu吃多線程嗎
分享地址:http://www.chinadenli.net/article46/dooeceg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、品牌網(wǎng)站建設(shè)、App開發(fā)、品牌網(wǎng)站設(shè)計(jì)、外貿(mào)建站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)