java進程cpu
㈠ 如何讓java更好的利用多cpu
幾個意見大致如下,第一,不能,因為「進程是CPU進行調度的單位,而JVM是一個進程,於是就只能跑在一個CPU上」。第二,「進程是CPU進行調度的單位,這沒錯,但是OS負責將一個進程在不同的CPU上調度到另外一個CPU上,而這個進程,則是由不同的線程構成的,那麼說,線程還是在不同的CPU上運行了」。我更傾向於第二種解釋,於是核心問題就變成了討論「JVM能不能夠將線程安排到不同的CPU上去運行呢?」。
最終,在SUN公司授權的《Java核心技術》,第7版卷II,第8版卷I,有關於「可運行線程」中,找到如下兩句話:
「今天,人們很可能有單台擁有多個CPU的計算機,但是,並發執行的進程數並不是CPU數目制約的。操作系統的時間片分配給每一個進程,給人並行處理的感覺」。
好吧,上面的這句話,並不能說明這個答案,但是當我看到下面的這句原話的時候,感覺答案就在這里了:
"在具有多個處理器的機器上,每一個處理器運行一個線程,可以有多個線程並行運行。當然,如果線程的數目多於處理器的數目,調度器依然採用時間片機制"。這句話足以用來反駁那個出問題的人了,因為他的答案本身就是錯的。
盡管,盡信書不如無書,但是,還能有更好的選擇么?帶著這個問題,繼續走下去~ Fighting~ [email protected] I enjoy PM、Java、Oracle. I'm an English lover as well~ ho ho~
後記:
更詳細的信息可以參見有關Java虛擬機實現的「並發」系列講解,基本上每本關於Java虛擬機有關的書籍以及官方文檔都會講到JVM如何實現線程的幾種方式。 基於系統內核,基於用戶線程等等實現。JVM中的線程實現是本地化的~ 本地化的意思就是與平台有關了,盡管與平台有關,但是線程調度,仍舊是最佳高效的方式,有資料曾說過:線程的創建銷毀與調度的開銷是進程的三十分之一。
㈡ 查看JAVA進程中哪個線程CPU消耗最高
2.1 導出java運行的線程信息
jstack 進程id(jps查看)
jstack 進程id > ps.txt
jstack -l 進程id (窗口列印)
//另外還有一種方式
如果啟動方式如下:
nohup java -classpath conf/:my.jar com.tank.manClass>./log.out 2>&1 &
則執行:kill -3 PID,進程信息會輸出到/log.out
2.2 查找最消耗cpu的java線程
jps
找到java進程PID
命令:ps -mppid-o THREAD,tid,time 或者 ps -Lfppid
通過%CPU和 TIME,判斷佔用的線程TID
找到TID,轉換成16進制,然後在上面(jstack 進程id > ps.txt)導出的文件中搜索,就可以定位到具體的線程,類。
㈢ java進程佔用cpu高,不知道是什麼進程
用linux命令
top可以查詢各個進程佔用CPU的使用情況,找到command為Java的使用佔用CPU高的相應的PID,然後用命令:ps
-ef|grep
Pid
此pid為你查詢到的pid,就可以知道是哪個Java進程了
㈣ Java程序CPU佔用過高怎麼解決
Java程序就是這樣的,我去年做了一個桌面軟體,也出現這樣的問題,後來不用java的自動垃圾回收,在必要的時候手動調用System.gc(),這種情況就很少出現了,但是偶爾也還有。另外,CPU佔用率過高的情況一般是編程的問題,重點考慮線程資源共享和網路流處理兩個方面,java大部分的高CPU佔用率都跟這兩點有關系。
㈤ Java中CPU佔用過高問題如何解決
方法1
1.jps 獲取Java進程的PID。
2.jstack pid >> java.txt 導出CPU佔用高進程的線程棧。
3.top -H -p PID 查看對應進程的哪個線程佔用CPU過高。
4.echo 「obase=16; PID」 | bc 將線程的PID轉換為16進制,大寫轉換為小寫。
5.在第二步導出的Java.txt中查找轉換成為16進制的線程PID。找到對應的線程棧。
6.分析負載高的線程棧都是什麼業務操作。優化程序並處理問題。
方法2
1.使用top 定位到佔用CPU高的進程PID
top
通過ps aux | grep PID命令
2.獲取線程信息,並找到佔用CPU高的線程
ps -mp pid -o THREAD,tid,time | sort -rn
3.將需要的線程ID轉換為16進制格式
printf "%x\n" tid
4.列印線程的堆棧信息
jstack pid |grep tid -A 30
㈥ linux有一個java進程cpu達到100,怎麼回事,程序進程多
cpu使用率高的原因及解決方法:
第一、殺毒軟體,常見的金山、瑞星殺毒軟體會對網頁、插件等進行監控,這樣就增大了系統負擔,自然也就會造成cpu使用率高。
第二、驅動不達標,現在人們使用的驅動有幾大一部分是屬於測試版的驅動,這一類驅動並不合格,它可以造成CPU100%的使用率,而且不容易發覺。
第三、病毒木馬,病毒在系統內部復制,必然造成極高的cpu佔有率;
第四、網路鏈接,這是最直接的客觀原因,主要是網路連接不穩定。
第五、啟動項太多,一般來說開機啟動項過多,就會增加cpu的使用率,增加其荷載。
第六、桌面盡量少放文件,在桌面上放過多的文件,極大的佔用cpu,造成使用率過高。
第七、軟體本身需要佔有很高的CPU,比如一覽器;有時有的軟體和系統會有點不兼容。
第八、「svchost」進程影響,svchost.exe是系統的一個核心進程,svchost.exe有時非常令人頭痛,如果看到某個svchost.exe佔用很大CPU,這時可以去下aports或者fport來檢察其對應的程序路徑,看下是不是有程序調用svchost.exe。
第九、右擊文件100%扥使用率,這個也是非常常見,在官方解釋也很有意思。
第十、cpu溫度過高,證明cpu本身就是出於不正常運行,自然也就會導致異常。
第十一、word文件過大,cpu對其拼寫和語法檢查過度。
㈦ Java的多線程和CPU
CPU對於各個線程的調度是隨機的(分時調度),而在Java中,JVM負責線程的調度,可更好地分配CPU的使用權。對於線程的調度一般有兩種模式,分時調度和搶占式調度。分時調度是按照順序平均分配;搶占調度是按照優先順序來進行分配。
㈧ java程序佔用CPU極高,請問是怎麼回事
多線程最容易造成資源死鎖的,查查看那個沒有釋放資源~!還有緩沖池設置夠不夠大~!垃圾處理機制也要檢查~!
㈨ Java如何定位佔用CPU比較高的問題
一、確定消耗CPU的Java進程
備註:
1、jstack 輸出的堆棧信息,線程id對應的16進制為小寫,查找時要統一按照小寫方式查找
2、jstack輸出為當前瞬間的堆棧信息,如果遇到間斷性出現CPU高的問題時,需要多輸出幾次
從上面方式定位到代碼Test.main(Test.java:4)處導致了CPU偏高的問題,那我們查看下代碼具體如何實現的?
代碼實現:
public class Test {
public static void main(String[] args) {
while(true) {
}
}
}
從代碼層面看該處實現了一個死循環,所以導致了線程佔用CPU偏高的問題。