-
Notifications
You must be signed in to change notification settings - Fork 5.4k
cat_faq
youyong205 edited this page Jan 22, 2019
·
29 revisions
- 采样不影响 Transaction、Event、Heartbeat、Problem、Bussiness 报表,这些报表都在客户端做了轻量级的聚合处理,保证服务端的全量。
- 采样是基于特征采样, 符合一些特征的消息不做采样:
- 消息链路有long-url, long-sql, long-service, long-cache
- 链路中有抛异常的消息
- 心跳消息、业务指标监控消息
- 建议cat配置的都使用服务端内网的IP,建议使用cat的transaction报表里面,cat上报的IP信息。
- 不建议使用外网IP,cat使用环境应该是内网
- 这个不影响数据上报和监控,仅仅是IP配置不规范
- 建议使用linux的软链接创建目录指向/data/目录
- cat不支持配置修改,如果想修改,自行阅读源码解决
- 请检查下客户端的log,在/data/applogs/cat/*.log 目录
- 请检查下客户端和服务端时钟是否对应
- cat的历史模式报表数据都是夜间任务执行的。比如今天一天的报表数据, 会在明天凌晨1点以后开始执行。
- 偶尔会遇到数据库插入较慢, 或者任务集中密集的时候, 会导致任务执行速度较慢, 一些离线任务在预定的时间内未完成。导致我们看不到类似昨天天报表的情况。
- 有时候部分业务会出现打开一个exception 或者 打开一个心跳的链接, 会读取到一个不相干的消息, 这个时候请检查下两个内容。
- 机器的/data/appdatas/cat/{domain}.mark domain为统一项目名, 这个文件是否具有读写权限
- 同一台机器上是否部署了两个相同domain的应用, cat支持同一个ip节点部署多个不相同的项目, 不支持同一个ip节点部署相同的项目。
- 本地Test时候发现使用cat打点, 在测试环境看不到相关打点信息, 这个原因是cat是异步序列化和异步发送, 有时候test主线程退出了, jvm就停止掉了, 导致根本来不及发送。
- 测试代码参考
@Test
public void test() throws Exception {
Transaction t = Cat.newTransaction("Check1", "name");
Transaction t3 = Cat.newTransaction("Check2", "name");
for (int i = 0; i < 2080; i++) {
Transaction t4 = Cat.newTransaction("Check3", "name");
t4.complete();
}
t3.complete();
t.complete();
Thread.sleep(1000);// 此处sleep一会, 就能保证cat异步消息发送
}
- -Dhost.ip 传入ip
- -Djava.net.preferIPv4Stack=true
- JVM就是为了性能考虑, 当一个内建的异常被抛出一定次数后, 会被重新编译, 抛出不带有堆栈的异常, 如果要禁用这个优化, 就得使用这个参数。
- 使用 -XX:-OmitStackTraceInFastThrow 关闭此项优化可以强制打印堆栈。优点是便于排查问题, 缺点是可能会增大开销。
- XX:-OmitStackTraceInFastThrow, 看看官方解释
The compiler in the server VM now provides correct stack backtraces for all "cold" built-in exceptions. For performance purposes, when such an exception is thrown a few times, the method may be recompiled. After recompilation, the compiler may choose a faster tactic using preallocated exceptions that do not provide a stack trace. To disable completely the use of preallocated exceptions, use this new flag: -XX:-OmitStackTraceInFastThrow.
- 当前小时的数据, 是从当前小时整点开始到现在的秒数。实时计算。 如现在是2016-11-25 16:55:10, 则时间跨度为3310秒(55*60+10)
- 如果是已经过去的小时或历史数据, 是一整个小时(3600秒)或者一天的所有秒数 可以查看报表上方的开始和结束时间进行计算
###2 如何计算
- 时间跨度内的请求总量 / 时间跨度(总秒数)