问题排查-jps和jstack

jps

jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。

为巍山等地区用户提供了全套网页设计制作服务,及巍山网站建设行业解决方案。主营业务为做网站、成都网站建设、巍山网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

问题排查-jps和jstack

参数说明:

-q:只输出进程 ID
-m:输出传入 main 方法的参数
-l:输出完全的包名,应用主类名,jar的完全路径名
-v:输出jvm参数
-V:输出通过flag文件传递到JVM中的参数

1、jps 显示进程的ID 和 类的名称
问题排查-jps和jstack

2、jps -q 只输出进程ID,而不显示出类的名称
问题排查-jps和jstack

3、jps -m 可以输出传递给 Java 进程(main 方法)的参数
问题排查-jps和jstack
4、jps -l 可以输出主函数的完整路径(类的全路径)
问题排查-jps和jstack
5、 jps -v 可以显示传递给 Java 虚拟机的参数
问题排查-jps和jstack

获取远程服务器 jps 信息

jps 支持查看远程服务上的 jvm 进程信息。如果需要查看其他机器上的 jvm 进程,需要在待查看机器上启动 jstatd 服务。

jstack

jstack是jdk自带的线程堆栈分析工具,使用该命令可以查看或导出 Java 应用程序中线程堆栈信息。

举例:如果CPU负荷达到100%,我们如何排查?

1、使用top命令查找到占用cpu最多的java进程。

2、使用下面的命令查看,java进程中,占用cpu最多的线程

top -Hp 23344(进程ID)

3、然后使用jstack pid查看,这个占用cpu最多的线程情况。

这里注意:
jstack命令生成的thread dump信息包含了JVM中所有存活的线程,为了分析指定线程,必须找出对应线程的调用栈,应该如何找?

可以看到,jstack里面,每一个线程都对应一个nid,这个nid是16进制的。
问题排查-jps和jstack
1、把要查看的pid转换成16进制,进行匹配即可找到要查看的线程的信息。
2、然后可以多打印几次jstack信息,这样找到这个线程在哪一段代码,出现的频率最高,然后查看线程状态。

3、在dump中,线程一般存在如下几种状态:
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

两个线程在互相等待另一个线程的锁!!

分享题目:问题排查-jps和jstack
文章位置:https://www.cdcxhl.com/article46/peiieg.html

成都网站建设公司_创新互联,为您提供自适应网站软件开发商城网站外贸建站网站制作营销型网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司