Skip to content
youyong205 edited this page Jan 22, 2019 · 29 revisions

常见问题

采样只会上报一部分数据吗?

  • 采样不影响 Transaction、Event、Heartbeat、Problem、Bussiness 报表,这些报表都在客户端做了轻量级的聚合处理,保证服务端的全量。
  • 采样是基于特征采样, 符合一些特征的消息不做采样:
    • 消息链路有long-url, long-sql, long-service, long-cache
    • 链路中有抛异常的消息
    • 心跳消息、业务指标监控消息

CAT显示出问题服务端?

  • 建议cat配置的都使用服务端内网的IP,建议使用cat的transaction报表里面,cat上报的IP信息。
  • 不建议使用外网IP,cat使用环境应该是内网
  • 这个不影响数据上报和监控,仅仅是IP配置不规范

修改/data/目录?

  • 建议使用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异步消息发送
	}

IPV6解决办法

  • -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.

QPS的统计

时间跨度

  • 当前小时的数据, 是从当前小时整点开始到现在的秒数。实时计算。 如现在是2016-11-25 16:55:10, 则时间跨度为3310秒(55*60+10)
  • 如果是已经过去的小时或历史数据, 是一整个小时(3600秒)或者一天的所有秒数 可以查看报表上方的开始和结束时间进行计算

###2 如何计算

  • 时间跨度内的请求总量 / 时间跨度(总秒数)
Clone this wiki locally