記一次線程等待引發的bug解決過程

1. 記一次線程等待引發的bug解決過程

1.1. 問題

使用Springboot的Scheduled註解框架執行定時任務,發現線上忽然不打任何日誌了,咱們要找到它不打日誌的緣由java

1.2. 導出堆棧信息

  1. 咱們使用的是阿里的k8s服務,其實哪裏都同樣,進到對應容器的裏,導出堆棧信息
jps 或 top找到執行java程序的pid
jstack -l pid > out.dump
複製代碼

而後退出容器後,使用docker cp 容器id:out.dump out.dump拿到本機目錄,後用ftp拿到該文件docker

1.3. 分析堆棧信息

  1. 我使用了一個在線分析工具,能夠推薦下,將out.dump上傳上去分析

想要找到對應線程,首先你日誌得把對應的線程信息打印出來,根據以前打印日誌的線程信息,能夠知道該找哪一個線程bash

UTOOLS1585296657076.png

而後找到對應線程打開多線程

UTOOLS1585296545404.png

找到了阻塞的緣由,因爲多線程中countdown以前代碼運行報錯,致使不能執行countdown,使得await阻塞了,我把countdown放到finally中就能夠解決該問題了框架

相關文章
相關標籤/搜索