• JVM性能、多线程排查常用命令


      最近遇到很一个很棘手的多线程问题,跟踪了几天终于解决了,在此记录跟踪过程的常用命令,后期有空再做具体的事件总结。软件的开发一定要有监控,一定要有监控,一定要有监控,重要的事情说三遍。没有监控的软件就是放荡不羁的流浪汉,无人看管,不好排查问题,不能及时响应,不能可控。

      运行操作

        #jar执行在前后加(nohup &) 或者添加参数(--daemon) 将程序设置为守护进程,在后台运行。
        #后台挂起运行命令nohup(no hang up),0表示键盘输入,1表示屏幕输出,2表示错误输出。2>&1 是将标准出错重定向到标准输出
        #nohup java -jar /usr/local/test.jar /usr/local/conf/conf.properties >> /usr/local/output.log 2>&1 &
        #jobs -l                             #查看当前终端运行的后台进程
        #fg %jobnum                           #将后台中的命令调至前台继续运行
        #bg %jobnum                          #将一个在后台暂停的命令,变成在后台继续执行
        #Ctrl + z                           #将一个正在前台执行的命令放到后台,并且处于暂停状态

      查看进程

        #top                             #查看各个进程的cpu使用情况,默认按cpu使用率排序
        #top -p pid                           #查看该进程的资源使用情况
        #top -H -p pid                         #查看该进程下各个线程的cpu使用情况
        #top -Hp pid                           #查看该进程下各个线程的cpu使用情况
        #ps -Lfp pid                            #查看该进程下各个线程的信息

        #ps -aux|grep test.jar | grep -v grep                 #查看test.jar进程号
        #ps -ef | grep test.jar | grep -v grep                #查看test.jar进程号
        #ps aux|head -1; ps aux | sort -k4nr | head -10             #查看排名前10的内存占用程序,不加head显示所有

        #ps aux | less                          #显示所有运行中的进程,q退出
        #ps -U root -u root -N                      #查看非root运行的进程
        #ps -u admin                           #查看用户admin运行的进程

        #jstack -l pid > stack.log                       #dump出该进程的所有线程信息及状态
        #jinfo pid                             #查看该进程参数信息

        #printf "%x " pid                           #将线程pid转换为十六进制 8f7
        #jstack pid | grep 8f7                          #查看pid进程里面的线程信息,线程Id为十六进制
        #jstack -l pid > stack.log                     #dump出该进程的所有线程信息及状态

        #jmap -histo pid | less                      #查看进程对象实例数量和空间占用.
        #jmap 数据对象:[C is a char[], [S is a short[], [I is a int[], [B is a byte[],  [I is a int[] 
        #jmap -dump:format=b,file=heapDump pid             #生成堆栈转储文件
        #pmap -d pid                          #查看进程占用的内存信息

        #jstat -gc pid 1000                         #每1s钟打印堆间使用情况
        #jstat -gcutil pid 1000 10                     #每1s查看10次gc频率

        #lsof -p pid                            #查看该进程打开的文件
        #cat /proc/pid/maps                        #查看pid线程内存分配
        #ls -l /proc/$PID/exe                       #查看PID启动文件的路径
        #ls -l /proc/$PID/cwd                       #查看PID执行目录的路径
        #cat /proc/$PID/status                       #查看PID详细的内存占比

      终止进程

        #kill -9/15 pid                           #终止指定进程,-9 是强制终止进程,-15 是软结束进程
        #pkill -9 pts/0                              #踢出pts/0终端,pts/0是终端编号
        #killall -9 test                            #终止test服务的所有进程

      查看系统信息

        #grep 'core id' /proc/cpuinfo | sort -u | wc -l               #查看核心数量
        #grep 'processor' /proc/cpuinfo | sort -u | wc -l             #查看线程数
        #top -b -n1 | mail -s 'Process snapshot' test@example.com       #将进程快照发送到指定邮件

      查看端口信息

        #lsof -i:port                              #查看使用某端口的进程
        #netstat -nap|grep port                        #查看指定端口的占用进程
        #netstat -ln|grep port                         #查看指定端口的占用进程
        #netstat -tunlp                              #查看所有端口的占用进程
        #netstat -tunlp |grep port                        #查看指定端口的占用进程

      查看终端信息
        #w                                 #查看所有终端信息
        #who am i                                #查看当前终端信息
        #who                                #查看当前终端信息
        #date                                  #查看当前时间信息

      定时器设置    

        #设置定时任务或守护进程目录
        #/var/spool/cron/root 和 /etc/crontab 和 /etc/rc.lcoal

        #crontab -e                              #编辑定时器
        #tail -f /var/log/cron                          #查看定时器启动日志,跟踪自启动程序
        #cd /proc/pid                            #查看进程文件目录,/proc 用于存放进程文件

      下载文件
        #curl -fsSL url                              #下载文件,连接失败时不显示http错误,静音模式。
        #wget -c -b -r -q url                              #断点后台执行递归无输出下载

       - jmap输出中class name非自定义类的说明:

     

    BaseType Character

    Type

    Interpretation

    B

    byte

    signed byte

    C

    char

    Unicode character

    D

    double

    double-precision floating-point value

    F

    float

    single-precision floating-point value

    I

    int

    integer

    J

    long

    long integer

    L;

    reference

    an instance of class

    S

    short

    signed short

    Z

    boolean

    true or false

    [

    reference

    one array dimension[I表示int[]

    备注:
    作者:Shengming Zeng
    博客:http://www.cnblogs.com/zengming/

    本文是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。
    <欢迎有不同想法或见解的同学一起探讨,共同进步>

     

  • 相关阅读:
    bzoj 1497: [NOI2006]最大获利
    bzoj 2733: [HNOI2012]永无乡
    [CF911G]Mass Change Queries
    [CF911F]Tree Destruction
    [CF911E]Stack Sorting
    [CF911D]Inversion Counting
    [CF911C]Three Garlands
    [CF911B]Two Cakes
    [CF911A]Nearest Minimums
    [POJ1201]Intervals
  • 原文地址:https://www.cnblogs.com/zengming/p/9197637.html
Copyright © 2020-2023  润新知