目录
(1)主机
表1-1 主机
主机 | 架构 | 组件 | IP | 备注 |
pinepoint | all in one | pinpoint-web-boot pinpoint-collector-boot hbase | ?192.168.204.233 | |
agent | ? ? ? ? agent | pinpoint-agent | ?192.168.204.130 |
(1)下载软件
1)jdk
jdk1.8(下面的hbase GC调优主要针对jdk1.8,其他版本会有所不同)
2)pinpoint组件
#下载地址 https://github.com/pinpoint-apm/pinpoint/releases/tag/v2.3.3
pinpoint-web-boot-2.3.3.jar
pinpoint-collector-boot-2.3.3.jar
pinpoint-agent-2.3.3.tar.gz
3)hbase
#下载地址 http://archive.apache.org/dist/hbase/1.4.9/
hbase-1.4.9-bin.tar.gz
#下载地址 https://github.com/pinpointapm/pinpoint/tree/master/hbase/scripts)
hbase-create.hbase
(1)查看目录
(2)解压
tar -xzvf hbase-1.4.9-bin.tar.gz
(3)切换目录
(4)修改HBase配置文件hbase-site.xml
vim hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///app/application/data/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/app/application/data/zookeeper</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>300000</value>
<description>加大zookeeper会话超时时间</description>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
<description>设置 regionserver 起死回生</description>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>50</value>
<description>regionserver处理IO请求的线程数</description>
</property>
<property>
<name>hbase.zookeeper.property.tickTime</name>
<value>60000</value>
<description>Client端与zk发送心跳的时间间隔</description>
</property>
<property>
<name>zookeeper.session.timeout.localHBaseCluster</name>
<value>300000</value>
<description>本地模式HMasterCommandLine类中的startMaster方法会将zookeeper.session.timeout.localHBaseCluster设置给zookeeper.session.timeout,本地模式默认10000ms</description>
</property>
<property>
<name>hbase.localcluster.assign.random.ports</name>
<value>false</value>
<description>本地模式端口号是随机分配,取消随机端口才能变成默认端口</description>
</property>
</configuration>
修改前
修改后:
(5)修改启动文件hbase-env.sh的JAVA_HOME环境变量位置
vim hbase-env.sh
# 在27行左右的位置,修改如下
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
# 在128行开启自带zookeeper
export HBASE_MANAGES_ZK=true
修改前:
修改后
(6)?配置环境变量
#配置环境变量HBASE_HOME
vim /etc/profile
#在末尾添加:
export HBASE_HOME=/opt/hbase-1.4.9
#让环境变量生效
source /etc/profile
(7)启动HBase
cd /opt/hbase-1.4.9/bin
./start-hbase.sh
(8)验证是否启动成功
jps
启动成功会看到HMaster进程
(9)初始化HBase的pinpoint库
① 执行pinpoint提供的Hbase初始化语句
cd /opt/hbase-1.4.9/bin
./hbase shell /opt/hbase-create.hbase
16张表已建好
(10)结果验证
方法1:进入数据库,查看初始化表
#进入数据库
cd /opt/hbase-1.4.9/bin
./hbase shell
#查看初始化表
list
方法2:登录web,查看初始化数据是否成功(可看到16张表已建好)
HbaseWeb地址 : http://192.168.204.233:16010/master-status,IP地址为hbase数据库所在服务器的IP地址
(11)?命令
① 进入自带zookeeper模式命令
./hbase zkcli
②进入hbase命令
./hbase shell
(1)安装pinpoint-collector
pinpoint-collector-boot-2.3.3.jar默认端口为8081,可自行修改application.yml的端口地址
nohup java -Dpinpoint.zookeeper.address=localhost -jar /opt/pinpoint-collector-boot-2.3.3.jar >/var/log/pinpoint-collector.log 2>&1 &
(2)?安装pinpoint-web
① pinpoint-collector-boot-2.3.3.jar默认端口为8080,可自行修改application.yml的端口地址
nohup java -Dpinpoint.zookeeper.address=localhost -jar /opt/pinpoint-web-boot-2.3.3.jar >/var/log/pinpoint-web.log 2>&1 &
② 浏览器上输入:http://ip:8080,可以进入到PinPoint主界面。由于此时还没有在被测服务上运行agent,因此页面上没有应用可以显示。
(3)安装pinpoint-agent(pinpoint-agent 需要与被测应用安装在一起)
①解压并修改agent配置文件?
tar -xvf pinpoint-agent-2.3.3.tar.gz
vim /opt/pinpoint-agent-2.3.3/profiles/release/pinpoint.config
profiler.transport.grpc.collector.ip=192.168.204.233 # 即安装pinpoint-collector的虚拟机IP
profiler.collector.ip=192.168.204.233 #hbase服务器地址
profiler.sampling.counting.sampling-rate=1 #采样率配置,访问量不大的情况,建议全部采集
修改前
修改后
② 增加监控的服务的启动命令
# 启动应用demoA
nohup java -javaagent:/opt/pinpoint-agent-2.3.3/pinpoint-bootstrap-2.3.3.jar -Dpinpoint.agentId=demoA -Dpinpoint.applicationName=demoA -jar /opt/dubbo-admin-backend-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &
③ 命令解析
-javaagent:/opt/pinpoint-agent-2.3.3/pinpoint-bootstrap-2.3.3.jar:agent所在位置
-Dpinpoint.agentId:这个参数只能唯一
-Dpinpoint.applicationName:可以重复,但为了更好地查看应用间的调用关系,这里按照应用名取值
④刷新pinpoint页面,即可看到新增应用demoA
#启动应用eureka_demo
nohup java -javaagent:/opt/pinpoint-agent-2.3.3/pinpoint-bootstrap-2.3.3.jar -Dpinpoint.agentId=eureka_demo -Dpinpoint.applicationName=eureka_demo -jar /opt/eureka_demo-0.0.1-SNAPSHOT.jar > nohup.out 2>&1 &
⑤再次刷新pinpoint页面,看到新增应用eureka_demo
(1)概念
pinpoint是开源在github上的一款APM监控工具,它是由java编写的,用于大规模分布式系统的监控;它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的,只需要在被测试的Tomcat中加上3句话,打下探针,就可以监控整套程序了。
(2)功能
1)服务拓扑图
对整个系统中应用的调用关系进行了可视化的展示,单击某个服务节点,可以显示该节点的详细信息,比如当前节点状态、请求数量等
2)实时活跃线程图
监控应用内活跃线程的执行情况,对应用的线程执行性能可以有比较直观的了解
3)请求响应散点图
以时间维度进行请求计数和响应时间的展示,拖过拖动图表可以选择对应的请求查看执行的详细情况
4)请求调用栈查看
对分布式环境中每个请求提供了代码维度的可见性,可以在页面中查看请求针对到代码维度的执行详情,帮助查找请求的瓶颈和故障原因。
5)应用状态、机器状态检查
通过这个功能可以查看相关应用程序的其他的一些详细信息,比如CPU使用情况,内存状态、垃圾收集状态,TPS和JVM信息等参数。
(1)组成
pinpoint由pinpoint agent、pinpoint collector、pinpoint web、HBase 4部分组成;
1)Pinpoint Agent
用于收集应用端监控数据,无侵入式,只需要在启动命令中加入部分参数即可;
2)Pinpoint Collector
数据收集模块,接收Agent发送过来的监控数据,并存储到HBase;
3)Pinpoint Web
监控展示模块,展示系统调用关系、调用详情、应用状态等,并支持报警等功能;
4)HBase
数据库,用于保存监控数据。
(2)架构图
(1) 查看java版本
java -version
(2)查看jdk的安装路径(最后2行)
java -verbose
(3)查看 java的位置
which java
(4)root用户下改配置文件
vim /etc/profile
找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
在下面写上:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/rt.jar
更新查看
source /etc/profile
echo $JAVA_HOME
java -version
(1)报错
(2)原因分析
java8已经摈弃了Perm的配置,不能再配置Perm永久代参数。而是引入了一个新的概念Metaspace。
在java虚拟机内部,class文件中包括类的版本、字段、方法、接口等描述信息,还有运行时常量池,用于存放编译器生成的各种字面量和符号引用。存放这些“永久”数据的区域叫做永久代(Permanent Generation,简称PermGen)。永久代是一片连续的堆空间。在JVM启动时通过命令行指定参数-XX:MaxPermSize来设定永久代最大可分配的内存空间。一个明显的问题是,PermGen的size很难调整,并且一旦这个值设置不当,当JVM加载的类信息容量超过了这个设定值后,应用将会报OOM错误(OutOfMemoryError)。
JAVA从JDK7的HotSpot虚拟机开始永久代的移除工作。
永久代在JDK8中被完全的移除了。所以永久代的参数-XX:PermSize和-XX:MaxPermSize也被移除了。
在JDK8中,类的元数据信息(class metadata)不再存储在连续的堆空间上,而是被存储在叫做Metaspace的本地内存(native memory)中。
由于类的元数据可以在本地内存(native memory)之外分配,所以其最大可利用空间是整个系统内存的可用空间。这样,我们程序猿将不再会遇到OOM错误。
(3)解决方法
修改配置文件,注释相关内容。
vim hbase-env.sh
修改前
修改后
(1)报错
(2)原因分析
进程占用
(3)解决方法
kill掉这个56686的进程,重启Hbase服务
kill -9 56686
(1)概念
jps(Java?Virtual?Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。
(2)查询已安装的java软件包
rpm -qa |grep java
(3)安装安装openjdk-devel包
yum install java-1.8.0-openjdk-devel.x86_64
(4)命令使用
jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
(5)常用参数
1)-q 只显示pid
jps -q
2)-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null
jps -m
3)-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名
jps -l
4)-v 输出传递给JVM的参数
jps -v