jvm debug指令汇总

1.lsof(list open files)是一个列出当前系统打开文件的工具,即fd的数目。系统默认单线程只能打开65525个。也可以查看设备。

lsof -p 29701|wc -l 可以查看29701线程打开的fd数目。

2.strace命令

strace strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

3.Jstack

   jstack用来查看jvm当前的thread dump的。可以看到当前Jvm里面的线程状况。 这个对于查找blocked线程比较有意义。

    (1) jstack -l pid查看线程堆栈信息,

    (2)while true;do sleep 5;jstack -l 29701 >> /tmp/typhon-check.log;cat /tmp/typhon-check.log|grep WAITING |wc -l;done

用来不断的查看某个线程出现的堆栈信息的量。

4.ulimit 

ulimit -a,可以列出系统的最大进程数、单线程最大fd打开数(Linux操作系统对一个进程打开的文件句柄数量的限制,高并发常需要配置)。

 

5.jps命令可以查看当前的java线程。

    jps -lv可以查看当前java线程的配置参数。

6.jstat

  • jstat利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对进程的classloader,compiler,gc情况;
  • 特别的,一个极强的监视内存的工具,可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量,以及加载类的数量。

(1)jstat -gcutil pid interval count 可以查看线程gc信息,各个区的情况。

 

即:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]  ,前几项的都是百分比。

关于s0(survivor)、E(eden)、O(old)、P(permgen)都是百分比。后面C是gc次数,T是gc的时间。YGC是young gc次数,YGCT是yong gc时间。FGC是full gc的次数,FGCT是full gc的时间。GCT是gc总时间。

(2).jstat -gc pid interval count  显示的会比gcutil全一点,前几项关于eden、survivor、old的都是真实值,单位字节。

前面结尾是C是配额(eden等),U是使用量。后面关于GC,C是次数,T是时间。

7.jmap 查看内存:

    打印出某个java进程(使用pid)内存内的所有‘对象’的情况(如:产生那些对象,及其数量),也可以打印出堆的使用信息概要。。

  • 监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;
  • 系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等

(1) jmap -histo pid:列出class在jvm中的实例数。

 Q:统计实例最多的类 前十位有哪些?

A:jmap -histo pid | sort -n -r -k | head -10     (红色的第2列是类在jvm中的个数)

Q:统计合计容量前十的类有哪些?

A:jmap -histo pid | sort -n -r -k | head -10    (红色的第3列是类在jvm中所占容量)

说明:

sort命令的部分参数含义解释如下

-n :使用“”纯数字”进行排序(默认是以文字类型来排序)

-r : 反向排序

-k :以那个区间(field)来进行排序的意思

    使用jmap -histo[:live] pid查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象,如下:

    jmap -histo:live 21711 | more

 (2)jmap -heap pid: 打印出堆的配置信息以及使用情况。

 

(3)jmap dump

jmap -dump:format=b,file=test.bin 4939  

尤其值得一提的是这个命令可以到处一份binary heap dump的bin文件,这个文件能够直接用,Eclipse Memory Anayliser 来分析,并找出潜在的内存泄漏的地方.

8.jinfo

该命令可以打印出Java进程的配置信息:包括jvm参数,系统属性等

  • 监视进程运行中的jvm物理内存的占用情况,该进程内存内,所有对象的情况,例如产生了哪些对象,对象数量;
  • 系统崩溃了?jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等

9.netstat

    (1) netstat -ntlp可以查询线程与网络端口情况。

    (2) netstat -ntap 可以查看线程和端口状态,比如是否是有大量TIME_WAIT的情况。

    (3) netstat -anlp 可以查看什么client连接到server的盖端口上。比如如下,可以看到10.139.176.174:57797连接到了服务器的8000端口上,client端也可以查连到那个server上。(windows用netstat -an|findstr 8000)

 

TIME_WAIT是发起socket主动关闭的一方 socket将进入TIME_WAIT状态,TIME_WAIT状态将持续2个MSL(Max Segment Lifetime),在Windows下默认为4分钟,即240秒,TIME_WAIT状态下的socket不能被回收使用。过多就会造成fd过多,资源耗尽。

10.df 

    df -h查看磁盘信息

11.du 查看某个路径下的文件所占磁盘大小。 

du -csh *:查看本路径下所有文件的磁盘信息大小。

12.top

    top查看线程的状态,相当于windows任务管理器

    top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令的“-H”选项,该选项会列出所有Linux线程。在top运行时,你也可以通过按“H”键将线程查看模式切换为开或关。即top -p pid 以后,输入大写H,即可查询改进程下的线程情况。

13.ps

ps ax:查看线程状态

ps -T -p <pid> :在ps命令中,“-T”选项可以开启线程查看。下面的命令列出了由进程号为<pid>的进程创建的所有线程。

14.sar -b

可以直接查看cpu的主频,要查看CPU、内存的使用情况可以使用sar!

15.Btrace 

    需下载包,可以针对线上代码,写surround包围代码,查看一些变量的值。

16.java 

    启动java时,增加jmx接口。

17.查看某个linux进程打开的线程数

cat /proc/20571/status,里面有一个Threads选项。

18. iostat 查看io情况

iostat -d -k 1 10 #查看TPS和吞吐量信息(磁盘读写速度单位为KB)iostat -d -m 2 #查看TPS和吞吐量信息(磁盘读写速度单位为MB)iostat -d -x -k 1 10 #查看设备使用率(%util)、响应时间(await)

iostat -c 1 10 #查看cpu状态

19.查看机器内存情况

free -h 显示出G为单位,也可以用free -g

free -m 以m为单位

也可以cat /proc/meminfo

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值