当前位置: 首页 > 知识库问答 >
问题:

Logback |同步/异步日志记录|线程|线程转储

曾阳飙
2023-03-14

正如logback的文档所说,大多数appender本质上是同步的,但是如果我们将appender包装在异步appender中,那么线程将把数据推送到BlockingQueue中,如果有,比如说X-logback线程将从BlockingQueue获取数据并将其追加。这就是我对它的基本理解。

尝试使用JstackThread转储来测试这个。但是空手返回,没有回退线程的线索。

作为参考,请检查下面logback.xml和线程转储的方案。

具有异步的FileAppender。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug = "true">

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>myapp.log</file>
        <encoder>
            <pattern>%logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
    </appender>

    <root level="DEBUG">
        <appender-ref ref="ASYNC" />
    </root>
</configuration>

线程转储

2022-05-01 20:24:28
Full thread dump OpenJDK 64-Bit Server VM (11.0.11+9-b1504.13 mixed mode):

Threads class SMR info:
_java_thread_list=0x0000600000a6bc40, length=11, elements={
0x000000013101c800, 0x000000013101a800, 0x000000013300a800, 0x0000000132077000,
0x0000000131874800, 0x0000000131852800, 0x0000000131853000, 0x0000000131025000,
0x00000001320e2800, 0x0000000125043800, 0x000000013218d000
}

"Reference Handler" #2 daemon prio=10 os_prio=31 cpu=0.51ms elapsed=386.08s tid=0x000000013101c800 nid=0x4303 waiting on condition  [0x000000016ebbe000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.11/Native Method)
    at java.lang.ref.Reference.processPendingReferences(java.base@11.0.11/Reference.java:241)
    at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.11/Reference.java:213)

   Locked ownable synchronizers:
    - None

"Finalizer" #3 daemon prio=8 os_prio=31 cpu=0.41ms elapsed=386.08s tid=0x000000013101a800 nid=0x3303 in Object.wait()  [0x000000016edca000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(java.base@11.0.11/Native Method)
    - waiting on <0x000000079af0d550> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
    - waiting to re-lock in wait() <0x000000079af0d550> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:176)
    at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.11/Finalizer.java:170)

   Locked ownable synchronizers:
    - None

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 cpu=1.67ms elapsed=386.07s tid=0x000000013300a800 nid=0x3d03 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Service Thread" #5 daemon prio=9 os_prio=31 cpu=0.02ms elapsed=386.07s tid=0x0000000132077000 nid=0x5603 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"C2 CompilerThread0" #6 daemon prio=9 os_prio=31 cpu=337.48ms elapsed=386.07s tid=0x0000000131874800 nid=0x5703 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

   Locked ownable synchronizers:
    - None

"C1 CompilerThread0" #9 daemon prio=9 os_prio=31 cpu=266.34ms elapsed=386.07s tid=0x0000000131852800 nid=0xa603 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

   Locked ownable synchronizers:
    - None

"Sweeper thread" #10 daemon prio=9 os_prio=31 cpu=0.05ms elapsed=386.07s tid=0x0000000131853000 nid=0x5b03 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Common-Cleaner" #11 daemon prio=8 os_prio=31 cpu=2.86ms elapsed=386.05s tid=0x0000000131025000 nid=0xa303 in Object.wait()  [0x000000016fd36000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(java.base@11.0.11/Native Method)
    - waiting on <0x000000079af0dfe8> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
    - waiting to re-lock in wait() <0x000000079af0dfe8> (a java.lang.ref.ReferenceQueue$Lock)
    at jdk.internal.ref.CleanerImpl.run(java.base@11.0.11/CleanerImpl.java:148)
    at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
    at jdk.internal.misc.InnocuousThread.run(java.base@11.0.11/InnocuousThread.java:134)

   Locked ownable synchronizers:
    - None

"JPS event loop" #12 prio=5 os_prio=31 cpu=33.87ms elapsed=385.71s tid=0x00000001320e2800 nid=0xa003 runnable  [0x000000016ff42000]
   java.lang.Thread.State: RUNNABLE
    at sun.nio.ch.KQueue.poll(java.base@11.0.11/Native Method)
    at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@11.0.11/KQueueSelectorImpl.java:122)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@11.0.11/SelectorImpl.java:124)
    - locked <0x000000079af0e4c8> (a sun.nio.ch.Util$2)
    - locked <0x000000079af0e468> (a sun.nio.ch.KQueueSelectorImpl)
    at sun.nio.ch.SelectorImpl.select(java.base@11.0.11/SelectorImpl.java:141)
    at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:810)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)

   Locked ownable synchronizers:
    - None

"DestroyJavaVM" #14 prio=5 os_prio=31 cpu=583.44ms elapsed=385.33s tid=0x0000000125043800 nid=0x1903 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Attach Listener" #16 daemon prio=9 os_prio=31 cpu=2.01ms elapsed=295.61s tid=0x000000013218d000 nid=0x9507 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"VM Thread" os_prio=31 cpu=39.84ms elapsed=386.09s tid=0x0000000131016000 nid=0x3003 runnable  

"GC Thread#0" os_prio=31 cpu=6.72ms elapsed=386.10s tid=0x0000000133014800 nid=0x2d03 runnable  

"GC Thread#1" os_prio=31 cpu=6.27ms elapsed=385.62s tid=0x000000013188d800 nid=0x9e03 runnable  

"GC Thread#2" os_prio=31 cpu=5.06ms elapsed=385.62s tid=0x000000013187f800 nid=0x9c03 runnable  

"GC Thread#3" os_prio=31 cpu=5.78ms elapsed=385.62s tid=0x0000000131a79800 nid=0x9a03 runnable  

"G1 Main Marker" os_prio=31 cpu=0.25ms elapsed=386.10s tid=0x0000000132018000 nid=0x5003 runnable  

"G1 Conc#0" os_prio=31 cpu=2.57ms elapsed=386.10s tid=0x0000000133015000 nid=0x4c03 runnable  

"G1 Conc#1" os_prio=31 cpu=2.47ms elapsed=385.47s tid=0x0000000131ae8800 nid=0x9403 runnable  

"G1 Refine#0" os_prio=31 cpu=1.64ms elapsed=386.10s tid=0x0000000131819800 nid=0x4a03 runnable  

"G1 Refine#1" os_prio=31 cpu=0.53ms elapsed=385.62s tid=0x000000013311f800 nid=0x9803 runnable  

"G1 Young RemSet Sampling" os_prio=31 cpu=50.84ms elapsed=386.10s tid=0x000000013181a000 nid=0x4903 runnable  
"VM Periodic Task Thread" os_prio=31 cpu=198.90ms elapsed=386.05s tid=0x000000012580a800 nid=0x5c03 waiting on condition  

JNI global refs: 14, weak refs: 0

对于ConsoleAppender也没有ASYNC。

2022-04-28 11:59:20
Full thread dump OpenJDK 64-Bit Server VM (11.0.11+9-b1504.13 mixed mode):

Threads class SMR info:
_java_thread_list=0x00006000018d3740, length=11, elements={
0x000000014b08c800, 0x000000014b089000, 0x000000014904b800, 0x000000014b099000,
0x000000014b09e000, 0x000000014b09f000, 0x0000000149031800, 0x0000000149828000,
0x00000001498b8000, 0x0000000149172800, 0x000000014b1ba000
}

"Reference Handler" #2 daemon prio=10 os_prio=31 cpu=0.55ms elapsed=282.20s tid=0x000000014b08c800 nid=0x4b03 waiting on condition  [0x00000001702d2000]
   java.lang.Thread.State: RUNNABLE
    at java.lang.ref.Reference.waitForReferencePendingList(java.base@11.0.11/Native Method)
    at java.lang.ref.Reference.processPendingReferences(java.base@11.0.11/Reference.java:241)
    at java.lang.ref.Reference$ReferenceHandler.run(java.base@11.0.11/Reference.java:213)

"Finalizer" #3 daemon prio=8 os_prio=31 cpu=0.33ms elapsed=282.20s tid=0x000000014b089000 nid=0x4803 in Object.wait()  [0x00000001704de000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(java.base@11.0.11/Native Method)
    - waiting on <0x0000000794cedb80> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
    - waiting to re-lock in wait() <0x0000000794cedb80> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:176)
    at java.lang.ref.Finalizer$FinalizerThread.run(java.base@11.0.11/Finalizer.java:170)

"Signal Dispatcher" #4 daemon prio=9 os_prio=31 cpu=0.96ms elapsed=282.18s tid=0x000000014904b800 nid=0x4203 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Service Thread" #5 daemon prio=9 os_prio=31 cpu=0.01ms elapsed=282.18s tid=0x000000014b099000 nid=0x5603 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" #6 daemon prio=9 os_prio=31 cpu=429.52ms elapsed=282.18s tid=0x000000014b09e000 nid=0x5903 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"C1 CompilerThread0" #9 daemon prio=9 os_prio=31 cpu=348.22ms elapsed=282.18s tid=0x000000014b09f000 nid=0x5b03 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE
   No compile task

"Sweeper thread" #10 daemon prio=9 os_prio=31 cpu=0.04ms elapsed=282.18s tid=0x0000000149031800 nid=0xa703 runnable  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Common-Cleaner" #11 daemon prio=8 os_prio=31 cpu=3.60ms elapsed=282.15s tid=0x0000000149828000 nid=0xa503 in Object.wait()  [0x000000017144a000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(java.base@11.0.11/Native Method)
    - waiting on <0x0000000794cee618> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(java.base@11.0.11/ReferenceQueue.java:155)
    - waiting to re-lock in wait() <0x0000000794cee618> (a java.lang.ref.ReferenceQueue$Lock)
    at jdk.internal.ref.CleanerImpl.run(java.base@11.0.11/CleanerImpl.java:148)
    at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)
    at jdk.internal.misc.InnocuousThread.run(java.base@11.0.11/InnocuousThread.java:134)

"JPS event loop" #12 prio=5 os_prio=31 cpu=40.32ms elapsed=281.67s tid=0x00000001498b8000 nid=0xa303 runnable  [0x0000000171656000]
   java.lang.Thread.State: RUNNABLE
    at sun.nio.ch.KQueue.poll(java.base@11.0.11/Native Method)
    at sun.nio.ch.KQueueSelectorImpl.doSelect(java.base@11.0.11/KQueueSelectorImpl.java:122)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(java.base@11.0.11/SelectorImpl.java:124)
    - locked <0x0000000794cee9e0> (a sun.nio.ch.Util$2)
    - locked <0x0000000794cee980> (a sun.nio.ch.KQueueSelectorImpl)
    at sun.nio.ch.SelectorImpl.select(java.base@11.0.11/SelectorImpl.java:141)
    at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:810)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:457)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at java.lang.Thread.run(java.base@11.0.11/Thread.java:829)

"DestroyJavaVM" #14 prio=5 os_prio=31 cpu=823.18ms elapsed=280.75s tid=0x0000000149172800 nid=0x2703 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" #16 daemon prio=9 os_prio=31 cpu=1.41ms elapsed=7.34s tid=0x000000014b1ba000 nid=0x6407 waiting on condition  [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"VM Thread" os_prio=31 cpu=21.10ms elapsed=282.21s tid=0x000000014a00d000 nid=0x3803 runnable  

"GC Thread#0" os_prio=31 cpu=7.63ms elapsed=282.23s tid=0x000000014b010000 nid=0x2e03 runnable  

"GC Thread#1" os_prio=31 cpu=10.22ms elapsed=281.44s tid=0x00000001499e5000 nid=0xa203 runnable  

"GC Thread#2" os_prio=31 cpu=8.88ms elapsed=281.44s tid=0x000000014a126000 nid=0xa003 runnable  

"GC Thread#3" os_prio=31 cpu=9.58ms elapsed=281.44s tid=0x000000014b16e800 nid=0x6303 runnable  

"G1 Main Marker" os_prio=31 cpu=0.39ms elapsed=282.23s tid=0x000000014b01d000 nid=0x2f03 runnable  

"G1 Conc#0" os_prio=31 cpu=3.13ms elapsed=282.23s tid=0x000000014900c000 nid=0x3203 runnable  

"G1 Conc#1" os_prio=31 cpu=3.24ms elapsed=280.98s tid=0x0000000149a00800 nid=0x6503 runnable  

"G1 Refine#0" os_prio=31 cpu=1.22ms elapsed=282.23s tid=0x0000000149022000 nid=0x3403 runnable  

"G1 Young RemSet Sampling" os_prio=31 cpu=33.96ms elapsed=282.23s tid=0x0000000149022800 nid=0x4f03 runnable  
"VM Periodic Task Thread" os_prio=31 cpu=119.50ms elapsed=282.16s tid=0x000000012b008800 nid=0xa603 waiting on condition  

JNI global refs: 14, weak refs: 0

谁能帮帮我,为什么JStack没有显示任何LOGBACK-THREAD在停车状态下等待。

共有1个答案

邢思淼
2023-03-14

在做了更多的研究后,我发现我为我的应用程序选择了错误的PID。在我使用ps-ef然后按应用程序名称搜索之前,这有点正确,但我不知道有两个实例正在运行,我选择了错误的一个。

多亏了baeldung,我使用了Jps命令,然后选择了应用程序的PID,并简单地

JStack PID

我们开始了。

 类似资料:
  • 下面的代码创建了一个新的custom um < code > Thread ,并等待线程结束,直到主线程再次激活。 > < li >我不太明白它是如何工作的。为什么< code > myth read . wait();立即接到电话? < li> 为什么不改用< code>Thread.join()? 公共静态void main(String[] args) {

  • 所以我有一个代码: 所以我将线程添加到我的线程列表中,然后启动这些线程。这是MyThread类: 我想做一个程序来创建线程,将它们添加到列表中,调用它们,但是每个线程都应该等到前一个线程结束它的任务。因此输出应该如下所示: 如何使用实现这一点?我尝试了使用的不同方法,但失败了。

  • 互斥锁 条件变量 POSIX信号量

  • 问题内容: 我正在使用Android App,无法将View与硬件同步。让我解释。 1)我从线程1的run方法中基于数组A中存储的随机值(即随机睡眠)对Android的麦克风进行静音和取消静音。 2)我画出反映麦克风静音的蓝色脉冲。这是通过独立的View类完成的。 3)通过从倒数计时器的onTick内调用,我在上面视图中绘制的图形上移动了一条红线。 我以这种方式一个接一个地启动两个线程: 线程1.

  • 主要内容:1 什么是Java 线程同步,2 为什么使用Java线程同步,3 Java同步类型,4 Java线程同步的类型,5 线程互斥,6 Java锁的概念,7 线程并发问题引发数据不一致,8 Java synchronized方法的例子1,9 Java synchronized方法的例子21 什么是Java 线程同步 Java中的同步是控制多个线程对任何共享资源的访问的能力。 Java同步是更好的选择,我们希望只允许一个线程访问共享资源。 2 为什么使用Java线程同步 Java线程同步主要用

  • 我有3节课是这样的: 来源Java语言 任务Java语言 主要的Java语言 当类源的x等于4时,只有一个任务继续递增x,直到x等于8,我们恢复正常。结果如下: 要获得此结果,我需要修复什么?