在Tomcat启动界面执行Control+Break组合键

Tomcat启动不报错,但是没有定时执行程序,老板执行了ctrl+break键,在Tomcat界面输出了大量的信息,我很郁闷就在网上查了什么意思,在这记录下来,供以后学习。
参考:https://segmentfault.com/a/1190000014199369
在windows上,这两个组合键的作用是将线程转储打印到应用程序的标准输出。在Linux上是ctrl+反斜杠\。

Ctrl+Break作用:线程转储、检测死锁、堆摘要。

1.线程转储
线程转储由线程堆栈(包括线程状态)组成,用于虚拟机中的所有Java线程。线程转储不会终止应用程序:在打印线程信息之后,将继续执行程序。

"Timer-0" #30 daemon prio=5 os_prio=0 tid=0x0000000022d5e000 nid=0xab88 in Objec
t.wait() [0x000000002d47f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        - waiting on <0x00000006c36b5710> (a java.util.TaskQueue)
        at java.util.TimerThread.mainLoop(Timer.java:552)
        - locked <0x00000006c36b5710> (a java.util.TaskQueue)
        at java.util.TimerThread.run(Timer.java:505)

"scheduler_QuartzSchedulerThread" #29 prio=5 os_prio=0 tid=0x0000000022d5d000 ni
d=0xbabc in Object.wait() [0x000000002c2df000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:
410)
        - locked <0x00000006c36ddd38> (a java.lang.Object)

"scheduler_Worker-10" #28 prio=5 os_prio=0 tid=0x0000000022324800 nid=0xc43c in
Object.wait() [0x000000002e05f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.j
ava:568)
        - locked <0x00000006c36c56e0> (a java.lang.Object)

输出由一个空行分隔多个线程项。java线程首先打印出来,后面是有关VM内部线程的信息。每个线程项都由标题行和线程堆栈跟踪组成。
标题行包含有关线程的以下信息:
线程名称:Timer-0
指示线程是否为守护进程线程:daemon
线程优先级(prio):prio=5
线程ID(tid),它是内存中线程结构的地址:tid=0x0000000022d5e000
本机线程的ID(nid):nid=0xab88
线程状态,指示线程在线程转储时所做的操作:Object.wait()
地址范围,它给出了线程的有效堆栈区域的估计值:[0x000000002d47f000]

2.检测死锁
除了线程堆栈之外, 控件 + 中断处理程序还执行死锁检测算法。如果检测到任何死锁, 则控制 + 中断处理程序在每个已死锁线程上的线程转储之后打印附加信息。
死锁线程的附加信息

Found one Java-level deadlock:
=============================
"Thread2":
  waiting to lock monitor 0x000af330 (object 0xf819a938, a java.lang.String),
  which is held by "Thread1"
"Thread1":
  waiting to lock monitor 0x000af398 (object 0xf819a970, a java.lang.String),
  which is held by "Thread2"

Java stack information for the threads listed above:
===================================================
"Thread2":
        at Deadlock$DeadlockMakerThread.run(Deadlock.java:32)
        - waiting to lock <0xf819a938> (a java.lang.String)
        - locked <0xf819a970> (a java.lang.String)
"Thread1":
        at Deadlock$DeadlockMakerThread.run(Deadlock.java:32)
        - waiting to lock <0xf819a970> (a java.lang.String)
        - locked <0xf819a938> (a java.lang.String)

Found 1 deadlock.

如果设置了 JVM 标志-XX:+PrintConcurrentLocks , 则Control + Break 处理程序还将打印每个线程拥有的并发锁的列表。

3.堆摘要
Control + Break 处理程序也会打印堆摘要。显示不同的世代 (堆的区域), 大小、使用量和地址范围。如果同时使用工具 (如pmap ) 检查进程, 则地址范围尤其有用。

Heap
 def new generation   total 1152K, used 435K [0x22960000, 0x22a90000, 0x22e40000
)
  eden space 1088K,  40% used [0x22960000, 0x229ccd40, 0x22a70000)
  from space 64K,   0% used [0x22a70000, 0x22a70000, 0x22a80000)
  to   space 64K,   0% used [0x22a80000, 0x22a80000, 0x22a90000)
 tenured generation   total 13728K, used 6971K [0x22e40000, 0x23ba8000, 0x269600
00)
   the space 13728K,  50% used [0x22e40000, 0x2350ecb0, 0x2350ee00, 0x23ba8000)
 compacting perm gen  total 12288K, used 1417K [0x26960000, 0x27560000, 0x2a9600
00)
   the space 12288K,  11% used [0x26960000, 0x26ac24f8, 0x26ac2600, 0x27560000)
    ro space 8192K,  62% used [0x2a960000, 0x2ae5ba98, 0x2ae5bc00, 0x2b160000)
    rw space 12288K,  52% used [0x2b160000, 0x2b79e410, 0x2b79e600, 0x2bd60000)

如果设置了 JVM 标志-XX:+PrintClassHistogram , 则Control + Break 处理程序将生成堆直方图。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值