java線程cpu
❶ java的線程可以在多個CPU上運行么
是的,每個CPU核心在同一時間,「可以且只能」運行一個線程
❷ 查找Java哪個線程佔用CPU 最多
一,在centos linux 上查看進程佔用cpu過高
top
shift+h
查看哪個進程程消耗最高
二,查看JAVA進程中哪個線程消耗最高
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 -mp pid -o THREAD,tid,time 或者 ps -Lfp pid
通過%CPU和 TIME,判斷佔用的線程TID
找到TID,轉換成16進制,然後在上面(jstack 進程id > ps.txt)導出的文件中搜索,就可以定位到具體的線程,類。
❸ java的多線程和多CPU之間的關系
沒關系吧,雖然都有個多字。
簡單的講,JVM的多線程通常是不依賴於操作系統來實現的,這一點在IBM的系統上更為常見。有些優化的JVM比如IBM的,就是使用了NativeThread機制,來達到更高的效率。
在單CPU上就能實現多線程,至於多CPU情況,要看操作系統對多CPU的支持了。
❹ 查看Java哪個線程佔用CPU資源
以下方法在LINUX下執行通過:
1.先定位佔用cpu高的進程
top
2.使用以下命令
ps p 14766 -L -o pcpu,pid,tid,time,tname,stat,psr | sort -n -k1 -r
其中14766是剛才1中cpu佔用率高的進程pid
3.2.4 32525 32537 01:58:41 ? Sl 6
0.8 32525 1771 00:43:12 ? Sl 0
0.8 32525 1769 00:39:46 ? Sl 0
0.7 32525 12324 00:33:36 ? Sl 0
0.5 32525 1772 00:27:50 ? Sl 0
0.5 32525 1768 00:25:45 ? Sl 0
0.4 32525 30760 00:19:13 ? Sl 0
0.4 32525 1773 00:22:36 ? Sl 0
0.4 32525 1770 00:20:25 ? Sl 0
0.3 32525 32385 00:00:10 ? Sl 0
0.1 32525 31668 00:00:03 ? Sl 0
0.1 32525 31667 00:00:03 ? Sl 0
0.1 32525 1790 00:07:10 ? Sl 1
其中第3個結果就是此進程中有問題的線程nid
4.通過jstack命令mp出堆棧
"AppController_ThreadPool_L2_Pool Thread" daemon prio=10 tid=0x0000000051c2b000 nid=0x7bb3 in Object.wait() [0x000000005e3c5000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.company.threadpool.ThreadPoolImpl$PoolThread.run(ThreadPoolImpl.java:142)
- locked <0x00002aaca30341a8> (a org.company.threadpool.ThreadPoolImpl$PoolThread)
其中的nid就是線程的編碼,只不過是經過了16進制的轉換。
即十進制的31776對應的十六進制)0x7bb3,定位到線程後一切好辦。
❺ java的多線程是交替佔用CPU,不是真正的並行這個和單線程不是一樣的嗎為什麼會效率會更高
比如某線程需要延時等待某操作完成,這時就可以用線程調度執行其他等待執行的線程,這樣更完全地利用了cpu的性能,因此效率高
❻ Java的多線程和CPU
CPU對於各個線程的調度是隨機的(分時調度),而在Java中,JVM負責線程的調度,可更好地分配CPU的使用權。對於線程的調度一般有兩種模式,分時調度和搶占式調度。分時調度是按照順序平均分配;搶占調度是按照優先順序來進行分配。
❼ java多線程的CPU利用率問題,怎麼解決
一般一個cpu核心可以搭載兩個線程,你根據核心去搭載線程,不要亂放線程。還有你有10個線程同時跑耗時操作最少也要4核的cpu,你可以減少線程或者減少線程中的耗時操作。如果你是解碼或者壓縮程序的話那麼cpu100%也很正常,如果是socket網路連
❽ java為什麼說每個線程只佔用一個cpu資源
意思是說JAVA的每個線程只能由一個CPU為它提供服務,無法實現多個CPU同時為一個線程提供計算服務,如果一個線程佔用CPU資源非常多,即使它耗盡一個CPU的所有資源時,其他空閑CPU也不會為它分擔任何負荷
❾ java中一個線程啟動後如何使CPU立即分配給它使它運行
sleep(1000),是把當前線程睡眠1000ms,1000ms之後,有cpu的時間片控制分配,輪到你這個線程運行,你才能運行;由於cpu運行速度特別快,所以我們看起來好像是1000ms之後就立馬運行了,但很多情況都是大於1000ms的