精华内容
下载资源
问答
  • 常见性能分析命令1.1 查看CPU使用pidstatvmstatmpstatsartop统计机器总CPU使用情况# 1.查看本机CPU个数和利用率lscpuCPU(s): 2 //总cpu数量On-line CPU(s) list: 0,1 //在线的cpu的编号;Thread(s) per core: 2 // 每...

    常见性能分析命令

    1.1 查看CPU使用

    pidstat

    vmstat

    mpstat

    sar

    top

    统计机器总CPU使用情况

    # 1.查看本机CPU个数和利用率

    lscpu

    CPU(s): 2 //总cpu数量

    On-line CPU(s) list: 0,1 //在线的cpu的编号;

    Thread(s) per core: 2 // 每个Core 核心的线程数

    Core(s) per socket: 1 //每个cpu插槽核数

    Socket(s): 1 //cpu插槽数

    Model name: Intel(R) Xeon(R) CPU E5-2673 v4 @ 2.30GHz

    CPU MHz: 2294.685 // cpu主频

    L1d cache: 32K //一级高速缓存dcache存储数据

    L1i cache: 32K //一级高速缓存 icache存储指令

    //用top查看 cpu个数, 且显示每个cpu的使用率

    top , 再按 1

    // 查看指定CPU (编号0)的情况

    mpstat -P 0 3,5 //查看指定编号CPU 0, 0, 1, ALL

    # 2. 查看CPU平均数据

    top // 本机资源实时利用, 第二行CPU资源信息;

    sar -u 2 5 // 查看 CPU情况,

    mpstat 2 5 // 查看ALL CPU的平均统计信息

    vmstat 3 5 // 汇总3秒内的CPU/Memory等资源情况;

    # 3. 查看各进程的CPU使用情况:

    top // 对各进程的CPU等资源占用进行排序;

    pidstat -u 2 5 // -u查看CPU情况, 可省略; 统计2秒内;

    ps // 查看前台进出

    ps -aux //查看所有后台进程

    统计某进程的CPU使用情况

    // 查看某进程(PID)的资源使用

    pidstat -p {pid} -u 3 5 // -p指定pid,

    top -Hp {pid} // 查看指定进程内的线程

    pstree {pid} // 查看某进程的pstree树关系

    pstree {pid} -p -a // -p 显示其子进程; -a: 显示参数和命令;

    1.2 内存Memory 监控

    a036f0429828

    内存监控相关命令

    相关命令:

    1.2.1 机器整体内存分析

    sar -r 2 10 //查看本机内存

    free -h -m

    top , 再按E

    vmstat -s -S M // -s 显示内存相关统计信息及多种系统活动数量;

    * -S(大写): 指定显示单位; K, 1024, M 1024*1024;

    // 其他工具, 少用;

    nmon , dmidecode, hwinfo , lshw,inxi,glances 等其他命令;

    某进程的内存监控

    // 指定进程号{pid}

    pidstat -r -p {pid} 2 5 // -r看内存,-p 指定pid

    - t: 显示其所有线程;

    top -Hp {pid} //

    // 强大的内存映射命令: 支出其中每个内存位置;

    pmap -d {pid} // -d:不显示头尾行; -x: 显示细节;

    Address Kbytes Mode Offset Device

    00007f234498e000 4K r--s- commons-logging-1.0.3.jar

    * Address : 内存地址;

    * Kbytes : 字节大小;

    // 2. Java 内存分析工具

    jstat -gc {pid} 3000 5

    // gc统计

    jstat -gcutil {pid} 3000 5

    S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比

    S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比

    E 年轻代中Eden(伊甸园)已使用的占当前容量百分比

    O old代已使用的占当前容量百分比

    P perm代已使用的占当前容量百分比

    YGC 从应用程序启动到采样时年轻代中gc次数

    YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

    FGC 从应用程序启动到采样时old代(全gc)gc次数

    FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)

    GCT 从应用程序启动到采样时gc用的总时间(s)

    jmap -heap {pid} // 查看其堆内存;

    jcmd {pid} help // 查看哪些可查看项;

    jcmd {pid} VM.native_memory // 查看堆外内存

    // 其他Linux 内存分析工具:

    valgrind, dtrace

    查看磁盘Disk的使用

    // # 查看磁盘

    sar -d 2 10

    // 查看磁盘情况

    iostat -c 2 10

    查看网络Network的使用

    // 查看网络流量

    sar -n DEV 2 5

    其他命令

    1. 查看机器负载

    vmstat 2 10 -a

    // 查看CPU 情况, 2秒间隔, 5次打印;

    sar -r 2 10 # 查看内存

    sar -n DEV 2 5 # 查看网络流量

    1. 查看某进程 内存使用率

    jstat -gcutil pid

    jmap -heap pid

    2. 查看进程的CPU使用率

    jstat - pid

    具体功能分析

    jstack + top 分析进程中高耗线程

    使用top命令分析出

    1. 确定进程pid; 通过top/ jps等命令,确定要分析的进程pid:

    top -c

    jps

    2. 查看该进程内, 有哪些线程,并对其cpu耗用排名: 可通过ps or top 等命令;

    ps -Lfp pid

    top -Hp pid

    # 将占用CPU最高进程中的线程打印出来,可以用 top -bn1 -H -p 命令

    ps -mp pid -o THREAD,tid,time|sort -k2r (推荐该命令)

    #打印进程内线程CPU排名; 其他tid一栏为线程Id;

    3. 利用jstat + grep 打印模板线程情况

    printf "%x\n" tid

    jstack pid |grep 十六进制tid -A 10

    - jstack 1943 |grep 7c6 -A 10

    # 查看该进程总共多少个线程

    jstack 1943 |grep State |wc -l

    监控分析工具的使用手册

    Java Visual VM

    连接远程 Visual VM办法:

    启动jstatd 守护进程

    在 JAVA_HOME/bin目录下, 新建 jstatd.all.policy 文件, 内如如下:

    grant codebase "file:${java.home}/../lib/tools.jar" {

    permission java.security.AllPermission;

    };

    后台启动jstatd 守护进程

    nohup $JAVA_HOME/bin/jstatd -J-Djava.security.policy=jstatd.all.policy &

    以自己制定jstatd的端口,加-p 参数,默认端口为1099.

    在特定的java应中, 添加如下JVM参数:

    //

    -Dcom.sun.management.jmxremote

    // 这个是配置远程 connection 的端口号的,要确定这个端口没有被占用

    -Dcom.sun.management.jmxremote.port=10991

    //指定了 JMX 是否启用 ssl

    -Dcom.sun.management.jmxremote.ssl=false

    // 指定了JMX 是否启用鉴权(需要用户名,密码鉴权)

    -Dcom.sun.management.jmxremote.authenticate=false

    // 这个是配置 server 的 IP 的

    -Djava.rmi.server.hostname=ldsver51

    远程连接 1099端口;

    直接点击: 远程 添加相应端口即可, 默认 10099

    Linux时间设置和时间同步

    Linux时间分成硬件时间和系统时间

    硬件时间: RTC, real time clock,真实时间:

    RTC在系统关机后, 仍然会计时; RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲主板上的晶振及相关电路组成的时钟电路的生成脉冲,RTC经过8254电路的变频产生一个频率较低一点的OS(系统)时钟TSC,系统时钟每一个cpu周期加一周期加一,每次系统时钟在系统初起时通过RTC初始化。8254本身工作也需要有自己的驱动时钟(PIT)

    系统时间: (System Clock): 系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值。在开机的时候会和硬件时间同步,之后也就各自独立运行了; 系统时间,是用CPU tick来维持的;

    时间差异原因: 默认情况下,系统时间和硬件时间,并不会自动同步, 互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU tick来维持的。这也是系统时间长时间运行时会产生时间偏差的原因

    查看好设置硬件时间RTC

    hwclock

    clock

    timedatectl

    // 修改RTC时间

    clock --set --date='2018-03-12 08:30:45'

    // 将系统时间,同步成RTC时间

    timedatectl

    clock --systohc //从硬件时钟设置系统时间

    clock -s

    clock -w // 从硬件时钟设置系统时间

    hwclock -c // 查看与系统时间的间隔;

    timedatectl

    设置系统时间(Systemtime)

    date

    timedatectl

    date -s '2018-03-23 04:30:45' // 设置系统时间;

    clock -w //将RTC时间也设置成 当前系统时间;

    关于时间同步

    网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC

    关于ntdp和Ntpdate

    ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,一个是校准时间, ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。

    关于ntpdate: ntpdate立即同步,在生产环境中慎用ntpdate,一个是调整时间。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。

    关于chrony同步时间

    chrony sources -v // 查看有哪些时间源

    date -s '2015-03-02 18:09:03'

    chronyc -a makestep //手动立马同步时间;

    问题: 当系统时间与ntp时间差 > 10秒时, 就不能正常的更新时间了,需要设置 vim /etc/chrony.conf

    默认情况下,chronyd通过减慢或加快时钟速度来逐渐调整时钟。如果时钟与实际时间偏差太大,则需要很长时间才能纠正错误。步进时钟(时间跳变)可以快速修正偏差较大的时间误差,但步进时钟(时间跳变)能会导致一些程序异常,

    # 默认这个 1.0 1 不行, 需要后面设置成 -1;

    makestep 1.0 1

    makestep 10 -1

    makestep 10 1

    //解释 如果时间的误差小于10秒,则通过减慢或加快时钟速度来逐渐调整时钟。如果时间的误差大于10秒,在第1次更新时间时允许步进时间。

    makestep 10 3 // 如果系统时钟的偏移量大于10秒,则允许在前三次更新中步进调整系统时钟

    展开全文
  • 1.PID、TID的区分uid是user id,即用户id,root用户的uid是0,0为最高权限,gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:~$ id bingyueuid=1000(bingyue) gid=1000(bingyue) groups=...

    1.PID、TID的区分

    uid是user id,即用户id,root用户的uid是0,0为最高权限,

    gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:~$ id bingyueuid=1000(bingyue) gid=1000(bingyue) groups=1000(bingyue)~$ id rootuid=0(root) gid=0(root) groups=0(root)

    pid是process id,即进程id,可以通过pid找到这个进程的uid,

    tid是thead id,可以理解为线程的id。

    2.常用的系统监控命令

    top查看活动进程信息

    top 命令显示当前的活动进程,默认它是按占用CPU 的多少进行排序,每5秒钟刷新一次列表,

    你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。

    iostat命令查看磁盘读取情况

    iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。

    要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。

    使用meminfo查看内存信息

    meminfo 包含了内存的详细信息,可以使用 cat 和 grep 命令来显示 meminfo 信息:cat /proc/meminfo

    使用free命令动态查看内存信息

    可以使用 free 命令来显示动态的内存使用信息,free 查看大概的内存信息,而 meminfo 提供的信息更加详细。

    lsof命令查看打开文件和端口等的列表

    lsof 命令对于很多 Linux/Unix 系统都可以使用,主要以列表的形式显示打开的文件和进程。

    打开的文件主要包括磁盘文件、网络套接字、管道、设备和进程。

    使用这个命令的主要原因是一个一个盘不能卸载并且显示文件正在使用或者打开的错误信息。这个命令很容易看出哪些文件正在使用。

    使用mpstat查看cpu信息

    mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。

    默认可能没有安装,需要安装后使用。

    在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

    使用pmap查看某进程的内存使用情况

    pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。pmap pid

    使用ps 和 pstree查看进程列表

    ps 和 pstree 命令都可以用来列表展示正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。

    netstat网络信息

    Netstat 和 ps 命令类似,显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等。

    strace

    strace 可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。

    Strace 在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。

    vmstat

    你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。

    uptime

    uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况

    3.常用的监控工具

    htop — 进程监控

    htop 是一个更加先进的交互式的实时监控工具。htop 与 top 命令非常相似,但是他有一些非常丰富的功能,如用户友好界面管理进程、快捷键、横向和纵向进程等更多的。htop 是一个第三方工具并不包括在 Linux 系统中,你需要使用包管理工具进行安装。

    iotop — 监控 Linux 磁盘 I/O

    iotop 也是和 top 和 htop 命令相似,但是它会有一个报告功能去监控和显示实时的磁盘 I/O 输入和输出和程序进程。这个工具对于查找精确的高的磁盘读/写过程是非常有用的。

    nmon即奈吉尔性能监视器

    Nmon是 Nigel's Monitor 的缩写,是一个使用很普遍的开源工具,用来监视 Linux 系统的所有资源包括:CPU、内存、磁盘使用率、网络上的进程、NFS、内核等等,并且提供了一个图形化的工具。

    tcpdump — 网络数据包分析器

    Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。

    如果需要获取详细的信息,可以使用 Wireshark 。

    4.Linux监控常用的操作

    netstat -natp : 查看对应的网络链接

    lsof -p pid : 查找对应pid的文件句柄

    lsof -i : 80 : 查找对应端口被哪个进程占用

    lsof /tmp/1.txt :查找对应文件被哪个进程占用

    查看所有存在的线程:

    ps xH

    手册中说:H Show threads as if they were processes

    查看一个进程起的线程数:

    ps -mp

    手册中说:m Show threads after processes

    5.找到最耗CPU的Java线程

    首先使用top等命令找到jvm进程的pid,PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND3853 weblogic 18 0 9268m 4.1g 10m S 34.4 6.5 1301:04 java

    当前jvm进程的pid是3853,通过jstack命令dump出当前的jvm进程的堆栈信息:jstack 3853 >> /tmp/jstack0330.txt

    然后使用下面的命令:ps -mp pid -o THREAD,tid,time

    或者ps -Lfp pid

    这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息:$ ps -mp 3853 -o THREAD,tid,timeUSER %CPU PRI SCNT WCHAN USER SYSTEM TID TIMEweblogic 29.3 - - - - - - 21:40:17weblogic 10.7 24 - 184467 - - 13979 07:39:06

    通过 printf "%x\n"13979 可以将线程id转化成16进制表示,

    继续通过grep命令即可以查到对应16进制的线程id信息:grep 369b /tmp/jstack0330.txt

    堆栈信息中的nid对应的linux操作系统下的tid,就是线程id对应的16进制数字,

    tid则是jvm的jmm内存规范中的唯一地址定位。

    使用grep -A ,可以显示匹配行和之后的几行,

    继续查看线程所在堆栈信息中前后的部分:grep 369b /tmp/jstack0330.txt -A 10

    就可以定位到相关的代码位置。

    本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3653452.html,如需转载请自行联系原作者

    展开全文
  • 1.PID、TID的区分 uid是user id,即用户id,root...gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:~$ id bingyueuid=1000(bingyue) gid=1000(bingyue) groups=1000(bingyue)~$ id roo...

    1.PID、TID的区分

    uid是user id,即用户id,root用户的uid是0,0为最高权限,
    gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:
    ~$ id bingyue
    uid=1000(bingyue) gid=1000(bingyue) groups=1000(bingyue)
    ~$ id root
    uid=0(root) gid=0(root) groups=0(root)
    pid是process id,即进程id,可以通过pid找到这个进程的uid,
    tid是thead id,可以理解为线程的id。

    2.常用的系统监控命令

    top查看活动进程信息
    top 命令显示当前的活动进程,默认它是按占用CPU 的多少进行排序,每5秒钟刷新一次列表,
    你也可以选择不同的排序方式,例如 m 是按内存占用方式进行排序的快捷键。

    iostat命令查看磁盘读取情况
    iostat 命令用来显示存储子系统的详细信息,通常用它来监控磁盘 I/O 的情况。
    要特别注意 iostat 统计结果中的 %iowait 值,太大了表明你的系统存储子系统性能低下。

    使用meminfo查看内存信息
    meminfo 包含了内存的详细信息,可以使用 cat 和 grep 命令来显示 meminfo 信息:
    cat /proc/meminfo

    使用free命令动态查看内存信息
    可以使用 free 命令来显示动态的内存使用信息,free 查看大概的内存信息,而 meminfo 提供的信息更加详细。

    lsof命令查看打开文件和端口等的列表
    lsof 命令对于很多 Linux/Unix 系统都可以使用,主要以列表的形式显示打开的文件和进程。
    打开的文件主要包括磁盘文件、网络套接字、管道、设备和进程。
    使用这个命令的主要原因是一个一个盘不能卸载并且显示文件正在使用或者打开的错误信息。这个命令很容易看出哪些文件正在使用。

    使用mpstat查看cpu信息
    mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。
    默认可能没有安装,需要安装后使用。

    在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

    使用pmap查看某进程的内存使用情况
    pmap 命令用来报告每个进程占用内存的详细情况,可用来看是否有进程超支了,该命令需要进程 id 作为参数。
    pmap pid

    使用ps 和 pstree查看进程列表
    ps 和 pstree 命令都可以用来列表展示正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。


    netstat网络信息
    Netstat 和 ps 命令类似,显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等。

    strace
    strace 可以记录进程进行系统调用的详情,因此它也是一个非常好的诊断工具,例如你可以使用它来找出某个程序正在打开某个配置文件。
    Strace 在跟踪某个进程时会让该进程的性能变得非常差,因此请谨慎使用。

    vmstat
    你可以使用 vmstat 来监控虚拟内存,一般 Linux 上的开发者喜欢使用虚拟内存来获得最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这些统计信息(所有的处理器中)都计算出以百分比表示的平均值,或者计算其总和。


    uptime
    uptime 命令告诉你这台服务器从开机启动到现在已经运行了多长时间了。同时也包含了从启动到现在服务器的平均负载情况

    3.常用的监控工具

    htop — 进程监控
    htop 是一个更加先进的交互式的实时监控工具。htop 与 top 命令非常相似,但是他有一些非常丰富的功能,如用户友好界面管理进程、快捷键、横向和纵向进程等更多的。htop 是一个第三方工具并不包括在 Linux 系统中,你需要使用包管理工具进行安装。

    iotop — 监控 Linux 磁盘 I/O
    iotop 也是和 top 和 htop 命令相似,但是它会有一个报告功能去监控和显示实时的磁盘 I/O 输入和输出和程序进程。这个工具对于查找精确的高的磁盘读/写过程是非常有用的。

    nmon即奈吉尔性能监视器 
    Nmon是 Nigel's Monitor 的缩写,是一个使用很普遍的开源工具,用来监视 Linux 系统的所有资源包括:CPU、内存、磁盘使用率、网络上的进程、NFS、内核等等,并且提供了一个图形化的工具。

    tcpdump — 网络数据包分析器

    Tcpdump 是一个简单、可靠的网络监控工具,用来做基本的协议分析,看看那些进程在使用网络以及如何使用网络。
    如果需要获取详细的信息,可以使用 Wireshark 。

    4.Linux监控常用的操作

    netstat -natp : 查看对应的网络链接
    lsof -p pid : 查找对应pid的文件句柄
    lsof -i : 80 : 查找对应端口被哪个进程占用
    lsof /tmp/1.txt :查找对应文件被哪个进程占用

    查看所有存在的线程:
    ps xH
    手册中说:H Show threads as if they were processes

    查看一个进程起的线程数:
    ps -mp <PID>
    手册中说:m Show threads after processes

    5.找到最耗CPU的Java线程

    首先使用top等命令找到jvm进程的pid,
    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    3853 weblogic 18 0 9268m 4.1g 10m S 34.4 6.5 1301:04 java

    当前jvm进程的pid是3853,通过jstack命令dump出当前的jvm进程的堆栈信息:
    jstack 3853 >> /tmp/jstack0330.txt

    然后使用下面的命令:
    ps -mp pid -o THREAD,tid,time
    或者
    ps -Lfp pid
    这个命令的作用,主要是可以获取到对应一个进程下的线程的一些信息:
    $ ps -mp 3853 -o THREAD,tid,time
    USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
    weblogic 29.3 - - - - - - 21:40:17
    weblogic 10.7 24 - 184467 - - 13979 07:39:06

    通过 printf "%x\n" 13979 可以将线程id转化成16进制表示, 
    继续通过grep命令即可以查到对应16进制的线程id信息:
    grep 369b /tmp/jstack0330.txt

    堆栈信息中的nid对应的linux操作系统下的tid,就是线程id对应的16进制数字,
    tid则是jvm的jmm内存规范中的唯一地址定位。

    使用grep -A ,可以显示匹配行和之后的几行,
    继续查看线程所在堆栈信息中前后的部分:
    grep 369b /tmp/jstack0330.txt -A 10
    就可以定位到相关的代码位置。

     


    本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/3653452.html,如需转载请自行联系原作者

    展开全文
  • java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用。 1、jstack 该命令用于生成当前时刻虚拟机的线程快照,可以用于定位线程...

    java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用。

    1、jstack

    该命令用于生成当前时刻虚拟机的线程快照,可以用于定位线程出现长时间停顿的原因,包括死锁、死循环、超时等待等。

    jstack命令格式:

    jstack [option] vmid

    vmid可以通过ps -ef|grep java命令得到,第二个参数的PID值就是vmid。

    option的可选值:

    -F  当正常输出的请求不被响应时,强制输出线程堆栈

    -l    除堆栈外,显示关于锁的附加信息

    -m  如果调用到本地方法的话,可显示C/C++的堆栈

    查询示例:

    1.1 jstack -l 18614

    控制台输出的部分结果:

    1.2 jstack -m 18614

    2、jstat

    该命令用于监视虚拟机各种运行状态信息,包括类装载、内存、垃圾回收、JIT编译等数据,是运行期定位JVM性能问题的首选工具。

    jstat命令格式:

    jstat [option vmid [interval[s|ms] [count]] ]

    interval:查询间隔(ms单位),count:查询次数,若忽略这2个参数,则只查询一次。

    option为用户需要查询的虚拟机信息,包括类装载、GC、运行期编译状态等。可选项如下:

    -class    监视类装载、卸载数量、总空间及类装载所耗费的时间
    -gc    监视java堆状况,包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息
    -gccapacity    监视内容与-gc基本相同,但输出的主要关注java堆各个区域使用到的最大、最小空间
    -gcutil    监视内容与-gc基本相同,但输出的主要关注已使用空间占总空间的百分比
    -gccause    与-gcutil功能一样,但是会额外输出上一次GC产生的原因
    -gcnew    监视新生代GC状况
    -gcnewcapacity    监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
    -gcold    监视老年代GC状况
    -gcoldcapacity    监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
    -gcpermcapacity    输出永久代使用到的最大、最小空间
    -compiler    输出JIT编译器编译过的方法、耗时等信息
    -printcompilation    输出已被JIT编译的方法

     

    示例:

    2.1 jstat -gc 18614 200 10   每200毫秒查询一次进程PID为18614的垃圾收集情况,一共查询10次。

    S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576
    33792.0 42240.0 806.7   0.0   171264.0 162460.8  61440.0    30525.4   25240.0 24905.6  0.0    0.0       24    0.338   3      0.239    0.576

    查询结果的标题列含义:

    S0C:当前Survivor0区空间大小(kb);S1C:当前Survivor1区空间大小(kb)

    S0U:当前Survivor0区空间使用量(kb);S1U:当前Survivor1区空间使用量(kb)

    EC:当前Eden区空间大小(kb);EU:当前Eden区空间使用量(kb)

    OC:当前Old区空间大小(kb);OU:当前Old区空间使用量(kb)

    MC:方法区空间大小(kb);MU:方法区空间使用量(kb)

    CCSC:压缩类空间大小(kb);CCSU:压缩类空间空间使用量(kb)

    YGC:Young GC次数;YGCT:Young GC耗时

    FGC:Full GC次数;FGCT:Full GC耗时

    GCT:GC总耗时

    2.2 jstat -gcutil 18614

      S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
      2.39   0.00 100.00  49.68  98.68      -     24    0.338     3    0.239    0.576

    说明:Survivor0区使用了2.39%的空间,Survivor1区使用了0.00%的空间,Eden区使用了100%的空间,Old区使用了49.68%的空间,方法区使用了98.68的空间。程序运行以来,Young GC发生了24次,耗时0.338秒,Full GC发生了3次,耗时0.239秒,所有GC总耗时0.576秒。

    2.2 jstat -class 18614

    Loaded  Bytes  Unloaded  Bytes     Time   
      5554  6350.0        0     0.0       7.93

    说明:程序装载了5554个类,共6350字节,卸载了0个类,共0个字节,类装载耗时7.93秒。

     2.3 jstat -gcnew 18614

    S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
    41216.0 1024.0    0.0  798.2  9  15 41216.0 164096.0   5723.0     25    0.342

    2.4 jstat -gcold 18614

    MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT   
     25368.0  24912.1      0.0      0.0     61440.0     30525.4     25     3    0.239    0.580

    2.5 jstat -compiler 18614

    Compiled Failed Invalid   Time   FailedType FailedMethod
        7018      1       0    21.29          1 com/mysql/jdbc/AbandonedConnectionCleanupThread run

    说明:JIT编译器编译成功方法7018个,失败1个,无效0个,耗时21.29秒,失败类型为1,失败的方法为AbandonedConnectionCleanupThread类的run方法。

    3、jps(JVM Process Status Tools)
    jps是参照Unix系统的取名规则命名的,而他的功能和ps的功能类似,可以列举正在运行的饿虚拟机进程并显示虚拟机执行的主类以及这些进程的唯一ID(LVMID,对应本机来说和PID相同),他的用法如下:

    jps [option] [hostid]
    
    其中hostid默认为本机,而option选项包含以下选项
    
    Option    Function
    -q    只输出LVMID
    -m    输出JVM启动时传给主类的方法
    -l    输出主类的全名,如果是Jar则输出jar的路径
    -v    输出JVM的启动参数


    4、jstat(JVM Statistics Monitoring Tools)
    jstat主要用于监控虚拟机的各种运行状态信息,如类的装载、内存、垃圾回收、JIT编译器等,在没有GUI的服务器上,这款工具是首选的一款监控工具。其用法如下:

    jstat [option vmid [interval [s|ms] [vount] ] ]

    参数interval和count分别表示查询间隔和查询次数,如每1毫秒查询一次进程20445的垃圾回收情况,监控20次,命令如下所示:

    jstat –gc 20445 1 20

    相关的输出参数介绍可参照官方的说明(注:网址链接请点击此处)

    选项option代表用户需要查询的虚拟机的信息,主要分为3类:类装载、垃圾回收和运行期的编译情况,具体如下表所示:

    Option    Function
    -class    监视类的装载、卸载数量以及类的装载总空间和耗费时间等
    -gc    监视Java堆,包含eden、2个survivor区、old区和永久带区域的容量、已用空间、GC时间合计等信息
    -gccapcity    监视内容与-gc相同,但输出主要关注Java区域用到的最大和最小空间
    -gcutil    监视内容与-gc相同,但输出主要关注已使用空间占总空间的百分比
    -gccause    与-gcutil输出信息相同,额外输出导致上次GC产生的原因
    -gcnew    监控新生代的GC情况
    -gcnewcapacity    与-gcnew监控信息相同,输出主要关注使用到的最大和最小空间
    -gcold    监控老生代的GC情况
    -gcoldcapacity    与-gcold监控信息相同,输出主要关注使用到的最大和最小空间
    -gcpermcapacity    输出永久带用到的最大和最小空间
    -compiler    输出JIT编译器编译过的方法、耗时信息
    -printcompilation    输出已经被JIT编译的方法


    5、jinfo(JVM configuration Info for Java)
    Jinfo的作用是实时查看虚拟机的各项参数信息jps –v可以查看虚拟机在启动时被显式指定的参数信息,但是如果你想知道默认的一些参数信息呢?除了去查询对应的资料以外,jinfo就显得很重要了。jinfo的用法如下:

    Jinfo [option] pid
    
    如 jinfo –sysprops {pid}

    6、jmap(JVM Memory Map for Java)
    jmap用于生成堆快照(heapdump)。当然我们有很多方法可以取到对应的dump信息,如我们通过JVM启动时加入启动参数 –XX:HeapDumpOnOutOfMemoryError参数,可以让JVM在出现内存溢出错误的时候自动生成dump文件,亦可以通过-XX:HeapDumpOnCtrlBreak参数,在运行时使用ctrl+break按键生成dump文件,当然我们也可以使用kill -3 pid的方式去恐吓JVM生成dump文件。jmap的作用不仅仅是为了获取dump文件,还可以用于查询finalize执行队列、Java堆和永久带的详细信息,如空间使用率、垃圾回收器等。其运行格式如下:

    jmap [option] vmip
    
    Option的信息如下表所示
    
    Option    Function
    -dump    生成对应的dump信息,用法为-dump:[live,]format=b,file={fileName}
    -finalizerinfo    显示在F-Queue中等待的Finalizer方法的对象(只在linux下生效)
    -heap    显示堆的详细信息、垃圾回收器信息、参数配置、分代详情等
    -histo    显示堆栈中的对象的统计信息,包含类、实例数量和合计容量
    -permstat    以ClassLoder为统计口径显示永久带的内存状态
    -F    当虚拟机对-dump无响应时可使用这个选项强制生成dump快照
    示例:jmap -dump:format=b,file=heap.dump 20445

    7、jhat(JVM Heap Analysis Tool)
    jhat是用来分析dump文件的一个微型的HTTP/HTML服务器,它能将生成的dump文件生成在线的HTML文件,让我们可以通过浏览器进行查阅,然而实际中我们很少使用这个工具,因为一般服务器上设置的堆、栈内存都比较大,生成的dump也比较大,直接用jhat容易造成内存溢出,而是我们大部分会将对应的文件拷贝下来,通过其他可视化的工具进行分析。启用法如下:

    jhat {dump_file}

    执行命令后,我们看到系统开始读取这段dump信息,当系统提示Server is ready的时候,用户可以通过在浏览器键入http://ip:7000进行查询。

    8、jstack(JVM Stack Trace for java)
    jstack用于JVM当前时刻的线程快照,又称threaddump文件,它是JVM当前每一条线程正在执行的堆栈信息的集合。生成线程快照的主要目的是为了定位线程出现长时间停顿的原因,如线程死锁、死循环、请求外部时长过长导致线程停顿的原因。通过jstack我们就可以知道哪些进程在后台做些什么?在等待什么资源等!其运行格式如下:

    jstack [option] vmid

    相关的option和function如下表所示

    Option    Function
    -F    当正常输出的请求不响应时强制输出线程堆栈
    -l    除堆栈信息外,显示关于锁的附加信息
    -m    显示native方法的堆栈信息

    参考:《深入理解Java虚拟机》---周志明 著

    展开全文
  • PID、TID的区分uid是user id,即用户id,root用户的uid是0,0为最高权限,gid是group id,用户组id,使用 id 命令可以很简单的通过用户名查看UID、GID:~$ id bingyueuid=1000(bingyue) gid=1000(bingyue) groups=...
  • Linux进程查看命令 PS命令 1.不带参数的ps使用 2.显示所有的当前进程 ps –ax -a 代表 all。同时加上x参数会显示没有控制终端的进程。 ps -ax | less 可以结合less命令和管道来使用以方便查看。 3.通过cpu和...
  • linux下用ps -aux可以监控java的进程情况。linux根据内核的不同对每个进程分配的最大使用内存不同,如果是32位机器,cpu最大的寻址空间是2的32次方,4G,但内核分配给每个进程最大的内存肯定是小于4G,经过重新编译...
  • 最近需要监控服务器性能情况,需要查询linux服务器硬盘使用情况,window系统下命令能够正常执行,linux下一直执行不了,并且不报错。发了点时间解决,留个备忘录。 /*** * * 获取操作系统类型 * @author 2019-...
  • java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用。 1、jstack 该命令用于生成当前时刻虚拟机的线程快照,可以用于定位线程...
  • javaLINUX 进行带宽使用监控

    千次阅读 2018-05-23 16:29:39
    因为项目需要使用java对视频服务器进行带宽使用率监控,故找相关代码来研究以及使用,系统为centos7.2 首先使用 ifconfig 命令看看自己有几块网卡 ifconfig 然后使用 sudo ethtool eth0 找到自己的带宽是...
  • Java使用SSH连接linux主机执行命令

    千次阅读 2019-09-12 15:08:17
    由于最近在做对zookeeper集群状态的监控,了解了一下如何使用java连接linux远程主机并执行shell脚本(或命令) 添加依赖 ssh2的依赖,版本很多,供参考 <!-- ...
  • 一、系统性能监控linux操作系统中有很多命令可以查看应用程序的性能情况,下面介绍一下这些常用的命令:uptime:可以查看的信息...top:常用的系统性能监控命令,可显示当前进程的cpu利用率和内存使用率,找到cpu利...
  • 执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime。除此之外,iostat还对创建一个服务器磁盘子系统的活动报告。该报告包含两部分:CPU使用情况和磁盘使用情况。iostat显示实例:avg-cpu: %user %nice %...
  • 本教程将介绍如何在Linux系统中使用命令发送邮件,以下举例5 个命令行邮件客户端进行举例讲解。5 个命令行邮件mail / mailxmuttmpacksendmailssmtp工作原理首先我们介绍下Linux中这些邮件命令的工作原理,它们是如何...
  • Linux如何动态查看日志信息之tail命令: ...来看看如何动态监控日志尾部,那就是使用命令:tail -f 文件名,可以从下图看出查看日志后并没有退出,一直在等待刷新日志尾部信息。设置下要监控的尾部行数: ...
  • (1)首先要修改JDK中JMX服务的配置文件,以获得相应的权限:进入$JAVA_HOME所在的根目录的/jre/lib/management子目录下...调整jmxremote.access和jmxremote.password的权限为只读写,可以使用如下命令chmod 600 jmxre...
  • 1、uptime命令作用:监控CPU使用情况功能:打印当前时间,系统已经运行了多久,当前登录用户数以及系统平均负载情况。[root@localhost java]# uptime 16:02:01 up 52 min, 2 users, load average: 0.00, 0.01, 0.05...
  • 之前在最开始学习jvm的时候使用过一些java监控命令,但是没有特别深入的去理解。工作之后最近重新学习,却产生了 ***Can’t attach symbolicator to the process***这样的报错,可以说出师不利。 详细报错信息如下...
  • 发现这篇文章可工作性能调优使用,摘录于下.原文链接:http://os.51cto.com/art/201108/286625.htm版权归原作者所有. 找到最耗CPU的java线程 ps命令 命令: ps -mp pid -o THREAD,tid,time 或者 ps -Lfp pid 结果展示...
  • aaa.txt重定向输出内容到文件aaa.txttop命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。...
  • java远程监控linux资源情况

    千次阅读 2014-05-22 22:25:25
    对于远程监控Linux主机系统CPU,内存使用情况,以前也使用了top等命令,但是最后还是觉得使用vmstat比较好. 运行top命令获得系统CPU使用情况有两个缺点, 第一运行top命令,执行的shell语句相对复杂. 用top...
  • 当crontab执行脚本中包含的命令需要使用到环境变量时,例如:jps等,这种情况喜爱的crontabu 不会加载PATH全部路径,导致在执行定时任务时会出现问题。 此时的解决方案时在该执行脚本中加入jps所在的环境变量,例如...
  • ps ... 通过我们会查找某类或包含某些指定关键字的进程,这是会使用管道结合grep命令来进一步过滤结果。 查找java相关的进程ps -ax | grep java 有时我们则需要根据CPU和内存的使用情况...
  • aaa.txt 重定向输出内容到文件 aaa.txttop命令经常用来监控linux的系统状况,比如cpu、内存的62616964757a686964616fe4b893e5b19e31333337613135使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少...
  • aaa.txt 重定向输出内容到文件 aaa.txttop命令经常用来监控Linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解...
  • 前言 总结,学习,发现问题,再总结,避免以后,在需要的... 年轻代中第一个survivor(幸存区)目前已使用空间(kb) S1U 年轻代中第二个survivor(幸存区)目前已使用空间(kb) 年轻代中Eden(伊甸园)  

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

linux使用java监控命令

java 订阅
linux 订阅