当前位置: 首页 > 工具软件 > MyPerf4J > 使用案例 >

java接口性能监控工具_MyPerf4J一个极快的Java接口性能监控和统计工具

韩博简
2023-12-01

A extremely fast performance monitoring and statistics for Java code. Inspired by perf4j and TProfiler. Committed to becoming a performance monitoring

and statistics tool that can be used for a long time in a production environment!

Multilingual document

Background

I need a program that can measure the response time of method.

The existing statistics of perf4j cannot meet my needs.

Requirements

Statistics on the performance indicators of the method such as RPS, Avg, Min, Max, StdDev, TP50, TP90, TP95, TP99, TP999 and TP9999, etc.

It can be configured by properties.

Does not take up too much memory, does not affect the normal response of the program.

The processing of performance indicators can be customized, for example: log collection, reporting to log collection services, etc.

Memory

Prerequisites

There are 1024 interfaces on the service that need to be monitored.

Most of the response time of each interface is within 300ms, and there are 100 different response times larger than 300ms.

Non-core data structures occupy 2MB.

Rough Mode

Only record requests with response time less than 1000ms.

2 * 1024 * (1000 * 4B) + 2MB ≈ 10MB

Accurate Mode

Record all response times.

2 * 1024 * (300 * 4B + 100 * 90B) + 2MB ≈ 22MB

Benchmark

Test Platform

OS: macOS High Sierra 10.13.3

JDK: 1.8.0_161

JVM options: -server -Xmx4G -Xms4G -Xmn2G

CPU: Intel(R) Core(TM) i7-7920HQ CPU@3.10GHz

Test way

Run empty methods.

In order to avoid the performance degradation caused by the high competition of multiple threads due to the high execution speed of the empty method, eight empty methods are executed by polling, and then the RPS of the eight methods

is added to obtain the result.

The time slice is 10s, each press pauses for 20s, and executes System.gc();

MyPerf4J-ASM

Threads

Number of loops per thread

RPS

1

1000000000

13815816

2

1000000000

16199712

4

1000000000

33060632

8

1000000000

55981416

Summary

From the benchmark results

MyPerf4J-ASM can support 13.81 million method calls per second in a single thread. The average time per method call is 72.3ns, which can meet the requirements of most people, and does not affect the response time of the program

itself.

Reason for high performance

MyPerf4J-ASM modifies the bytecode of the class through the ASM framework, inserting two lines of methods before and after the method, without generating redundant objects, and not triggering any GC in the whole process of

the benchmark (except for the System.gc(); executed in the code).

Usage

Add VM options: -javaagent:/your/path/to/MyPerf4J-ASM-${MyPerf4J-version}.jar

Add VM options: -DMyPerf4JPropFile=/your/path/to/myPerf4J.properties, and add properties in /your/path/to/myPerf4J.properties

#configure RecordMode,accurate/rough

RecorderMode=accurate

#configure TimeSlice,time unit: ms,min:30s,max:600s

MillTimeSlice=60000

#configure packages,separated with ';'

IncludePackages=cn.perf4j;org.myperf4j

#configure packages,separated with ';'

ExcludePackages=org.spring;

#configure methods,separated with ';'

ExcludeMethods=equals;hash

#true/false

ExcludePrivateMethod=true

#General method execution time threshold in ms

ProfilingTimeThreshold=1000

#The number of times the method execution time threshold is exceeded in a time slice, valid only when RecorderMode=accurate

ProfilingOutThresholdCount=10复制代码

Execute command mvn clean package

Run your application

Performance Statistics

MyPerf4J Performance Statistics [2018-06-22 20:37:30, 2018-06-22 20:38:00]

Api[2/3] RPS Avg(ms) Min(ms) Max(ms) StdDev Count TP50 TP90 TP95 TP99 TP999 TP9999 TP99999 TP100

UserServiceImpl.getId1 90 4.31 4 8 0.08 2793 4 5 6 8 8 8 8 8

UserServiceImpl.getId2 90 0.00 0 0 0.00 2793 0 0 0 0 0 0 0 0复制代码

 类似资料: