linshunkang / myperf4j Goto Github PK
View Code? Open in Web Editor NEWHigh performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
License: BSD 3-Clause "New" or "Revised" License
High performance Java APM. Powered by ASM. Try it. Test it. If you feel its better, use it.
License: BSD 3-Clause "New" or "Revised" License
在不对Java应用程序做任何修改的前提下,是否能够打印所有被调用的(类名+方法名)?
Error creating bean with name 'ioCMDataRestService': Invocation of init method failed; nested exception is java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "com/huawei/iom/component/httpclient/pool/IdleConnectionMonitorThread"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1272) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:308) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1272) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.18.RELEASE.jar:4.3.18.RELEASE]
Bug 描述
请清晰和简洁的描述你遇见的 bug
安装后其他的指标都有数据,但是java日志里Method Metrics一直没有数据返回
运行环境
1、JDK 版本号,例如,JDK7、JDK8 等
2、运行容器和框架,例如,Tomcat、PlainJava、Spring、SpringBoot 等
SpringBoot,JDK8
配置文件
请把你的配置文件内容完整的复制出来
#应用名称
AppName=risk-1.0.0.jar
#配置MetricsProcessors,可不配置
#MethodMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBMethodMetricsProcessor
#ClassMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmClassMetricsProcessor
#GCMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmGCMetricsProcessor
#MemMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmMemoryMetricsProcessor
#ThreadMetricsProcessor=cn.myperf4j.ext.metric.processor.influxdb.InfluxDBJvmThreadMetricsProcessor
MetricsProcessorType=2
#配置各个Metrics日志的文件路径,可不配置
MethodMetricsFile=/tmp/MyPerf4J/method_metrics.log
ClassMetricsFile=/tmp/MyPerf4J/class_metrics.log
GCMetricsFile=/tmp/MyPerf4J/gc_metrics.log
MemMetricsFile=/tmp/MyPerf4J/memory_metrics.log
BufPoolMetricsFile=/tmp/MyPerf4J/buf_pool_metrics.log
ThreadMetricsFile=/tmp/MyPerf4J/thread_metrics.log
#配置备份Recorders的数量,默认为1,最小为1,最大为8,当需要在较小MillTimeSlice内统计大量方法性能数据时可配置大一些
BackupRecordersCount=1
#配置Record模式,可配置为accurate/rough
RecorderMode=rough
#配置时间片,单位为ms,最小1s,最大600s
MillTimeSlice=10000
#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=risk-1.0.0.jar
#不需要监控的package,可配置多个,用英文';'分隔
#ExcludePackages=org.spring;
#可配置多个方法名,用英文';'分隔
ExcludeMethods=equals;hash
#是否排除私有方法,true/false
ExcludePrivateMethod=true
#通用的方法执行时间阈值,单位为ms
ProfilingTimeThreshold=1000
#在一个时间片内,超过方法执行时间阈值的次数,仅在RecorderMode=accurate时有效
ProfilingOutThresholdCount=10
异常堆栈
请把程序的错误栈信息完整的复制出来
MyPerf4J JVM Class Metrics [2018-11-25 11:47:00, 2018-11-25 11:48:00]
Total Loaded Unloaded
7271 7271 0
MyPerf4J JVM GC Metrics [2018-11-25 11:47:00, 2018-11-25 11:48:00]
Name Count Time
PS Scavenge 6 134
PS MarkSweep 2 92
MyPerf4J JVM Memory Metrics [2018-11-25 11:47:00, 2018-11-25 11:48:00]
NonHeapInit NonHeapUsed NonHeapCommitted NonHeapMax HeapInit HeapUsed HeapCommitted HeapMax
2555904 66061400 68091904 -1 2147483648 569814776 2089811968 2089811968
MyPerf4J JVM BufferPool Metrics [2018-11-25 11:47:00, 2018-11-25 11:48:00]
Name Count MemoryUsed MemoryCapacity
direct 0 0 0
mapped 0 0 0
MyPerf4J Method Metrics [2018-11-25 11:47:00, 2018-11-25 11:48:00]
Method[0] RPS Avg(ms) Min(ms) Max(ms) StdDev Count TP50 TP90 TP95 TP99 TP999 TP9999 TP99999 TP100
MyPerf4J JVM Class Metrics [2018-11-25 11:48:00, 2018-11-25 11:49:00]
Total Loaded Unloaded
7282 7282 0
MyPerf4J JVM GC Metrics [2018-11-25 11:48:00, 2018-11-25 11:49:00]
Name Count Time
PS Scavenge 6 134
PS MarkSweep 2 92
MyPerf4J JVM Memory Metrics [2018-11-25 11:48:00, 2018-11-25 11:49:00]
NonHeapInit NonHeapUsed NonHeapCommitted NonHeapMax HeapInit HeapUsed HeapCommitted HeapMax
2555904 66187808 68091904 -1 2147483648 573002480 2089811968 2089811968
MyPerf4J JVM BufferPool Metrics [2018-11-25 11:48:00, 2018-11-25 11:49:00]
Name Count MemoryUsed MemoryCapacity
direct 0 0 0
mapped 0 0 0
ThreadPoolExecutor executor = processor.getExecutor();
executor.shutdown();
executor.awaitTermination(30, TimeUnit.SECONDS);
比如:a方法,调用b,c,d方法,b调用e方法,展现的形式就是以缩进(或标号1.1;1.1.1,1,2,1.3)的形式展示
`MyPerf4J Performance Statistics [2018-07-01 23:40:23, 2018-07-01 23:40:24]
chain Api[2/3] RPS Avg(ms) Min(ms) Max(ms) StdDev Count TP50 TP90 TP95 TP99 TP999 TP9999 TP99999 TP100
1 DemoServiceImpl.getId1 7454181 0.00 0 0 0.00 7454181 0 0 0 0 0 0 0 0
1.1 DemoServiceImpl.getId2 7454180 0.00 0 0 0.00 7454180 0 0 0 0 0 0 0 0`
问题描述
项目的环境用的是jdk6运行的,用到了很多其他组件,暂时没法直接升到jdk7及以上,请问有没有办法在源码这一层编译出一个myperf4j-asm.jar可在jdk6下运行的版本?非常感谢
Tomcat里的服务怎么监控
问题描述
你好,这个服务有集成告警组件么?当Java服务出现性能问题(崩溃边缘)时,需要发出告警消息。
运行环境
无
JVM启动参数
无
配置文件
无
异常堆栈
无
BAT中编写启动指令如下:
java -jar SEmodbus_Server.jar -javaagent:MyPerf4J-ASM.jar -DMyPerf4JPropFile=myPerf4J.properties
配置文件中监控package配置为
IncludePackages=com.seari.modbusServer.api
其余为默认配置
SEmodbus_Server项目log4j stdout配置如下
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d %p [%c] - %m%n
运行后在console窗口中未见MyPerf4J相关日志信息
现在的pom中这个依赖,找不到
<dependency>
<groupId>MyPerf4J</groupId>
<artifactId>MyPerf4J-Extension</artifactId>
<version>${project.version}</version>
</dependency>
我删掉可以打包成功,是多余的吗?
我修改的是这个文件 PropertyKeys.java 中的 String PRO_FILE_NAME = "MyPerf4JPropFile";
关闭的过程中,会启动另一个tomcat实例,并且原来的也无法停掉。
tomcat 8.0.53
jdk 8
如何和项目中的asm版本兼容
我也在做一个基于java agent的项目,用于实现method aop,调用groovy脚本,然后使用groovy脚本对方法进行mock,可以对调用外部接口的方法,dubbo接口方法,加解密方法进行mock。我用的javassist,遇到过我依赖的javassist和项目中的javasssit版本不兼容的问题。请问你这个项目,如何处理asm的版本兼容问题?
Bug 描述
请清晰和简洁的描述你遇见的 bug
可否增加各种metrics日志的保留时间?现在具备LogRollingTimeUnit回滚时间,但是无法设置回滚后的旧日志保留多久
运行环境
1、JDK 版本号,例如,JDK7、JDK8 等
JDK8
2、运行容器和框架,例如,Tomcat、PlainJava、Spring、SpringBoot 等
Tomcat、SpringBoot
3、操作系统,例如,Linux、MacOS、Windows 等
Centos6、7
配置文件
请把你的配置文件内容完整的复制出来
#应用名称
#AppName=MyPerf4JTest
AppName=tomcat00
#MetricsProcessor类型,0:以标准格式化结构输出到stdout.log 1:以标准格式化结构输出到磁盘 2:以InfluxDB LineProtocol格式输出到磁盘
MetricsProcessorType=2
#配置各个Metrics日志的文件路径,可不配置
MethodMetricsFile=/home/logs/method_metrics.log
ClassMetricsFile=/home/logs/class_metrics.log
GCMetricsFile=/home/logs/gc_metrics.log
MemMetricsFile=/home/logs/memory_metrics.log
BufPoolMetricsFile=/home/logs/buf_pool_metrics.log
ThreadMetricsFile=/home/logs/thread_metrics.log
#配置Record模式,可配置为accurate/rough
RecorderMode=accurate
#配置时间片,单位为ms,最小1s,最大600s
MilliTimeSlice=10000
#是否展示方法参数类型
ShowMethodParams=true
LogRollingTimeUnit=HOURLY
BackupRecordersCount=2
ExcludePrivateMethod=true
#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=com.demo.[p1,p2,p3]
异常堆栈
请把程序的错误栈信息完整的复制出来
没有异常
测试了下, 似乎没看到. 创建的 controller 等方法的调用事件统计是没有问题的, 但是 spring 框架启动时的方法耗时统计信息没有, 暂时还没去看你的代码~
profilingParamFile is empty!
我的启动命令是:
java -jar -javaagent:MyPerf4J-ASM.jar -DMyPerf4JPropFile=/home/test/myPerf4J.properties
问题描述
请清晰和简洁的描述你遇见的 问题
你好,我按照流程配置了所有东西 "_metris.log"等文件也看到有内容输出,但是配置了telegraf并没有向influxdb输送inputs.tail指定的内容,现在influxdb没有关于JVM的任何数据
运行环境
1、JDK8 等
2、SpringBoot 等
3、Centos 7
4. telegraf是1.13.0版本
5. influxdb是1.7.9版本
JVM启动参数
请把你的JVM启动参数完整的复制出来
配置文件
请把你的配置文件内容完整的复制出来
异常堆栈
请把程序的错误栈信息完整的复制出来
目前日志全部使用的System.out.println和System.err.println。如果能够支持log4j、logback最好。
问题描述
请清晰和简洁的描述你遇见的 问题
运行环境
1、JDK 版本号,例如,JDK7、JDK8 等
2、运行容器和框架,例如,Tomcat、PlainJava、Spring、SpringBoot 等
3、操作系统,例如,Linux、MacOS、Windows 等
JVM启动参数
请把你的JVM启动参数完整的复制出来
配置文件
请把你的配置文件内容完整的复制出来
异常堆栈
请把程序的错误栈信息完整的复制出来
你想要的功能和某一个问题相关?请详细描述它。
GC信息不够详细,GC前后各区内存的变化,轮询也不够准确高效
描述你想要的解决方式
采用Java 7新推出的JMX API的GC notification机制可以获取更详细的GC信息
描述你所构想的解决方式
JMX API的GC notification
其他相关内容
Bug 描述
mvn clean package 出错
运行环境
1、JDK 版本
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)
2、运行容器和框架
3、操作系统
MacOS
配置文件
无
异常堆栈
[INFO]
[INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ MyPerf4J-Base ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] MyPerf4J 2.3.0 ..................................... SUCCESS [ 0.140 s]
[INFO] MyPerf4J-Base ...................................... FAILURE [ 2.294 s]
[INFO] MyPerf4J-Core ...................................... SKIPPED
[INFO] MyPerf4J-ASM 2.3.0 ................................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.561 s
[INFO] Finished at: 2019-01-27T21:53:05+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project MyPerf4J-Base: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test failed.: NullPointerException -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn -rf :MyPerf4J-Base
问题描述
请清晰和简洁的描述你遇见的 问题
运行环境
1、JDK 版本号,例如,JDK7、JDK8 等
2、运行容器和框架,例如,Tomcat、PlainJava、Spring、SpringBoot 等
3、操作系统,例如,Linux、MacOS、Windows 等
JVM启动参数
请把你的JVM启动参数完整的复制出来
配置文件
请把你的配置文件内容完整的复制出来
异常堆栈
请把程序的错误栈信息完整的复制出来
我在统计 spring getbean
方法和 doGetBean
方法的执行时间, 测试了几次后发现 getBean 方法log 行数比实际的方法调用下少很多(实际 500+ bean, 但是只打印出 10+ 行log), doGetBean 方法就完全没有任何 log
log 详见下面的 methodEnter 方法. 我把这个项目的代码读了几遍, 没看出问题点, 麻烦帮忙看下~~
#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=org.springframework.context.support;org.springframework.beans.factory.support.DefaultListableBeanFactory
#不需要监控的package,可配置多个,用英文';'分隔
ExcludePackages=cn.perf4j.demo.[p4,p5,p6]
#可配置多个方法名,用英文';'分隔
ExcludeMethods=equals;hash
#是否排除私有方法,true/false
ExcludePrivateMethod=true
#通用的方法执行时间阈值,单位为ms
ProfilingTimeThreshold=0
#在一个时间片内,超过方法执行时间阈值的次数,仅在RecorderMode=accurate时有效
ProfilingOutThresholdCount=1
protected void onMethodEnter() {
if (profiling()) {
maintainer.addRecorder(methodTagId, profilingConfig.getProfilingParam(innerClassName + "/" + methodName));
mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false);
startTimeIdentifier = newLocal(Type.LONG_TYPE);
mv.visitVarInsn(LSTORE, startTimeIdentifier);
//Logger.info("before entering method: " + methodName);
Logger.info(String.format("before entering method: %s.%s", innerClassName, methodName));
}
}
Telegraf运行时报错
2018-10-17T11:09:07Z E! Error in plugin [inputs.tail]: took longer to collect than collection interval (5s)
不知道什么问题
When high throughout. I think this will be a bottleneck.
参数加到jvm启动参数中启动不了,求解
export JAVA_OPTS=“-javaagent:/tmp/MyPerf4J/MyPerf4J-ASM.jar -DMyPerf4JPropFile=/tmp/MyPerf4J/myPerf4J.properties”
描述一下统计出接口的RPS、Avg、Min、Max、StdDev、TP90、TP95、TP99、TP999等性能指标
at cn.myperf4j.asm.aop.ProfilingTransformer.getBytes(ProfilingTransformer.java:56)
at cn.myperf4j.asm.aop.ProfilingTransformer.transform(ProfilingTransformer.java:37)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:424)
2018-11-21 10:38:28.462 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@1c4a1bda, XXService, classBeingRedefined, protectionDomain, 3014)...
at java.lang.ClassLoader.defineClass1(Native Method)
请问 为什么oldGCount - lastOldGcCount 被定义成 fullGcCount 而不是oldGcCount?
JvmGcMetrics jvmGcMetrics = new JvmGcMetrics(
youngGcCount - lastYoungGcCount,
youngGcTime - lastYoungGcTime,
oldGCount - lastOldGcCount,
oldGcTime - lastOldGcTime);
public JvmGcMetrics(long youngGcCount, long youngGcTime, long fullGcCount, long fullGcTime) {
this.youngGcCount = youngGcCount;
this.youngGcTime = youngGcTime;
this.avgYoungGcTime = youngGcCount > 0L ? ((double) youngGcTime) / youngGcCount : 0D;
this.fullGcCount = fullGcCount;
this.fullGcTime = fullGcTime;
}
环境
centos7.2
jdk1.8
tomcat8.5.39
异常
2019-03-29 17:47:21.689 [MyPerf4J] ERROR ProfilingTransformer.transform(ParallelWebappClassLoader^M
context: system^M
delegate: false^M
----------> Parent Classloader:^M
java.net.URLClassLoader@3581c5f3^M
, org/apache/xerces/impl/Constants, null, protectionDomain, 8957) Type org/apache/xerces/impl/Constants$ArrayEnumeration not present
java.lang.TypeNotPresentException: Type org/apache/xerces/impl/Constants$ArrayEnumeration not present
at org.shaded.objectweb.asm.ClassWriter.getCommonSuperClass(ClassWriter.java:951)
at org.shaded.objectweb.asm.SymbolTable.addMergedType(SymbolTable.java:1209)
at org.shaded.objectweb.asm.Frame.merge(Frame.java:1293)
at org.shaded.objectweb.asm.Frame.merge(Frame.java:1238)
at org.shaded.objectweb.asm.MethodWriter.computeAllFrames(MethodWriter.java:1613)
at org.shaded.objectweb.asm.MethodWriter.visitMaxs(MethodWriter.java:1549)
at org.shaded.objectweb.asm.MethodVisitor.visitMaxs(MethodVisitor.java:773)
at org.shaded.objectweb.asm.commons.LocalVariablesSorter.visitMaxs(LocalVariablesSorter.java:148)
at org.shaded.objectweb.asm.ClassReader.readCode(ClassReader.java:2429)
at org.shaded.objectweb.asm.ClassReader.readMethod(ClassReader.java:1275)
at org.shaded.objectweb.asm.ClassReader.accept(ClassReader.java:679)
at org.shaded.objectweb.asm.ClassReader.accept(ClassReader.java:391)
at cn.myperf4j.asm.aop.ProfilingTransformer.getBytes(ProfilingTransformer.java:57)
at cn.myperf4j.asm.aop.ProfilingTransformer.transform(ProfilingTransformer.java:37)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2401)
at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:859)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1185)
at org.apache.xerces.impl.dtd.XMLDTDValidator.validate(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
问题描述
telegraf配置文件和我从官网下载最新一致,导致无法读取metrics
官网的配置文件没有这个
[[inputs.tail]]
files = ["/data/logs/MyPerf4J/metrics.log"]
from_beginning = false
pipe = false
watch_method = "inotify"
data_format = "influx"
我把这块加上,启动直接报错。
运行环境
1、JDK 版本号,例如,JDK7、JDK8 等
2、运行容器和框架,例如,Tomcat、PlainJava、Spring、SpringBoot 等
3、操作系统,例如,Linux、MacOS、Windows 等
JVM启动参数
请把你的JVM启动参数完整的复制出来
配置文件
请把你的配置文件内容完整的复制出来
异常堆栈
请把程序的错误栈信息完整的复制出来
[root@test logs]# /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
2018-08-23 13:37:16.436 [MyPerf4J] ERROR AbstractBootstrap.initPerfStatsProcessor()
java.lang.ClassNotFoundException: cn.myperf4j.ext.psp.DefaultLoggerProcessor
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at cn.myperf4j.core.AbstractBootstrap.initPerfStatsProcessor(AbstractBootstrap.java:225)
at cn.myperf4j.core.AbstractBootstrap.doInitial(AbstractBootstrap.java:78)
at cn.myperf4j.core.AbstractBootstrap.initial(AbstractBootstrap.java:33)
at cn.myperf4j.asm.PreMain.premain(PreMain.java:13)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
2018-08-23 13:37:16.482 [MyPerf4J] ERROR AbstractBootstrap initPerfStatsProcessor() FAILURE!!!
2018-08-23 13:37:16.482 [MyPerf4J] ERROR AbstractBootstrap doInitial() FAILURE!!!
这个是堆栈异常
java -javaagent:D:\MyPerf4J\MyPerf4J-ASM.jar -DMyPerf4JPropFile=D:\MyPerf4J\myPerf4J.properties -jar hk8700-1.3.0.jar
2018-11-08 10:01:32.504 [MyPerf4J] WARN profilingParamFile is empty!
2018-11-08 10:01:32.522 [MyPerf4J] INFO
__ ___ ____ ______ __ __
/ |/ /_ / __ _ __/ / // / / /
/ /|/ / / / / // / _ / / // // / / /
/ / / / // / / __/ / / / __/ // /
// //_, // _// // // _/
/____/
2018-11-08 10:01:32.522 [MyPerf4J] INFO AbstractBootstrap doInitial() SUCCESS!!!
2018-11-08 10:01:32.561 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@18b4aac2, com/elink/estos/api/bootstrap/Bootstrap8700, classBeingRedefined, protectionDomain, 1332)...
2018-11-08 10:01:32.586 [MyPerf4J] ERROR ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@18b4aac2, com/elink/estos/api/bootstrap/Bootstrap8700, null, ProtectionDomain (file:/D:/Users/30451/Documents/estos-api4/hk8700/target/hk8700-1.3.0.jar )
sun.misc.Launcher$AppClassLoader@18b4aac2
java.security.Permissions@17a7cec2 (
("java.io.FilePermission" "\D:\Users\30451\Documents\estos-api4\hk8700\target\hk8700-1.3.0.jar" "read")
("java.lang.RuntimePermission" "exitVM")
)
, 1332)
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.(Unknown Source)
at org.objectweb.asm.ClassReader.(Unknown Source)
at cn.myperf4j.asm.aop.ProfilingTransformer.getBytes(ProfilingTransformer.java:54)
at cn.myperf4j.asm.aop.ProfilingTransformer.transform(ProfilingTransformer.java:37)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
2018-11-08 10:01:32.693 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@18b4aac2, com/elink/common/utils/PropertiesLoader, classBeingRedefined, protectionDomain, 5941)...
2018-11-08 10:01:32.695 [MyPerf4J] ERROR ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@18b4aac2, com/elink/common/utils/PropertiesLoader, null, ProtectionDomain (file:/D:/Users/30451/Documents/estos-api4/hk8700/target/hk8700-1.3.0.jar )
sun.misc.Launcher$AppClassLoader@18b4aac2
java.security.Permissions@17a7cec2 (
("java.io.FilePermission" "\D:\Users\30451\Documents\estos-api4\hk8700\target\hk8700-1.3.0.jar" "read")
("java.lang.RuntimePermission" "exitVM")
)
, 5941)
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.(Unknown Source)
at org.objectweb.asm.ClassReader.(Unknown Source)
at cn.myperf4j.asm.aop.ProfilingTransformer.getBytes(ProfilingTransformer.java:54)
at cn.myperf4j.asm.aop.ProfilingTransformer.transform(ProfilingTransformer.java:37)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.elink.estos.api.bootstrap.Bootstrap8700.(Bootstrap8700.java:22)
start hk8700 server
2018-11-08 10:01:32.736 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@18b4aac2, com/elink/common/utils/FileUtils, classBeingRedefined, protectionDomain, 14416)...
2018-11-08 10:01:32.737 [MyPerf4J] ERROR ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader@18b4aac2, com/elink/common/utils/FileUtils, null, ProtectionDomain (file:/D:/Users/30451/Documents/estos-api4/hk8700/target/hk8700-1.3.0.jar )
sun.misc.Launcher$AppClassLoader@18b4aac2
java.security.Permissions@17a7cec2 (
("java.io.FilePermission" "\D:\Users\30451\Documents\estos-api4\hk8700\target\hk8700-1.3.0.jar" "read")
("java.lang.RuntimePermission" "exitVM")
)
, 14416)
java.lang.IllegalArgumentException
at org.objectweb.asm.ClassReader.(Unknown Source)
at org.objectweb.asm.ClassReader.(Unknown Source)
at cn.myperf4j.asm.aop.ProfilingTransformer.getBytes(ProfilingTransformer.java:54)
at cn.myperf4j.asm.aop.ProfilingTransformer.transform(ProfilingTransformer.java:37)
at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at com.elink.estos.api.bootstrap.Bootstrap8700.main(Bootstrap8700.java:28)
配置文件信息
#应用名称
AppName=MyPerf4JTest
#MetricsProcessor类型,0:以标准格式化结构输出到stdout.log 1:以标准格式化结构输出到磁盘 2:以InfluxDB LineProtocol格式输出到磁盘
MetricsProcessorType=1
#配置各个Metrics日志的文件路径,可不配置
MethodMetricsFile=D:\MyPerf4J\method_metrics.log
#ClassMetricsFile=/data/logs/MyPerf4J/class_metrics.log
#GCMetricsFile=/data/logs/MyPerf4J/gc_metrics.log
#MemMetricsFile=/data/logs/MyPerf4J/memory_metrics.log
ThreadMetricsFile=D:\MyPerf4J\thread_metrics.log
#配置日志文件滚动时间间隔,分别有MINUTELY、HOURLY和DAILY三个值
LogRollingTimeUnit=HOURLY
#配置备份Recorders的数量,默认为1,最小为1,最大为8,当需要在较小MillTimeSlice内统计大量方法性能数据时可配置大一些
BackupRecordersCount=1
#配置Record模式,可配置为accurate/rough
RecorderMode=accurate
#配置时间片,单位为ms,最小1s,最大600s
MilliTimeSlice=10000
#是否展示方法参数类型
ShowMethodParams=true
#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=com.elink
#不需要监控的package,可配置多个,用英文';'分隔
ExcludePackages=org.spring;
#可配置多个方法名,用英文';'分隔
ExcludeMethods=equals;hash
#是否排除私有方法,true/false
ExcludePrivateMethod=true
#通用的方法执行时间阈值,单位为ms
ProfilingTimeThreshold=1000
#在一个时间片内,超过方法执行时间阈值的次数,仅在RecorderMode=accurate时有效
ProfilingOutThresholdCount=10
###配置文件MyPerf4j.properties###
#应用名称
AppName=MyPerf4jTest
#InfluxDB
MetricsProcessorType=2
MethodMetricsFile=/data/logs/MyPerf4J/metrics.log
#ProfilingParamsFile=myPerf4J.profilingParams
#配置备份Recorders的数量,默认为1,最小为1,最大为8,当需要在较小MillTimeSlice内统计大量方法性能数据时可配置大一些
BackupRecordersCount=1
#配置Record模式,可配置为accurate/rough
RecorderMode=accurate
#配置时间片,单位为ms,最小1s,最大600s
MillTimeSlice=10000
#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=com.bamboo.demo;
#不需要监控的package,可配置多个,用英文';'分隔
ExcludePackages=org.spring;
#可配置多个方法名,用英文';'分隔
ExcludeMethods=equals;hash
#是否排除私有方法,true/false
ExcludePrivateMethod=true
#通用的方法执行时间阈值,单位为ms
ProfilingTimeThreshold=1000
#在一个时间片内,超过方法执行时间阈值的次数,仅在RecorderMode=accurate时有效
ProfilingOutThresholdCount=10
###配置文件telegraf.conf###
[global_tags]
dc = ""
[agent]
interval = "1s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "1s"
flush_jitter = "0s"
precision = "ms"
debug = false
quiet = false
logfile = "/tmp/telegraf.log"
hostname = ""
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://127.0.0.1:8086"]
database = "telegraf"
retention_policy = ""
write_consistency = "any"
timeout = "5s"
username = "admin"
password = "admin"
[[inputs.tail]]
files = ["/data/logs/MyPerf4J/metrics.log"]
from_beginning = false
pipe = false
watch_method = "inotify"
data_format = "influx"
使用 Method Metrics分析性能好像最小的时间单位是ms?当前导致如果方法执行时间不到1ms,显示的都是0ms。
long start = System.nanoTime() 和ProfilingAspect.profiling(start, methodId);
System.nanoTime() 应该在onMethodEnter调用 和
ProfilingAspect.profiling 应该在onMehtodExit中调用 对吧, 但是为啥找不到 求教
@Override
protected void onMethodEnter() {
if (profiling()) {
maintainer.addRecorder(methodTagId, profilingConfig.getProfilingParam(innerClassName + "/" + methodName));
mv.visitMethodInsn(INVOKESTATIC, "java/lang/System", "nanoTime", "()J", false);
startTimeIdentifier = newLocal(Type.LONG_TYPE);
mv.visitVarInsn(LSTORE, startTimeIdentifier);
}
}
@Override
protected void onMethodExit(int opcode) {
if (profiling() && ((IRETURN <= opcode && opcode <= RETURN) || opcode == ATHROW)) {
mv.visitVarInsn(LLOAD, startTimeIdentifier);
mv.visitLdcInsn(methodTagId);
mv.visitMethodInsn(INVOKESTATIC, PROFILING_ASPECT_INNER_NAME, "profiling", "(JI)V", false);
}
毕竟现在用mysql也挺多的,持久化以后可以自己做数据图表,便于跟踪性能优化的情况。最好配套建表sql语句。感谢!
你好 原理图都加载不出来了
这个真心挺牛逼的,但是要是将以前的项目加上MyPerf4J-ASM.jar,然后再写配置文件,略感工作量有点大。
于是,突发奇想,可以将MyPerf4J-ASM.jar放在tomcat下,全局生效。
我在tomcat/bin/catalina.sh文件中,配置如下
-javaagent:%cd%\..\lib\MyPerf4J-ASM.jar -DMyPerf4JPropFile=%cd%\..\conf\myPerf4J.properties
在tomcat/conf/myPerf4J.properties 写
`#配置PerfStatsProcessor,可不配置,用于自定义统计数据的处理
#PerfStatsProcessor=cn.perf4j.demo.MyPerfStatsProcessor
#配置备份Recorders的数量,默认为1,最小为1,最大为8,当需要在较小MillTimeSlice内统计大量方法性能数据时可配置大一些
BackupRecordersCount=1
#配置Record模式,可配置为accurate/rough
RecorderMode=accurate
#配置时间片,单位为ms,最小1s,最大600s
MillTimeSlice=10000
#需要监控的package,可配置多个,用英文';'分隔
IncludePackages=com.chinalife.sz
#不需要监控的package,可配置多个,用英文';'分隔
ExcludePackages=org.spring;
#可配置多个方法名,用英文';'分隔
ExcludeMethods=equals;hash
#是否排除私有方法,true/false
ExcludePrivateMethod=true
#通用的方法执行时间阈值,单位为ms
ProfilingTimeThreshold=1000
#在一个时间片内,超过方法执行时间阈值的次数,仅在RecorderMode=accurate时有效
ProfilingOutThresholdCount=10`
然后在tomcat/logs日志里,没找到MyPerf4J相关的信息
Bug 描述
添加attach后,启动程序时报linkedError
运行环境
1、JDK 版本号:jdk1.8.121
2、运行容器和框架:java main方法运行
3、操作系统:MacOS
配置文件
AppName=log4j2-test
MetricsProcessorType=1
MethodMetricsFile=/Users/lly/Desktop/log4j2-metric/method_metrics.log
ClassMetricsFile=/Users/lly/Desktop/log4j2-metric/class_metrics.log
GCMetricsFile=/Users/lly/Desktop/log4j2-metric/gc_metrics.log
MemMetricsFile=/Users/lly/Desktop/log4j2-metric/memory_metrics.log
BufPoolMetricsFile=/Users/lly/Desktop/log4j2-metric/buf_pool_metrics
ThreadMetricsFile=/Users/lly/Desktop/log4j2-metric/thread_metrics.log
FileDescMetricsFile=/Users/lly/Desktop/log4j2-metric/file_desc_metrics.log
CompilationMetricsFile=/Users/lly/Desktop/log4j2-metric/compilation_metrics.log
MethodMilliTimeSlice=1000
JvmMilliTimeSlice=1000
IncludePackages=org.apache.logging.log4j.core.;com.lmax.disruptor.;org.apache.logging.log4j.perf.single.*;cn.perf4j.demo1.[p1,p2,p3]
异常堆栈
2020-05-13 18:55:22.961 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/DatePrinter, classBeingRedefined, protectionDomain, 921)...
2020-05-13 18:55:22.962 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/Format, classBeingRedefined, protectionDomain, 1344)...
2020-05-13 18:55:22.963 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/FormatCache, classBeingRedefined, protectionDomain, 5222)...
2020-05-13 18:55:22.964 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/FastDatePrinter, classBeingRedefined, protectionDomain, 16230)...
2020-05-13 18:55:22.971 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/util/datetime/FastDateParser, classBeingRedefined, protectionDomain, 14553)...
2020-05-13 18:55:22.980 [MyPerf4J] INFO ProfilingTransformer.transform(sun.misc.Launcher$AppClassLoader, org/apache/logging/log4j/core/pattern/AnsiEscape, classBeingRedefined, protectionDomain, 6257)...
Exception in thread "main" java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "org/apache/logging/log4j/core/pattern/AnsiEscape"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.logging.log4j.core.pattern.HighlightConverter.(HighlightConverter.java:97)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.logging.log4j.core.pattern.PatternParser.createConverter(PatternParser.java:583)
at org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter(PatternParser.java:639)
at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:415)
at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:177)
at org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder.build(PatternLayout.java:377)
at org.apache.logging.log4j.core.layout.PatternLayout.(PatternLayout.java:129)
at org.apache.logging.log4j.core.layout.PatternLayout.(PatternLayout.java:59)
at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:660)
at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:517)
at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:958)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890)
at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890)
at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513)
at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
at org.apache.logging.log4j.core.async.AsyncLoggerContext.start(AsyncLoggerContext.java:76)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
at org.apache.logging.log4j.perf.Tester.main(Tester.java:39)
2018-08-01T06:14:00Z E! Error in plugin [inputs.tail]: E! Malformed log line in /******/mylogs.log: [01-08-2018 14:14:00 INFO MyPerfStatsProcessor:42 - RequestVars,Method=RequestVars.setRealPath RPS=0i,Avg=0.00,Min=0i,Max=0i,StdDev=0.00,Count=1i,TP50=0i,TP90=0i,TP95=0i,TP99=0i,TP999=0i,TP9999=0i,TP99999=0i,TP100=0i 1533104030000000000], Error: metric parse error: expected field at offset 19: "01-08-2018 14:14:00 INFO MyPerfStatsProcessor:42 - RequestVars,Method=RequestVars.setRealPath RPS=0i,Avg=0.00,Min=0i,Max=0i,StdDev=0.00,Count=1i,TP50=0i,TP90=0i,TP95=0i,TP99=0i,TP999=0i,TP9999=0i,TP99999=0i,TP100=0i 1533104030000000000\n"
telegraf 的influx格式log解析不成功
com.test 里面有类 a1.java,b1.java ,c1.java
IncludePackages 怎么监控到具体的类
IncludePackages = com.test.[a1.java,b1.java] 这样貌似行不动
首先诚挚地感谢每一位持续关注并使用 MyPerf4J 的朋友。我会持续投入,力图把 MyPerf4J 变得更好。
在此提交一条评论, 评论内容包括:
您可以参考下面的样例来提供您的信息:
* 组织:Boss直聘
* 网址:https://www.zhipin.com
* 地点:**北京
* 联系方式:[email protected]
* 场景:在生产环境中长期监控 Java 应用程序的性能指标
再次感谢你的参与!!!
林顺康
First of all, thanks sincerely for constantly using and supporting MyPerf4J. I will try my best to keep MyPerf4J better.
Please. submit a comment in this issue to include the following information:
You can refer to the following sample answer for the format:
* Orgnizatioin: Boss直聘
* Website: https://www.zhipin.com
* Location: Beijing, China
* Contact: [email protected]
* Purpose: Long-term monitoring of performance metrics for Java applications in a production environment
Thanks again for your participation!
LinShunKang
ExcludePackages 非必填参数, 当我不设置的这个参数的时候, 或者等于空, 会发生排除掉所有的package的情况
原因是这种情况下拿到的ExcludePackages 是空字符串, 并放到了excludePackage set中,
ProfilingFilter.isNotNeedInject的判断innerClassName.startsWith(prefix); // prefix == ""
, 就会排除掉所有的class了
ProfilingFilter 中 add 到相应set的判断需要改下
你想要的功能和某一个问题相关?请详细描述它。
应用GC很频繁但又没有好的手段快速准确定位问题
描述你想要的解决方式
类似https://github.com/Devexperts/aprof 监控对象分配热点便于优化GC
描述你所构想的解决方式
拦截构造器调用(可能不行,暂时没有好办法)
其他相关内容
类似Jprofiler的热点对象监控
Bug 描述
请清晰和简洁的描述你遇见的 bug
多个应用可否公用相同的日志文件?是否会冲突?
假设我有两个应用:AppName=tomcat00 AppName=tomcat01
两个应用的配置文件中:xxxxMetricsFile我都设置为一样,且只有一个配置文件中我设置日志的回滚,那么所有的“同一台主机”上的多个java应用公用一个日志文件,对于一台主机上有多个java app来说非常方便。
但是不知道这样会否导致冲突?
运行环境
1、JDK 版本号,例如,JDK7、JDK8 等
JDK8
2、运行容器和框架,例如,Tomcat、PlainJava、Spring、SpringBoot 等
Tomcat8 SpringBoot1、2
3、操作系统,例如,Linux、MacOS、Windows 等
配置文件
请把你的配置文件内容完整的复制出来
异常堆栈
请把程序的错误栈信息完整的复制出来
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.