• jvm 监控工具


    Java VisualVM 

    JDK1.6 中Java 引入了一个新的可视化的JVM 监控工具:Java VisualVM。
     VisualVM 提供在Java 虚拟机上运行的Java 应用程序的详细信息。在VisualVM 的图形用户界面中可以方便、快捷地查看多个Java 应用程序的相关信息。
    运行VisualVM 非常简单,只需在命令行状态下输入:
    # jvisualvm
    启动配置
    //需要用户名和密码访问 
    JAVA_OPTS='-Xms128m -Xmx256m -XX:MaxPermSize=128m 
    -Djava.rmi.server.hostname=192.168.1.8 
    -Dcom.sun.management.jmxremote.port=8088
    -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/usr/java/default/jre/lib/management/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/java/default/jre/lib/management/jmxremote.access'
    注:(jmxremote.access 在JAVA_HOMEjrelibmanagement下有模板)
    修改密码配置
     
    # vim jmxremote.password //用于添加用户名和密码
    monitorRole 12345678 //用户名:monitorRole,这个名字系统是预先设置好的
    admin 123456 //自定义了用户名:admin
    root 123456 //自定义了用户名:root
    强制保存退出
     
    #vim jmxremote.access  //自定义监控的用户名具有哪些权限
    添加:
    admin readonly //定义只读帐号,名字任意
    root readwrite  //定义读写帐号,名字任意
    create javax.management.monitor.*,javax.management.timer.* 
    保存退出
     
    修改文件的权限
    # chmod 600 jmxremote.password
    # chmod 600 jmxremote.access

    JConsole

    JConsole 是一个基于JMX 的图形监控工具,用于连接正在运行的JVM,与前面提到的jvmstat 类似的图形监控程序,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器VM 情况,此类工具可以较直观观察各种变化,但比较耗费资源。
    在JDK 1.5之后JConsole 已经成为JDK 自带监控工具。
    只需要在命令行状态下输入:
    # jconsole 
    相关的配置可以参考java VisualVM配置参数
    注:如果JConsole不能访问本机的程序的话,添加如下内容:
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"

    iptime

    [root@centos7_template ~]# uptime 10:31:42 up 4 days, 1:01, 1 user,load average: 0.02, 0.02, 0.05
    10:31:42 //当前系统时间
    up 4 days, 1:01 //持续运行时间,时间越大,说明你的机器越稳定。
    1 user //用户连接数,是总连接数而不是用户数
    load average: 0.02, 0.02, 0.05 //系统平均负载,统计最近1,5,15分钟的系统平均负载

    TOP

    通过TOP命令可以详细看出当前系统的CPU、内存、负载以及各进程状态(PID、进程占用CPU、内存、用户)等
    首先介绍top中一些字段的含义:
    VIRT:virtual memory usage 虚拟内存
    1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
    2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
    RES:resident memory usage 常驻内存
    1、进程当前使用的内存大小,但不包括swap out
    2、包含其他进程的共享
    3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
    4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
    SHR:shared memory 共享内存
    1、除了自身进程的共享内存,也包括其他进程的共享内存
    2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
    3、计算某个进程所占的物理内存大小公式:RES – SHR
    4、swap out后,它将会降下来
    DATA
    1、数据占用的内存。如果top没有显示,按f键可以显示出来。
    2、真正的该程序要求的数据空间,是真正在运行中要使用的。
    实例
    top -p 3618 // 这里的3618就是上面查询到的java程序的进程ID

    vmstat

    除此之外,vmstat命令也可以查看系统CPU/内存、swap、io等情况:
     
    上面的命令每隔1秒采样一次,一共采样四次。CPU占用率很高,上下文切换频繁,说明系统有线程正在频繁切换,这可能是你的程序开启了大量的线程存在资源竞争的情况。另外swap也是值得关注的指标,如果swpd过高则可能系统能使用的物理内存不足,不得不使用交换区内存,还有一个例外就是某些程序优先使用swap,导致swap飙升,而物理内存还有很多空余,这些情况是需要注意的。

    pidstat

    查看系统指标,还有一个第三方工具:pidstat,这个工具还是很好用的,需要先安装:
    yum install sysstat

    该命令监控进程id为3618的CPU状态,每隔1秒采样一次,一共采样四次。“%CPU”表示CPU使用情况,“CPU”则表示正在使用哪个核的CPU,这里为0表示正在使用第一个核。如果还要显示线程ID,则可以使用:
    pidstat -p 3618 -u -t 1 4
    如果要监控磁盘读写情况,这可以使用:
    pidstat -p 3618 -u -d 1 4
  • 相关阅读:
    《图解HTTP》简单的HTTP协议
    《图解HTTP》web及网络基础
    尚硅谷--雷丰阳--ElasticSearch 7.4.2版本 -- 有道云笔记
    ElasticSearch _bulk批量插入报错
    SpringBoot利用Filter来解决跨域问题
    js中数组的常用方法
    Mysql时间加减函数
    mybatis映射文件中不能使用">""<""&"问题
    博客园样式第二版
    GO学习笔记之 map
  • 原文地址:https://www.cnblogs.com/yyy-blog/p/10312755.html
Copyright © 2020-2023  润新知