さんだんダンプ


1.スレッドステータス


  • NEW:ねじが作成されていますが、
  • はまだ実行されていません.
  • RUNNABLE:現在CPUを占有して稼働中.OSのリソース割り当てによってWAITING状態になる可能性があります.
  • BLOCKED:モニタの状態を取得するために他のスレッドのロック解除を待つ
  • .
  • WAITING:wait()メソッド、join()メソッド、park()メソッドなど、待機状態
  • TIMED WAITING:sleep()メソッド、wait()メソッド、join()メソッド、park()メソッドなど.WAITING状態との違いは,メソッドの引数によって最大待ち時間を指定できるため,外部変化だけでなく時間もWAITING状態を解除する.
  • 2.Threadによる問題解決


    1.CPUの利用率が異常に高い場合


    CPUを最も多く使用するスレッドを抽出します.

    2.実行性能異常が遅い場合


    アプリケーションの実行が非常に遅い場合、通常、BLOCKEDステータスのスレッドが発生します.この場合、Thread Dumpを複数回取得し、BLOCKED状態のThreadリストを検索し、BLOCKED状態のThreadが取得したいRockに関するThreadを抽出することができる.

    3.ネジダンプの生成方法

    jps -v		// 자바 애플리케이션 프로세스 PID 확인
    
    jstack PID		//jps로 추출한 PID를 인수로 넣어 jstack을 하면 쓰레드 덤프를 획득한다.

    4.例


    サンプルコード
    ThreadTest.java
    package thread;
    
    public class ThreadTest implements Runnable {
        private long depositeMoney = 10000;
        public void run() {
            synchronized (this) {
                for (int i = 0; i < 10; i++) {
                    notify();
                    try {
                        wait();
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } if (getDepositeMoney() <= 0)
                        break; withDraw(1000);
                }
            }
        }
        public void withDraw(long howMuch) {
            if (getDepositeMoney() > 0) {
                depositeMoney -= howMuch;
                System.out.print(Thread.currentThread().getName() + " , ");
            } else { System.out.print(Thread.currentThread().getName() + " , ");
            System.out.println("잔액이 부족합니다.");
            }
        }
        public long getDepositeMoney() {
            return depositeMoney;
        }
    }
    ThreadMain.java
    package thread;
    
    public class ThreadMain {
        public static void main(String[] args) {
            ThreadTest atm = new ThreadTest();
            Thread mother = new Thread(atm, "mother");
            Thread son = new Thread(atm, "son");
            mother.start();
            son.start();
        }
    }

  • PIDの確認


  • ねじダンプの作成


  • Thread詳細
    https://fastthread.io/にThreed Dumpをアップロードする
  • リファレンス
  • https://ijbgo.tistory.com/33
  • https://d2.naver.com/helloworld/1286587
  • https://d2.naver.com/helloworld/10963
  • https://goyunji.tistory.com/64