visualvm连接jstatd、jmx用于连接hbase

本文详细介绍了如何通过visualvm远程连接HBase的jstatd与jmx,包括设置权限、启动jstatd、配置JMX连接参数,并演示了如何使用visualvm进行内存分析。还涉及了防火墙设置和端口操作,确保远程访问的顺畅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

visualvm连接jstatd、jmx用于hbase

===================远程连接jstatd的方法===================

echo $JAVA_HOME得到javahome目录

进入javahome的bin目录

新建文件,该文件用于打开权限

vim jstatd.all.policy 

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

   permission java.security.AllPermission;

};

启动jstatd,亲测下面这条语句可用,需要改下hostname

nohup ./jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=服务器ip地址 &

jstatd需要打开1099端口通讯,还会打开一个随机端口用于通信,这两个接口在防火墙都要打开防火墙开放这个随机端口,还有1099端口

查看下这个随机端口是多少

netstat -ntlp

打开这个随机端口

iptables -t nat -A  DOCKER -p tcp --dport 44272 -j DNAT --to-destination  服务器ip:端口

===================远程连接jxm的方法===================

jxm方法

在hbase的conf目录下,有脚本hbase-env.sh ,增加jvm参数,可将这些jvm参数配置在hbase-env.sh的HBASE_REGIONSERVER_OPTS中

-Dcom.sun.management.jmxremote

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

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

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

-Dcom.sun.management.jmxremote.rmi.port=20102

-Djava.rmi.server.hostname=服务器ip

配置的端口要需要在防火墙中打开

重启reginserver就能连接上jxm了

使用visualvm添加JMX连接即可

如下图可进行内存抽样,抽样可看到内存中对象大小占比情况

======================================

查看开放的端口

iptables -n -t nat -L

添加开放端口

iptables -t nat -A  DOCKER -p tcp --dport ${port1} -j DNAT --to-destination ${ip}:${port1}

删除开放端口

iptables -t nat -D  DOCKER -p tcp --dport ${port1} -j DNAT --to-destination ${ip}:${port1}

Java中,VisualVM是一个强大的Java性能分析工具,而JStatD是一种服务,它允许从远程位置收集Java运行时监控数据。如果你想通过代码模拟VisualVM通过jstatd获取GC(垃圾回收)信息,你可以按照以下步骤操作: 1. **启动JStatD服务**: 首先,你需要在目标Java应用上配置jstatd服务。在`bin`目录下创建一个`jstatd.properties`文件,设置监听地址和端口,例如: ``` listen=0.0.0.0:8000 ``` 然后,用命令行启动jstatd进程: ``` jstatd -J-Xrunjdwp:transport=dt_socket,address=<your-port>,server=y,suspend=n -config <path-to-jstatd.properties> ``` 2. **编写Java代码连接JStatD**: 使用`java.net.Socket`或第三方库如`com.sun.jmx.remote.client.JMXClient`连接jstatd服务器,发送请求获取GC信息。例如,你可以使用`ManagementFactory.getPlatformMBeanServer().queryNames()`获取所有MBeans名称,然后针对`DiagnosticMXBean`发送特定的命令,如获取最近一次的GC详情。 ```java import com.sun.management.GarbageCollectorMXBean; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; public class JStatDClient { public static void main(String[] args) { try { ObjectName objName = new ObjectName("java.lang:type=GarbageCollector"); GarbageCollectorMXBean gcBean = (GarbageCollectorMXBean) ManagementFactory.newPlatformMXBeanProxy( ManagementFactory.getPlatformMBeanServer(), objName, GarbageCollectorMXBean.class); // 获取最近一次的全GC long lastGcTime = gcBean.getLastGcInfo().getDuration(); System.out.println("Last Full GC time: " + lastGcTime); } catch (MalformedObjectNameException e) { e.printStackTrace(); } } } ``` 注意这需要Java 6及以上的版本,并且运行环境需开启安全管理器允许远程访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值