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/

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

 

原文地址:https://www.cnblogs.com/zengming/p/9197637.html