LinShunKang / MyPerf4J

High performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
BSD 3-Clause "New" or "Revised" License
3.41k stars 540 forks source link

metrics.method.class_level_mapping 参数无效 #67

Closed RichardLiu0926 closed 3 years ago

RichardLiu0926 commented 3 years ago

问题描述

metrics.method.class_level_mapping 参数无效

运行环境

JVM启动参数 JAVA_HOME="/usr/local/jdk1.8.0_211" JAVA_OPTS="-Xms1024m -Xmx1024m -Djava.awt.headless=true -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+DisableExplicitGC -Xnoclassgc" JAVA_AGENT="-javaagent:/data/ishare/MyPerf4J-ASM-3.1.0-SNAPSHOT.jar -DMyPerf4JPropFile=$CONFIG_HOME/myperf4j.properties"

eval exec $JAVA_HOME/bin/java $JAVA_OPTS $JAVA_AGENT -jar -Dlogging.config=$CONFIG_HOME/logback.xml -Dlogging.path=$LOG_HOME -Dspring.config.location=$CONFIG_HOME/application.yml $APP_HOME/$jar_name >/dev/null 2>&1

配置文件

MyPerf4J 所有配置请参考:https://github.com/LinShunKang/MyPerf4J/wiki/%E9%85%8D%E7%BD%AE

配置监控应用的名称

app_name =

是否开启 debug 模式,可配置为 true/false

debug = true

###############################################################################

HTTP Server Configuration

###############################################################################

配置 HTTP Server 端口号

http.server.port = 18765

配置 HTTP Server 最小工作线程数

http.server.min_workers = 1

配置 HTTP Server 最大工作线程数

http.server.max_workers = 2

配置 HTTP Server 排队数, worker 线程数达到最大时,接受排队的请求个数

http.server.accept_count = 1024

###############################################################################

Metrics Configuration

###############################################################################

配置 MetricsExporter 类型

log.stdout: 以标准格式化结构输出到 stdout.log

log.standard: 以标准格式化结构输出到磁盘

log.influxdb: 以 InfluxDB LineProtocol 格式输出到磁盘

http.influxdb: 以 InfluxDB LineProtocol 格式发送至 InfluxDB server

metrics.exporter = http.influxdb

配置各项监控指标日志的文件路径

如果 metrics.exporter 配置为 log.influxdb,建议把所有的 metrics.log.* 路径配置成一样以方便 Telegraf 收集

metrics.log.method = /data/log/xxxx/metrics.log metrics.log.class_loading = /data/log/ixxx/metrics.log metrics.log.gc = /data/log/xxxe/metrics.log metrics.log.memory = /data/log/xxxx/metrics.log metrics.log.buff_pool = /data/log/ixxx/metrics.log metrics.log.thread = /data/log/ixxxx/metrics.log metrics.log.file_desc = /data/log/ixxxx/metrics.log metrics.log.compilation = /data/log/isxxx/metrics.log

配置日志文件滚动时间间隔,分别有 MINUTELY、HOURLY 和 DAILY 三个值

metrics.log.rolling.time_unit = DAILY

配置历史日志文件保留个数

metrics.log.reserve.count = 30

配置方法指标采集的时间片,单位为 ms,最小 1s,最大 600s

metrics.time_slice.method = 10000

配置 JVM 指标采集的时间片,单位为ms,最小1s,最大600s

metrics.time_slice.jvm = 10000

是否展示方法参数类型

metrics.method.show_params = true

配置 Java 类的层级映射关系

规则为:LevelA:[classNameExpA1,classNameExpA2];LevelB:[classNameExpB1,classNameExpB2];

metrics.method.class_level_mapping = Filter:[Filter];Handler:[Handler];Dao:[*Dao];

###############################################################################

InfluxDB Configuration

###############################################################################

influxdb.host = xxxx influxdb.port = xxx influxdb.database = MyPerf4J

influxdb.username = MyPerf4J influxdb.password = MyPerf4J

配置超时时间,单位:ms

influxdb.conn_timeout = 3000 influxdb.read_timeout = 5000

###############################################################################

Filter Configuration

###############################################################################

配置需要监控的package,可配置多个,用英文';'分隔

com.demo.p1 代表包含以 com.demo.p1 为前缀的所有包和类

[] 表示集合的概念:例如,com.demo.[p1,p2,p3] 代表包含以 com.demo.p1、com.demo.p2 和 com.demo.p3 为前缀的所有包和类,等价于 com.demo.p1;com.demo.p2;com.demo.p3

表示通配符:可以指代零个或多个字符,例如,com..demo.*

filter.packages.include = com.xxx.seo.[controller,dao,feignController,manage,service];

配置不需要监控的package,可配置多个,用英文';'分隔

filter.packages.exclude =

配置不需要进行监控的方法名,每个方法名用英文 ';' 分隔

filter.methods.exclude = getId1 代表排除所有方法名为 getId1 的方法

filter.methods.exclude = DemoServiceImpl.getId1 代表排除类 DemoServiceImpl 中所有方法名为 getId1 的方法

filter.methods.exclude = DemoServiceImpl.getId1(long) 代表排除类 DemoServiceImpl 中方法签名为 getId1(long) 的方法

filter.methods.exclude = equals;toString;hashCode;wait

配置是否排除私有方法,true/false

filter.methods.exclude_private = true

配置需要排除的 ClassLoader,可配置多个ClassLoader,用英文';'分隔

filter.class_loaders.exclude =

###############################################################################

Recorder Configuration

###############################################################################

配置 Recorder 模式,可配置为 accurate/rough

recorder.mode = ACCURATE

配置 Recorders 转盘的数量

recorders.backup_count = 3

指定通用的方法执行时间阈值,单位为 ms

recorder.size.timing_arr = 3000

指定一个时间片内,超过方法执行时间阈值的次数,仅在 recorder.mode = accurate 时有效

recorder.size.timing_map = 128

异常堆栈

请把程序的错误栈信息完整的复制出来

LinShunKang commented 3 years ago

你好,你指的参数无效是什么意思?能否提供 MyPerf4J 采集的日志信息(修改 metrics.exporter = log.stdout 即可)?

RichardLiu0926 commented 3 years ago

metrics.method.class_level_mapping = Filter:[Filter];Handler:[Handler];Dao:[*Dao]; 就是 筛选 level 并不会出现Dao Filter Handler

LinShunKang commented 3 years ago
metrics.method.class_level_mapping = Filter:[*Filter];Handler:[*Handler];Dao:[*Dao]

指的是,如果你的类名称是以 'Filter' 结尾,则 Level 归类为 Filter;如果你的类名称是以 'Handler' 结尾,则 Level 归类为 Handler;如果你的类名称是以 'Dao' 结尾,则 Level 归类为 Dao。

所以,你能否提供 MyPerf4J 采集的 Metrics 日志信息?

RichardLiu0926 commented 3 years ago

是的就是这个意思类名结尾并未归类Level, 目前使用的方式http.influxdb 并没有本地输出Metrics日志信息

RichardLiu0926 commented 3 years ago

image 这个是influxdb 查询出来的数据

LinShunKang commented 3 years ago

你好,我跑了测试用例,没发现问题 image