使用jps和jstack查看java的进程和线程信息

使用jps和jstack查看java的进程和线程信息,第1张

使用jps和jstack查看java的进程线程信息
    jps:列出正在运行的进程的pid, pnamejstack -l pid: 列出某个进程内的线程,包含用户线程,守护线程和其它线程,守护线程有编译线程和引用处理线程
C:UsersDELLOR>jps
5412 BootLanguagServerBootApp
10460 PipedIODemo
16140
17964 Jps

C:UsersDELLOR>jstack -l 10460
2022-01-29 20:53:48
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode):

"DestroyJavaVM" #13 prio=5 os_prio=0 tid=0x00000247c1691000 nid=0x5f8 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"recieve" #12 prio=5 os_prio=0 tid=0x00000247d969d800 nid=0x38c8 in Object.wait() [0x000000c3029ff000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000d64b3280> (a java.io.PipedInputStream)
        at java.io.PipedInputStream.read(Unknown Source)
        - locked <0x00000000d64b3280> (a java.io.PipedInputStream)
        at java.io.PipedInputStream.read(Unknown Source)
        - locked <0x00000000d64b3280> (a java.io.PipedInputStream)
        at java.io.InputStream.read(Unknown Source)
        at iopart.Recieve.run(PipedIODemo.java:61)
        at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
        - None

"send" #11 prio=5 os_prio=0 tid=0x00000247d969c800 nid=0x305c runnable [0x000000c3028fe000]
   java.lang.Thread.State: RUNNABLE
        at java.io.FileInputStream.readBytes(Native Method)
        at java.io.FileInputStream.read(Unknown Source)
        at java.io.BufferedInputStream.read1(Unknown Source)
        at java.io.BufferedInputStream.read(Unknown Source)
        - locked <0x00000000d6359a98> (a java.io.BufferedInputStream)
        at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
        at sun.nio.cs.StreamDecoder.read(Unknown Source)
        - locked <0x00000000d645ac98> (a java.io.InputStreamReader)
        at java.io.InputStreamReader.read(Unknown Source)
        at java.io.Reader.read(Unknown Source)
        at java.util.Scanner.readInput(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at iopart.Send.run(PipedIODemo.java:27)
        at java.lang.Thread.run(Unknown Source)

   Locked ownable synchronizers:
        - None

"Service Thread" #10 daemon prio=9 os_prio=0 tid=0x00000247d830e800 nid=0x8b0 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C1 CompilerThread3" #9 daemon prio=9 os_prio=2 tid=0x00000247d82ee000 nid=0x3998 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C2 CompilerThread2" #8 daemon prio=9 os_prio=2 tid=0x00000247d82e6800 nid=0x2344 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C2 CompilerThread1" #7 daemon prio=9 os_prio=2 tid=0x00000247d82e0800 nid=0x3d94 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"C2 CompilerThread0" #6 daemon prio=9 os_prio=2 tid=0x00000247d82de800 nid=0x2f8c waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x00000247d82de000 nid=0x2744 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x00000247d82dd000 nid=0x1464 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
        - None

"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x00000247d825a800 nid=0x32d8 in Object.wait() [0x000000c301ffe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000d6308ee0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        - locked <0x00000000d6308ee0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(Unknown Source)
        at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

   Locked ownable synchronizers:
        - None

"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x00000247d8239800 nid=0x2af0 in Object.wait() [0x000000c301efe000]
   java.lang.Thread.State: WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000000d6306c00> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Unknown Source)
        at java.lang.ref.Reference.tryHandlePending(Unknown Source)
        - locked <0x00000000d6306c00> (a java.lang.ref.Reference$Lock)
        at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

   Locked ownable synchronizers:
        - None

"VM Thread" os_prio=2 tid=0x00000247d8236000 nid=0x4334 runnable

"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00000247c16a9000 nid=0x13bc runnable

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00000247c16aa000 nid=0x313c runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00000247c16ab800 nid=0xa88 runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00000247c16ae000 nid=0x1704 runnable

"GC task thread#4 (ParallelGC)" os_prio=0 tid=0x00000247c16af000 nid=0x4254 runnable

"GC task thread#5 (ParallelGC)" os_prio=0 tid=0x00000247c16b0000 nid=0x3458 runnable

"GC task thread#6 (ParallelGC)" os_prio=0 tid=0x00000247c16b3000 nid=0x3300 runnable

"GC task thread#7 (ParallelGC)" os_prio=0 tid=0x00000247c16b4000 nid=0x3284 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x00000247d9651000 nid=0x2c8c waiting on condition

JNI global references: 5

管道流用于线程间传输数据,创建两个线程,一个线程向管道里写入从键盘输入的数据,另一个线程从管道里读取数据,并打印至控制台。
运行的进程为PipedIODemo,在此进程中创建了两个线程,名称为"send"和"recieve",表示发送线程和接收线程。进程和线程信息可使用jps和jstack查看。

package iopart;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.Scanner;

public class PipedIODemo {
	public static void main(String[] args) {
		Send send = new Send();
		Recieve recieve = new Recieve();
		recieve.connect(send.getOut());
		new Thread(send,"send").start();
		new Thread(recieve,"recieve").start();
	}
}
class Send implements Runnable{
	PipedOutputStream out=new PipedOutputStream();
	public PipedOutputStream getOut() {
		return out;
	}
	Scanner sc=new Scanner(System.in);
	@Override
	public void run() {
		String next = null;
		while(!"end".equalsIgnoreCase(next)) {
			next= sc.next();
			try {
				out.write(next.getBytes());
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		try {
			if (out!=null) {
				out.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}
class Recieve implements Runnable{
	PipedInputStream in=new PipedInputStream();
	public PipedInputStream getIn() {
		return in;
	}
	public void connect(PipedOutputStream out) {
		try {
			this.in.connect(out);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	@Override
	public void run() {
		byte[] bytes=new byte[1024];
		while(true) {
			try {
				in.read(bytes);
				System.out.println(new String(bytes));
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5716437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存