Arthas 之根据输入查找命令执行类
介绍 Arthas命令路由的整个过程,包括如何注册命令、如何读取客户端的输入、如何根据输入找到对应的命令执行类。最后以一个基础命令help为例,简要介绍命令执行类是如何执行,如何接收参数,以及如何向客户端返回数据的。
介绍 Arthas命令路由的整个过程,包括如何注册命令、如何读取客户端的输入、如何根据输入找到对应的命令执行类。最后以一个基础命令help为例,简要介绍命令执行类是如何执行,如何接收参数,以及如何向客户端返回数据的。
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。
GitHub 地址:
https://github.com/yahoo/CMAK
下载地址:
https://github.com/yahoo/CMAK/releases
kafka-manager 是目前最受欢迎的 kafka 集群管理工具,最早由雅虎开源,用户可以在 Web 界面执行一些简单的集群管理操作。具体支持以下内容:
wget 'https://github.com/yahoo/CMAK/releases/download/3.0.0.5/cmak-3.0.0.5.zip'
unzip cmak-3.0.0.5.zip
cd cmak-3.0.0.5
修改 conf/application.conf
文件:
kafka-manager.zkhosts="127.0.0.1:2181"
kafka-manager.zkhosts=${?ZK_HOSTS}
cmak.zkhosts="127.0.0.1:2181"
cmak.zkhosts=${?ZK_HOSTS}
$ bin/cmak &
DockerHub:https://hub.docker.com/r/sheepkiller/kafka-manager
安装命令:
docker run -it \
--name kafka-manager \
-p 9000:9000 \
-e ZK_HOSTS=127.0.0.1:2181 \
-e KAFKA_MANAGER_AUTH_ENABLED=true \
-e KAFKA_MANAGER_USERNAME=admin \
-e KAFKA_MANAGER_PASSWORD=admin \
-d sheepkiller/kafka-manager:latest
kafka-manager 默认的端口是 9000。
添加集群
配置集群
开启消费者查看
如果使用 kafka-manager 监控,需要开启 JMX,则需要勾选:
否则会有以下报错:
2020-08-14 17:30:58,236 - [ERROR] k.m.j.KafkaJMX$ - Failed to connect to service:jmx:rmi:///jndi/rmi://dm161.bjth.163.org:-1/jmxrmi
java.lang.IllegalArgumentException: requirement failed: No jmx port but jmx polling enabled!
启动 kafka 服务时指定 JMX_PORT
值:
JMX_PORT=9999 nohup bin/kafka-server-start.sh config/server.properties &
CMAK 添加集群的时候报错:
org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /kafka-manager/mutex
at org.apache.zookeeper.KeeperException.create(KeeperException.java:106)
at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)
at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1538)
at org.apache.curator.utils.ZKPaths.mkdirs(ZKPaths.java:291)
at org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:746)
at org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:723)
at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:109)
at org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:720)
at org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:484)
at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:474)
解决:
root@zk-0:/opt/zookeeper/bin# ./zkCli.sh
[zk: localhost:2181(CONNECTED) 1] ls /kafka-manager
[configs, deleteClusters, clusters]
[zk: localhost:2181(CONNECTED) 2] create /kafka-manager/mutex ""
Created /kafka-manager/mutex
[zk: localhost:2181(CONNECTED) 3] create /kafka-manager/mutex/locks ""
Created /kafka-manager/mutex/locks
[zk: localhost:2181(CONNECTED) 4] create /kafka-manager/mutex/leases ""
Created /kafka-manager/mutex/leases
参考:https://github.com/yahoo/CMAK/issues/731
通过Arthas中的trace/monitor/watch/stack/tt等命令,可以查看方法内部调用信息,从而定位方法调用问题。
通过Arthas中的thread命令,可以查看当前线程信息及线程的堆栈。从而可以定位线程问题。
使用git提交文件到github,每次都要输入用户名和密码,操作起来很麻烦,以下方法可解决。