導航:首頁 > 編程語言 > java獲取pid

java獲取pid

發布時間:2022-05-18 12:12:26

Ⅰ 如何分析java Thread DUMP

一、Thread Dump介紹
1.1什麼是Thread Dump?
Thread Dump是非常有用的診斷Java應用問題的工具。每一個Java虛擬機都有及時生成所有線程在某一點狀態的thread-mp的能力,雖然各個 Java虛擬機列印的thread mp略有不同,但是大多都提供了當前活動線程的快照,及JVM中所有Java線程的堆棧跟蹤信息,堆棧信息一般包含完整的類名及所執行的方法,如果可能的話還有源代碼的行數。

1.2 Thread Dump特點
1. 能在各種操作系統下使用
2. 能在各種Java應用伺服器下使用
3. 可以在生產環境下使用而不影響系統的性能
4. 可以將問題直接定位到應用程序的代碼行上

1.3 Thread Dump 能診斷的問題
1. 查找內存泄露,常見的是程序里load大量的數據到緩存;
2. 發現死鎖線程;

1.4如何抓取Thread Dump
一般當伺服器掛起,崩潰或者性能底下時,就需要抓取伺服器的線程堆棧(Thread Dump)用於後續的分析. 在實際運行中,往往一次 mp的信息,還不足以確認問題。為了反映線程狀態的動態變化,需要接連多次做threadmp,每次間隔10-20s,建議至少產生三次 mp信息,如果每次 mp都指向同一個問題,我們才確定問題的典型性。

有很多方式可用於獲取ThreadDump, 下面列出一部分獲取方式:
操作系統命令獲取ThreadDump:
Windows:
1.轉向伺服器的標准輸出窗口並按下Control + Break組合鍵, 之後需要將線程堆棧復制到文件中;
UNIX/ Linux:
首先查找到伺服器的進程號(process id), 然後獲取線程堆棧.
1. ps –ef | grep java
2. kill -3 <pid>
注意:一定要謹慎, 一步不慎就可能讓伺服器進程被殺死。kill -9 命令會殺死進程。

JVM 自帶的工具獲取線程堆棧:
JDK自帶命令行工具獲取PID,再獲取ThreadDump:
1. jps 或 ps –ef|grepjava (獲取PID)
2. jstack [-l ]<pid> | tee -a jstack.log (獲取ThreadDump)

二、java線程的狀態轉換介紹(為後續分析做准備)

2.1 新建狀態(New)
用new語句創建的線程處於新建狀態,此時它和其他Java對象一樣,僅僅在堆區中被分配了內存。
2.2 就緒狀態(Runnable)
當一個線程對象創建後,其他線程調用它的start()方法,該線程就進入就緒狀態,Java虛擬機會為它創建方法調用棧和程序計數器。處於這個狀態的線程位於可運行池中,等待獲得CPU的使用權。
2.3 運行狀態(Running)
處於這個狀態的線程佔用CPU,執行程序代碼。只有處於就緒狀態的線程才有機會轉到運行狀態。
2.4 阻塞狀態(Blocked)
阻塞狀態是指線程因為某些原因放棄CPU,暫時停止運行。當線程處於阻塞狀態時,Java虛擬機不會給線程分配CPU。直到線程重新進入就緒狀態,它才有機會轉到運行狀態。
阻塞狀態可分為以下3種:
1)位於對象等待池中的阻塞狀態(Blocked in object』s wait pool):當線程處於運行狀態時,如果執行了某個對象的wait()方法,Java虛擬機就會把線程放到這個對象的等待池中,這涉及到「線程通信」的內容。
2)位於對象鎖池中的阻塞狀態(Blocked in object』s lock pool):當線程處於運行狀態時,試圖獲得某個對象的同步鎖時,如果該對象的同步鎖已經被其他線程佔用,Java虛擬機就會把這個線程放到這個對象的鎖池中,這涉及到「線程同步」的內容。

Ⅱ java怎麼獲取當前windows進程pid

Runtime.getRuntime()可以獲取java運行時的所有信息;java中有Process類,但是Process是用來處理子進程的。

Ⅲ java如何過去外設pidvid

java過去外設pidvid:VID和PID都是兩個位元組長,其中,供應商ID(VID)由供應商向USB執行論壇申請,每個供應商的VID是唯一的,PID由供應商自行決定,理論上來說,不同的產品、相同產品的不同型號、相同型號的不同設計的產品最好採用不同的PID。

根據USB規范的規定,所有的USB設備都有供應商ID(VID)和產品識別碼(PID),主機通過不同的VID和PID來區別不同的設備,VID和PID都是兩個位元組長。其中,供應商ID(VID)由供應商向USB執行論壇申請,每個供應商的VID是唯一的。

編程環境:

是一個編寫Java的Applet小程序和應用程序的程序開發環境。JDK是整個Java的核心,包括了Java運行環境(Java Runtime Environment),一些Java工具和Java的核心類庫(Java API)。不論什麼Java應用伺服器實質都是內置了某個版本的JDK。

主流的JDK是Sun公司發布的JDK,除了Sun之外,還有很多公司和組織都開發了自己的JDK,例如,IBM公司開發的JDK,BEA公司的Jrocket,還有GNU組織開發的JDK。

Ⅳ 通過bat啟動java程序,如何在console的標題欄輸出這個java進程的pid


進入cmd,輸入jvisualvm進入VisualVM工作台

Ⅳ java jconsole的pid是什麼

PID(Process ID)操作系統里指進程ID號,也就是進程標識符。操作系統里每打開一個程序都會創建一個進程ID,即PID。
PID(進程式控制制符)英文全稱為Process Identifier,它也屬於電工電子類技術術語。
PID是各進程的代號,每個進程有唯一的PID編號。它是進程運行時系統隨機分配的,並不代表專門的進程。在運行時PID是不會改變標識符的,但是你終止程序後再運行PID標識符就會被系統回收,就可能會被繼續分配給新運行的程序。
含義
只要運行一程序,系統會自動分配一個標識!
是暫時唯一:進程中止後,這個號碼就會被回收,並可能被分配給另一個新進程。
只要沒有成功運行其他程序,這個pid會繼續分配給當前要運行的程序!
如果成功運行一個程序,然後再運行別的程序時,系統會自動分配另一個pid!
PID值越小越好。

Ⅵ 如何獲取剛在java程序中啟動的進程的PID

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

class StreamDrainer implements Runnable {
private InputStream ins;

public StreamDrainer(InputStream ins) {
this.ins = ins;
}

public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
ins));
String line = null;
while ((line = reader.readLine()) != null) {
//這判斷你的進程
if(line.indexOf("QQ.exe")!=-1){
System.out.println("有QQ");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

public class TestRunCmd {
public static void main(String[] args) {
String[] cmd = new String[] { "cmd.exe", "/C", "wmic process get name" };
try {
Process process = Runtime.getRuntime().exec(cmd);
new Thread(new StreamDrainer(process.getInputStream())).start();
new Thread(new StreamDrainer(process.getErrorStream())).start();
process.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

試試這樣,我用的線程來做,你改run方法裡面的進程名就好了

Ⅶ java中,通過Runtime.getRuntime().exec建立起的進程,如何獲得其PID

exec()方法返回一個Process對象,所以下面這樣是不是能滿足你的需求?

Process process = Runtime.getRuntime().exec(command)
process.destroy()

Ⅷ 總結:腳本中,如何查看正在運行的進程的pid

如果是找出java程序的進程PID,pidof就無能為力了,可以使用ps -ef|grep java或jps -l來查看java進程的信息。通常找出進程PID的目的是確認程序是否在運行、或者為了把它殺掉、或者發送一個信號給它。常用參數格式:pidof program
找出program程序的進程PID,如果有多個就會全部列出,program不能是shell腳本名稱。
格式:pidof -s program
找出program程序的進程PID,只列出一個。(Single shot - this instructs the program to only return one pid.)
格式:pidof -x script
找出shell腳本script的進程PID。
參數:-o omitpid
參數:-o omitpid1 -o omitpid2
在列出的進程PID中忽略omitpid。可以有多個。參數:-s只列出一個。

Ⅸ 如何用javaAPI取得java進程的PID

String name = ManagementFactory.getRuntimeMXBean().getName();
System.out.println(name);
// get pid
String pid = name.split("@")[0];
System.out.println("Pid is:" + pid);

Ⅹ java怎麼獲取已安裝的USB口驅動信息(包含信息:驅動名,pid,vid等)

這個可以通過JAVA 的JNI 去調用操作系統的API去獲取已安裝的USB介面驅動的問題.
至於java的JNI是怎樣工作的,以及其工作的原理可以參考下面這篇文章:
IT技術社區:http://www.itskillzone.com/forum.php?mod=viewthread&tid=47&extra=

JAVA基礎之理解JNI原理

閱讀全文

與java獲取pid相關的資料

熱點內容
漢語命令形 瀏覽:193
ACG官網下載的游戲怎麼解壓 瀏覽:963
stata交叉項命令 瀏覽:470
程序員老公燙頭 瀏覽:692
伺服器文件地址格式 瀏覽:131
securecrtandroid 瀏覽:176
短字元串壓縮 瀏覽:863
u盤插入後顯示加密格式化 瀏覽:944
我的世界怎麼用命令方塊獲得超級武器 瀏覽:382
狗語翻譯器app鏈接怎麼下 瀏覽:905
選擇排序演算法的流程圖 瀏覽:881
如何對文件夾開啟共享 瀏覽:527
常用的磁碟調度演算法 瀏覽:662
怎麼用返利app返利 瀏覽:127
java代碼快速 瀏覽:243
單片機左移右移後是補1還是0 瀏覽:599
湛江一號命令 瀏覽:333
導出命令行 瀏覽:274
C和php交互 瀏覽:600
蘋果手機里的通訊錄如何導入安卓手機 瀏覽:170