linux系统负载命令,以及jdk内存分析常用命令,jvm性能监控内存泄漏分析工具
2016-08-25 00:00
941 查看
摘要: Java中的简单浮点数类型float和double不能够进行运算
uptime
当前时间 04:03:58
系统已运行的时间 10 days, 13:19
当前在线用户 1 user
平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载
top
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
最后两行为内存信息。内容如下:
进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
vmstat
用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
对输出解释如下:
1)procs
a.r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
b.b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
2)memory
a.swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
b.free列表示当前空闲的物理内存数量(以KB为单位);
c.buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
d.cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
3)swap
a.si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
b.so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
c.一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。
4)IO
a.bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
b.bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。
5)system
a.in列表示在某一时间间隔中观察到的每秒设备中断数;
b.cs列表示每秒产生的上下文切换次数。上面这两个值越大,会看到内核消耗的CPU时间就越多。
6)CPU
a.us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
b.sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
c.id列显示了CPU处在空闲状态的时间百分比;
d.wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
e.st列一般不关注,虚拟机占用的时间百分比。 (Linux 2.6.11)
参考博文:Linux vmstat命令实战详解
pidstat
细致观察进程
– 需要安装
– 监控CPU
– 监控IO
– 监控内存
执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:
以上输出,除最开头一行显示内核版本、主机名、日期和cpu架构外,主要列含义如下:
11:37:19: pidstat获取信息时间点
PID: 进程pid
%usr: 进程在用户态运行所占cpu时间比率
%system: 进程在内核态运行所占cpu时间比率
%CPU: 进程运行所占cpu时间比率
CPU: 指示进程在哪个核运行
Command: 拉起进程对应的命令
指定采样周期和采样次数
pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”,以下pidstat输出以2秒为采样周期,输出10次cpu使用统计信息:
cpu使用情况统计(-u)
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计:
以上各列输出的含义如下:
IO情况统计(-d)
使用-d选项,我们可以查看进程IO的统计信息:
输出信息含义
针对特定进程统计(-p)
使用-p选项,我们可以查看特定进程的系统资源使用情况:
以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。
-t 列出线程统计信息 -p 指定进程 –u 监控CPU 每秒采样 一共3次
上面的TID 表示是线程id
– 参数-q可以指定jps只输出进程ID ,不输出类的短名称
– 参数-m可以用于输出传递给Java进程(主函数)的参数
– 参数-l可以用于输出主函数的完整路径
– 参数-v可以显示传递给JVM的参数
– -flag <name>:打印指定JVM的参数值
– -flag [+|-]<name>:设置指定JVM参数的布尔值
– -flag <name>=<value>:设置指定JVM参数的值
显示了新生代对象晋升到老年代对象的最大年龄:
显示是否打印GC详细信息:
运行时修改参数,控制是否输出GC日志
jmap –heap pid #java heap信息
jmap -histo:live pid #统计对象count ,live表示在使用
jmap -histo pid >mem.txt #打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
jmap -dump:format=b,file=mem.dat pid #将内存使用的详细情况输出到mem.dat 文件
– -l 打印锁信息
– -m 打印java和native的帧信息
– -F 强制dump,当jstack没有响应时使用
其他工具 MemoryAnalyzer,jprofiler(推荐,功能强大)
uptime
04:03:58 up 10 days, 13:19, 1 user, load average: 0.54, 0.40, 0.20
当前时间 04:03:58
系统已运行的时间 10 days, 13:19
当前在线用户 1 user
平均负载:0.54, 0.40, 0.20,最近1分钟、5分钟、15分钟系统的负载
top
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si Mem: 191272k total, 173656k used, 17616k free, 22052k buffers Swap: 192772k total, 0k used, 192772k free, 123988k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间 up 1:22 系统运行时间,格式为时:分 1 user 当前登录用户数 load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数 stopped 停止的进程数 zombie 僵尸进程数 Cpu(s): 0.3% us 用户空间占用CPU百分比 1.0% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 98.7% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0%hi:硬件CPU中断占用百分比 0.0%si:软中断占用百分比 0.0%st:虚拟机占用百分比
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量 173656k used 使用的物理内存总量 17616k free 空闲内存总量 22052k buffers 用作内核缓存的内存量 Swap: 192772k total 交换区总量 0k used 使用的交换区总量 192772k free 空闲交换区总量 123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义 a PID 进程id b PPID 父进程id c RUSER Real user name d UID 进程所有者的用户id e USER 进程所有者的用户名 f GROUP 进程所有者的组名 g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ? h PR 优先级 i NI nice值。负值表示高优先级,正值表示低优先级 j P 最后使用的CPU,仅在多CPU环境下有意义 k %CPU 上次更新到现在的CPU时间占用百分比 l TIME 进程使用的CPU时间总计,单位秒 m TIME+ 进程使用的CPU时间总计,单位1/100秒 n %MEM 进程使用的物理内存百分比 o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。 q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA r CODE 可执行代码占用的物理内存大小,单位kb s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb t SHR 共享内存大小,单位kb u nFLT 页面错误次数 v nDRT 最后一次写入到现在,被修改过的页面数。 w S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程) x COMMAND 命令名/命令行 y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名 z Flags 任务标志,参考 sched.h
vmstat
用来获得有关进程、虚存、页面交换空间及 CPU活动的信息。这些信息反映了系统的负载情况
root@ubuntu:~# vmstat 2 1 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3498472 315836 3819540 0 0 0 1 2 0 0 0 100 0
2表示每个两秒采集一次服务器状态,1表示只采集一次。
实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:
root@ubuntu:~# vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 3499840 315836 3819660 0 0 0 1 2 0 0 0 100 0 0 0 0 3499584 315836 3819660 0 0 0 0 88 158 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 2 86 162 0 0 100 0 0 0 0 3499708 315836 3819660 0 0 0 10 81 151 0 0 100 0 1 0 0 3499732 315836 3819660 0 0 0 2 83 154 0 0 100 0
对输出解释如下:
1)procs
a.r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;
b.b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
2)memory
a.swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;
b.free列表示当前空闲的物理内存数量(以KB为单位);
c.buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;
d.cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。
3)swap
a.si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;
b.so列表示由内存调入磁盘,也就是内存交换区进入内存的数量
c.一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。
4)IO
a.bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)
b.bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)
这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。
5)system
a.in列表示在某一时间间隔中观察到的每秒设备中断数;
b.cs列表示每秒产生的上下文切换次数。上面这两个值越大,会看到内核消耗的CPU时间就越多。
6)CPU
a.us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。
b.sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。
c.id列显示了CPU处在空闲状态的时间百分比;
d.wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。
e.st列一般不关注,虚拟机占用的时间百分比。 (Linux 2.6.11)
参考博文:Linux vmstat命令实战详解
pidstat
细致观察进程
– 需要安装
– 监控CPU
– 监控IO
– 监控内存
[root@ebus-provider-01 ~]# yum install sysstat
执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:
[root@ebus-provider-01 ~]# pidstat Linux 2.6.32-573.el6.x86_64 (ebus-provider-01) 05/05/2017 _x86_64_ (4 CPU) 11:33:30 AM PID %usr %system %guest %CPU CPU Command 11:33:30 AM 1 0.00 0.00 0.00 0.00 1 init 11:33:30 AM 3 0.00 0.00 0.00 0.00 0 migration/0 11:33:30 AM 4 0.00 0.00 0.00 0.00 0 ksoftirqd/0
以上输出,除最开头一行显示内核版本、主机名、日期和cpu架构外,主要列含义如下:
11:37:19: pidstat获取信息时间点
PID: 进程pid
%usr: 进程在用户态运行所占cpu时间比率
%system: 进程在内核态运行所占cpu时间比率
%CPU: 进程运行所占cpu时间比率
CPU: 指示进程在哪个核运行
Command: 拉起进程对应的命令
指定采样周期和采样次数
pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”,以下pidstat输出以2秒为采样周期,输出10次cpu使用统计信息:
pidstat 2 10
cpu使用情况统计(-u)
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计:
linux:~ # pidstat -r -p 13084 1 Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_ 15:08:18 PID minflt/s majflt/s VSZ RSS %MEM Command 15:08:19 13084 133835.00 0.00 15720284 15716896 96.26 mmmm 15:08:20 13084 35807.00 0.00 15863504 15849756 97.07 mmmm 15:08:21 13084 19273.87 0.00 15949040 15792944 96.72 mmmm
以上各列输出的含义如下:
minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数 majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生 VSZ: 该进程使用的虚拟内存(以kB为单位) RSS: 该进程使用的物理内存(以kB为单位) %MEM: 该进程使用内存的百分比 Command: 拉起进程对应的命令
IO情况统计(-d)
使用-d选项,我们可以查看进程IO的统计信息:
linux:~ # pidstat -d 1 2 Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_ 17:11:36 PID kB_rd/s kB_wr/s kB_ccwr/s Command 17:11:37 14579 124988.24 0.00 0.00 dd 17:11:37 PID kB_rd/s kB_wr/s kB_ccwr/s Command 17:11:38 14579 105441.58 0.00 0.00 dd
输出信息含义
kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位) kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)
kB_ccwr/s: 该进程每秒取消磁盘写入的数量(以kB为单位) Command: 拉起进程对应的命令
针对特定进程统计(-p)
使用-p选项,我们可以查看特定进程的系统资源使用情况:
linux:~ # pidstat -r -p 1 1 Linux 2.6.32.12-0.7-default (linux) 06/18/12 _x86_64_ 18:26:17 PID minflt/s majflt/s VSZ RSS %MEM Command 18:26:18 1 0.00 0.00 10380 640 0.00 init 18:26:19 1 0.00 0.00 10380 640 0.00 init ……
pidstat常用命令
使用pidstat进行问题定位时,以下命令常被用到:pidstat -u 1 pidstat -r 1 pidstat -d 1
以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。
-t 列出线程统计信息 -p 指定进程 –u 监控CPU 每秒采样 一共3次
[root@ebus-provider-01 ~]# pidstat -p 3403 -u 1 1 -t Linux 2.6.32-573.el6.x86_64 (ebus-provider-01) 05/05/2017 _x86_64_ (4 CPU) 11:43:01 AM TGID TID %usr %system %guest %CPU CPU Command 11:43:02 AM 3403 - 0.00 0.00 0.00 0.00 3 java 11:43:02 AM - 3403 0.00 0.00 0.00 0.00 3 |__java 11:43:02 AM - 3404 0.00 0.00 0.00 0.00 3 |__java 11:43:02 AM - 3405 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3406 0.00 0.00 0.00 0.00 0 |__java 11:43:02 AM - 3407 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3408 0.00 0.00 0.00 0.00 2 |__java 11:43:02 AM - 3409 0.00 0.00 0.00 0.00 2 |__java 11:43:02 AM - 3410 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3411 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3412 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3413 0.00 0.00 0.00 0.00 2 |__java 11:43:02 AM - 3414 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3415 0.00 0.00 0.00 0.00 0 |__java 11:43:02 AM - 3416 0.00 0.00 0.00 0.00 2 |__java 11:43:02 AM - 3417 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3418 0.00 0.00 0.00 0.00 3 |__java 11:43:02 AM - 3419 0.00 0.00 0.00 0.00 2 |__java 11:43:02 AM - 3420 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3421 0.00 0.00 0.00 0.00 0 |__java 11:43:02 AM - 3424 0.00 0.00 0.00 0.00 3 |__java 11:43:02 AM - 3425 0.00 0.00 0.00 0.00 0 |__java 11:43:02 AM - 3426 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3427 0.00 0.00 0.00 0.00 3 |__java 11:43:02 AM - 3428 0.00 0.00 0.00 0.00 3 |__java 11:43:02 AM - 3429 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 3430 0.00 0.00 0.00 0.00 1 |__java 11:43:02 AM - 4402 0.00 0.00 0.00 0.00 2 |__jav
上面的TID 表示是线程id
jps
– 列出java进程,类似于ps命令– 参数-q可以指定jps只输出进程ID ,不输出类的短名称
– 参数-m可以用于输出传递给Java进程(主函数)的参数
– 参数-l可以用于输出主函数的完整路径
– 参数-v可以显示传递给JVM的参数
[root@ebus-provider-01 ~]# [root@ebus-provider-01 ~]# jps 26018 Jps 1859 QuorumPeerMain 3403 Bootstrap
[root@ebus-provider-01 ~]# jps -v 26609 Jps -Denv.class.path=.:/usr/local/jdk1.8.0_111/lib/dt.jar:/usr/local/jdk1.8.0_111/lib/tools.jar:/usr/local/jdk1.8.0_111/jre/lib -Dapplication.home=/usr/local/jdk1.8.0_111 -Xms8m 1859 QuorumPeerMain -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false 3403 Bootstrap -Djava.util.logging.config.file=/root/apache-tomcat-8.0.30/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms12m -Xmx25m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/local/tomcat/logs/gc.log -Djava.endorsed.dirs=/root/apache-tomcat-8.0.30/endorsed -Dcatalina.base=/root/apache-tomcat-8.0.30 -Dcatalina.home=/root/apache-tomcat-8.0.30 -Djava.io.tmpdir=/root/apache-tomcat-8.0.30/temp [root@ebus-provider-01 ~]#
jinfo
– 可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时,修改部分参数– -flag <name>:打印指定JVM的参数值
– -flag [+|-]<name>:设置指定JVM参数的布尔值
– -flag <name>=<value>:设置指定JVM参数的值
显示了新生代对象晋升到老年代对象的最大年龄:
[root@ebus-provider-01 ~]# jinfo -flag MaxTenuringThreshold 3403 -XX:MaxTenuringThreshold=15 [root@ebus-provider-01 ~]#
显示是否打印GC详细信息:
[root@ebus-provider-01 ~]# jinfo -flag PrintGCDetails 3403 -XX:+PrintGCDetails [root@ebus-provider-01 ~]#
运行时修改参数,控制是否输出GC日志
[root@ebus-provider-01 ~]# jinfo -flag PrintGCDetails 3403 -XX:-PrintGCDetails [root@ebus-provider-01 ~]# jinfo -flag +PrintGCDetails 3403 [root@ebus-provider-01 ~]# jinfo -flag PrintGCDetails 3403 -XX:+PrintGCDetails [root@ebus-provider-01 ~]#
jmap
– 生成Java应用程序的堆快照和对象的统计信息[root@ebus-provider-01 ~]# jmap -histo 3403 > ./histo.txt [roott@ebus-provider-01 ~]# vim histo.txt num #instances #bytes class name ---------------------------------------------- 1: 2642 4994448 [B 2: 31694 4057992 [C 3: 31067 745608 java.lang.String 4: 18884 604288 java.util.HashMap$Node 5: 2623 550224 [I 6: 4968 437184 java.lang.reflect.Method 7: 5778 339672 [Ljava.lang.Object; 8: 2779 315464 java.lang.Class 9: 1337 232424 [Ljava.util.HashMap$Node; 10: 4459 142688 java.util.concurrent.ConcurrentHashMap$Node 11: 2123 101904 java.util.HashMap 12: 4714 101672 [Ljava.lang.Class; 13: 1952 78080 java.util.LinkedHashMap$Entry 14: 3198 76752 java.util.ArrayList 15: 1506 72288 org.apache.tomcat.util.digester.CallMethodRule 16: 1130 57496 [Ljava.lang.String; 17: 3545 56720 java.lang.Object 18: 83 48912 [Ljava.util.concurrent.ConcurrentHashMap$Node; 19: 1446 46272 java.util.Hashtable$Entry 20: 1104 44160 java.lang.ref.Finalizer 21: 357 42608 [Ljava.lang.reflect.Method; 22: 826 39648 org.apache.tomcat.util.modeler.AttributeInfo 23: 1210 38720 com.sun.org.apache.xerces.internal.xni.QName 24: 390 31200 java.lang.reflect.Constructor 25: 386 27792 java.lang.reflect.Field 26: 546 26208 java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync 27: 1004 24096 java.util.LinkedList$Node 28: 250 24000 java.util.jar.JarFile$JarFileEntry 29: 415 23240 java.util.zip.ZipFile$ZipFileInflaterInputStream 30: 415 23240 java.util.zip.ZipFile$ZipFileInputStream 31: 698 22336 java.util.concurrent.locks.ReentrantLock$NonfairSync 32: 305 21960 java.util.logging.Logger 33: 368 20608 java.lang.Class$ReflectionData 34: 157 20384 [Ljava.util.Hashtable$Entry; 35: 599 19168 javax.management.MBeanAttributeInfo 36: 476 19040 java.lang.ref.SoftReference 37: 236 16992 org.apache.tomcat.util.net.jsse.openssl.Cipher 38: 415 16600 java.math.BigInteger 39: 385 15400 org.apache.tomcat.util.digester.CallParamRule 40: 311 14928 java.util.logging.LogManager$LoggerWeakRef 41: 358 14320 javax.servlet.jsp.tagext.TagAttributeInfo 42: 569 13656 java.util.concurrent.Co
Dump堆
jmap pid #打印内存使用的摘要信息jmap –heap pid #java heap信息
jmap -histo:live pid #统计对象count ,live表示在使用
jmap -histo pid >mem.txt #打印比较简单的各个有多少个对象占了多少内存的信息,一般重定向的文件
jmap -dump:format=b,file=mem.dat pid #将内存使用的详细情况输出到mem.dat 文件
[root@ebus-provider-01 ~]# jmap -dump:format=b,file=./heap.hprof 3403 Dumping heap to /root/heap.hprof ... Heap dump file created [root@ebus-provider-01 ~]# ll total 96044 -rw-------. 1 root root 1123 Apr 15 14:47 anaconda-ks.cfg drwxr-xr-x. 9 root root 4096 May 4 16:02 apache-tomcat-8.0.30 -rw-r--r--. 1 root root 9150593 Jan 7 2016 apache-tomcat-8.0.30.tar.gz -rw-------. 1 root root 20562581 May 5 12:23 heap.hprof -rw-r--r--. 1 root root 91099 May 5 12:22 histo.txt -rw-r--r--. 1 root root 25552 Apr 15 14:47 install.log -rw-r--r--. 1 root root 5890 Apr 15 14:44 install.log.syslog -rw-r--r--. 1 root root 5631764 Apr 25 16:54 logs -rw-r--r--. 1 root root 45044970 Apr 25 15:34 ROOT.war -rw-r--r--. 1 root root 91164 May 4 20:10 tet2.txt -rw-r--r--. 1 root root 0 May 4 20:09 tet.txt drwxr-xr-x. 10 1000 1000 4096 Feb 20 2014 zookeeper-3.4.6 -rw-r--r--. 1 root root 17699306 Oct 31 2014 zookeeper-3.4.6.tar.gz [root@ebus-provider-01 ~]#
jstack
– 打印线程dump– -l 打印锁信息
– -m 打印java和native的帧信息
– -F 强制dump,当jstack没有响应时使用
[root@ebus-provider-01 ~]# jstack 3403 >>./a.txt [root@ebus-provider-01 ~]# ll total 96056 -rw-------. 1 root root 1123 Apr 15 14:47 anaconda-ks.cfg drwxr-xr-x. 9 root root 4096 May 4 16:02 apache-tomcat-8.0.30 -rw-r--r--. 1 root root 9150593 Jan 7 2016 apache-tomcat-8.0.30.tar.gz -rw-r--r--. 1 root root 10969 May 5 12:25 a.txt
jvm 常用监控工具有:
jdk自带的 JConsole,jvisualvm其他工具 MemoryAnalyzer,jprofiler(推荐,功能强大)
参考博文
JProfiler使用详细教程学习笔记
jprofiler 查看程序内存泄露
相关文章推荐
- JVM性能分析常用命令和工具
- JDK下虚拟机性能监控以及故障分析工具
- JVM性能监控与内存分析工具——命令行工具(1)
- Linux系统下常用性能分析工具 top命令详解
- JVM常用分析命令与工具
- valgrind: 一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具
- JDK自带的JVM性能监控工具jconsole的使用
- Linux下常用的性能分析工具-top命令
- linux 下查看系统资源和负载,以及性能监控命令
- 测试回顾版-AIX尝鲜-Ladrunner监控AIX,以及一些查看性能的命令-监控工具nmon+cacti
- 常用的java性能分析工具和命令
- 查看linux服务器配置和TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
- JVM监控管理及故障诊断工具之——常用命令
- Linux系统下常用性能分析工具 top命令详解
- JVM 监控以及内存分析
- 性能文件分析以及常用的分析工具
- top 命令是 Linux 下常用的性能分析工具
- 常用的jvm性能监控工具
- linux常用-监控、性能分析工具
- 用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断