首页 > 编程语言 >Java性能监控的一些记录

Java性能监控的一些记录

时间:2023-08-04 17:03:29浏览次数:43  
标签:management Java 监控 记录 GC JVM jmxremote password


本篇所有内容都是基于JDK5,如使用JDK6会有差别。

工作,有一些值得记录的地方:

  JDK自身提供了很多工具,基于命令行和GUI的都有,学会合理应用它们是很有用处的。

  首先是jmap,这是一个命令行程序,用来查看JVM中对象数量情况,直接输入jmap会显示用法,下面是两个常用的功能:

Java代码

 

jmap -histo 'jvmPid' >

 

  其中jvmPid为当前虚拟机进程的系统ID号,等待过后,memory.txt会按空间占用由大到小的顺序保存当前虚拟机运行中存在的对象类型,我们可以由此看出哪些类型对象占的空间和生成的数目较多,尤其是在自定义对象出现问题导致不能及时回收,这个功能是很有用的。

  Java代码

 

jmap -heap:format=b

 

  和上面的不同,上面是生成一个文本文件,而这里会生成一个二进制快照文件,可以用相应的分析软件来打开它来进行功能更全面的检测,如Eclipse Memory Analyzer。

  需要注意的是,上面的导出快照命令,在1G左右JVM内存的情况下,要大概等待1分钟左右的时间,且执行时会使JVM暂停执行,因此不要在正式运行系统的高峰期或关键时刻使用。

  接下来是jstat,这也是一个命令行程序,用来查看JVM的各个内存和GC的使用情况,用法和参数非常多,有两个我们用到的功能:

  Java代码

 

jstat -gcutil 'jvmPid'

 

  会显示此刻GC的情况,其中YGC和FGC代表小GC和大GC的次数,YGCT和FGCT则代表小GC和大GC运行的占用时间,正常情况下,大GC的次数应远远小于小GC,例如我当前的系统小GC已经有10w次,而大GC只有50次,这是程序设计运行良好的表现。

  Java代码

 

jstat -gccapacity 'jvmPid'

 

  会显示此刻GC各内存池占用量,和上条命令结果结构类似,同时也有一个问题,显示的数据不是很直观,如果通过GUI观看就好多了。

  JVM自带了GUI监控状态的功能,在JDK5中,我们需要做一些配置手动开启它,首先我们要在JVM启动项增加一些属性,假设我们的系统是一个运行在tomcat容器下的项目,我们就可以修改JAVA_OPTS变量来开启监控服务

  Java代码

 

JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false"

 

  这将开启远程基于jmx监控的服务功能,这样的配置方式,同时也开启了默认的身份验证机制,我们还需要在另外的地方设置权限,用户名和密码才能登录,我们先把这些服务端剩下的工作搁置一旁,先说说客户端的部分。

  我们需要GUI客户端访问工具来远程查看该虚拟机的信息,JDK5自带了一个名为jconsole的客户端,可以在JDK目录的bin文件夹下找到它并可以直接双击运行,点击“远程”标签,之后输入远程IP,端口,用户名和密码,如服务端配置正常,即可成功访问。

  回到服务端上来,我们还需要配置JVM的远程用户名和密码,这个要修改$JAVA_HOME/jre/lib/management/jmxremote.access和jmxremote.password.template文件。

  首先直接修改jmxremote.access文件,取消最后两个用户名的注释,改为

  Java代码

 


1. monitorRole   readonly     
2. controlRole   readwrite \     
3.               create javax.management.monitor.*,javax.management.timer.* \     
4.               unregister

这两个用户的区别显而易见,你取消一个当然也可以。

  然后修改jmxremote.password.template的文件名,将其改成jmxremote.password,之后同样编辑最后两行用户,将密码改成你想要的,很简单吧。

  之后还要做一步,将jmxremote.password文件的权限改为可读可写

  Java代码

 

chmod 600 $JAVA_HOME/jre/lib/management/jmxremote.password

 

  至此,还有最后一点需要注意,要将/etc/hosts文件中127.0.0.1修改成你真正的外网IP,如210.209.83.37,并且运行hostname -i命令返回的IP也应该是210.209.83.37才可以,每次修改完上述文件,要重新启动JVM,监控服务才会生效。

  大功告成,开启JVM以后,我们可以运行jconsole客户端,输入IP端口,用户名和密码,用户名为monitorRole或controlRole或你自定义的(权限不同)。

  也可以免去用户验证部分,只需要再加入-Dcom.sun.management.jmxremote.authenticate=false即可,也可以通过修改com.sun.management.jmxremote.password.file和com.sun.management.jmxremote.access.file自定义权限文件和密码文件的位置,不过这也没有什么太大必要。

  成功登录后,因为是GUI界面,所有信息可以很直观的被我们所学习和接受,但还需要我们具备一些JVM的知识,尤其是GC方面,有机会的话,会在以后的文档中继续说明。

 

标签:management,Java,监控,记录,GC,JVM,jmxremote,password
From: https://blog.51cto.com/u_2650279/6964816

相关文章

  • 视频监控汇聚平台EasyCVR视频页面WebRTC流地址播放不了是什么原因?
    开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视频定时轮播。视频监控汇聚平台EasyCV......
  • zookeeper JavaApi 创建节点
    importorg.apache.curator.RetryPolicy;importorg.apache.curator.framework.CuratorFramework;importorg.apache.curator.framework.CuratorFrameworkFactory;importorg.apache.curator.retry.ExponentialBackoffRetry;importorg.apache.zookeeper.CreateMode;impo......
  • CF 下分记录
    7.27edu152\(+173=2048\)B没细看数据范围WA了一次D没判\(i-1=0\)WA了一次E.MaxtotheRightofMin考虑增大右端点,维护每个左端点的合法性当右端点从\(r-1\)增大到\(r\)时,若\(a[r-1]<a[r]\):\(r\)只能作为区间最大值。记上一个\(>a[r]\)的位置是\(p\),那......
  • TSINGSEE青犀视频安防监控EasyCVR平台海康大华设备国标GB28181告警布防的报文说明
    TSINGSEE青犀视频监控综合管理平台EasyCVR基于云边端协同,可支持海量视频的轻量化接入与汇聚管理。平台既具备传统安防视频监控的能力,比如:视频监控直播、云端录像、云存储、录像检索与回看、告警上报、平台级联、云台控制、语音对讲等,也能接入AI智能分析的能力,包括人脸检测、车辆检......
  • [Javascript] event target and currentTarget
    <Parent><child><button/></child></Parent>functiononClick(event){console.log('target:',event.target)//buttonconsole.log('currentTarget',event.currentTarget)//parent}pa......
  • 记录一下【docker compose发布】 docker容器间通信
    踩坑:在网上找的帖子说是在dockercompose文件中的network下添加 1:直接报错, 2:然后又去查找说要在compose文件底部,和service同级添加network的声明,添加后还是不能通信,然后使用命令dockernetworkls查看发现新增了两个网络sub_test,pub_test 3:重新查找,使用已有网络需......
  • linux如何安装Java环境
    ❝本篇主要讲一下在linux上如何安装Java环境,widows安装方法之前已经有了,请查看之前的文章!❞安装包的方式这里推荐下载JAVA8,下载地址放到最后,要注册Oracle账号才能下载,当然也可以从其他方式下载。不建议使用这种,因为过程比较麻烦!查看linux版本getconfLONG_BIT#输出64版本号下载......
  • linux如何安装Java环境
    ❝本篇主要讲一下在linux上如何安装Java环境,widows安装方法之前已经有了,请查看之前的文章!❞安装包的方式这里推荐下载JAVA8,下载地址放到最后,要注册Oracle账号才能下载,当然也可以从其他方式下载。不建议使用这种,因为过程比较麻烦!查看linux版本getconfLONG_BIT#输出64版本号下载......
  • promethous+granfa+mysql监控部署
    一、Prometheus源码安装和启动配置普罗米修斯下载网址:https://prometheus.io/download/监控集成器下载地址:http://www.coderdocument.com/docs/prometheus/v2.14/instrumenting/exporters_and_integrations.html1.实验环境IP 角色 系统172.16.11.7 Prometheus服务端 CentOS7......
  • 小狐狸GPT付费源码-WEB版前端的监控代码
    今天搭建了下小狐狸的WEB版,里面有个隐藏的js代码调用外部接口可以看到下面的代码 会把当前的域名调用外部接口传递过去  ......