トラブルシューティング-jpsとjstack

JPS

JPSは、Linuxのpsコマンドのようなコマンドが、それだけで、システム内のすべてのJavaアプリケーションを示しています。あなたは簡単に情報パラメータとJava仮想マシンのパラメータを渡し、Javaプロセスのjpsコマンドによって起動クラスを見ることができます。

トラブルシューティング-jpsとjstack

パラメータ:

-q:プロセス出力のみIDの
-m:出力メインメソッドパラメータ渡さ
-l:出力完全なパッケージ名、メインクラスのアプリケーション名、JARフルパスの
-v:JVM出力パラメータ
-V:ファイル配信によってフラグ出力JVMのパラメータ

1、JPS IDは、プロセスの名前とタイプを表示します
トラブルシューティング-jpsとjstack

図2に示すように、クラスの名前を表示せずにのみプロセスID JPS -q出力、
トラブルシューティング-jpsとjstack

-m出力(mainメソッド)Javaプロセスに渡されたパラメータもよい3、JPS
トラブルシューティング-jpsとjstack
-l出力フルパス(フルパスなど)主な機能月4、JPS
トラブルシューティング-jpsとjstack
5は、JPS -vパラメータは、Java仮想マシンのディスプレイに渡すことができます
トラブルシューティング-jpsとjstack

JPSの情報を取得するために、リモートサーバー

JPSは、JVMプロセスにリモートサービスに関する情報をサポートしています。あなたが他のマシン上のJVMプロセスを表示する必要がある場合は、表示されるように、マシン上でのjstatdサービスを開始する必要があります。

jstack

jstackは、JDK独自のスレッドスタック解析ツールで、Javaアプリケーション・スレッド・スタック情報を表示したり、エクスポートするコマンドを使用します。

例:CPU負荷が100%に達した場合、どのように我々は解決しますか。

1、最も占有CPUのjavaプロセスを見つけるためにtopコマンド。

2、CPUスレッドの大半を占め、ビューにjavaプロセスを次のコマンドを使用します。

top -Hp 23344(进程ID)

3、その後、占有CPUスレッド状況のほとんどをjstack pidのビューを使用します。

ここでの注意:
jstackコマンドはすべての生きているJVMのスレッドに含まれるスレッドダンプ情報を生成し、指定したスレッドを分析するために、スレッドは、対応するコールスタックを見つけなければならない、そしてそれがどのように見えるべきか?

あなたは、NIDは16進数で、各スレッドは、NIDに対応し、内部jstack、見ることができます。
トラブルシューティング-jpsとjstack
1、進に表示するには、PIDを変換するために、あなたが見たいスレッドを一致させるための情報を見つけることができます。
2、その後、あなたは数回jstack情報以上のものを印刷するので、このスレッドその後、コードの一部、表示され、スレッドの状態を表示して最高周波数を見つけることができます。

3は、ダンプに、スレッドは通常存在し、いくつかの状態:
3.1、RUNNABLEは、実行スレッドがある
3.2、BLOCKED、スレッドがブロックされ
たスレッドが待っている、3.3、WAITINGを

4、例えば:デッドロック

package com.jane;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

public class Main {

    public static void main(String[] args) {
        ReentrantLock lock1 = new ReentrantLock();
        ReentrantLock lock2 = new ReentrantLock();

        Thread t1 = new Thread() {
            @Override
            public void run() {
                try {
                    lock1.lock();
                    TimeUnit.SECONDS.sleep(1);
                    lock2.lock();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        Thread t2 = new Thread() {
            @Override
            public void run() {
                try {
                    lock2.lock();
                    TimeUnit.SECONDS.sleep(1);
                    lock1.lock();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        t1.setName("mythread1");
        t2.setName("mythread2");
        t1.start();
        t2.start();

    }
}

トラブルシューティング-jpsとjstack

トラブルシューティング-jpsとjstack

2つのスレッドがそれぞれ別のスレッドを待ってロック!

おすすめ

転載: blog.51cto.com/janephp/2433224