-
Notifications
You must be signed in to change notification settings - Fork 8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix InMemoryMetricsRepository can't keep the last five minutes data problem and Improve read-write performance #1319
Fix InMemoryMetricsRepository can't keep the last five minutes data problem and Improve read-write performance #1319
Conversation
…s data problem and Improve read-write performance
@cdfive @sczyh30 @jasonjoo2010 let us move it quickly |
No change compared to previous one, right? |
I redeveloped it,It's pretty much the same. Had better review it again~ |
@Override | ||
protected boolean removeEldestEntry(Entry<Long, MetricEntity> eldest) { | ||
// Metric older than {@link #MAX_METRIC_LIVE_TIME_MS} will be removed. | ||
return eldest.getKey() < System.currentTimeMillis() - MAX_METRIC_LIVE_TIME_MS; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh i notice it this time that System.currentTimeMillis
should better be replaced into TimeUtil
for better performance.
|
||
private ReentrantReadWriteLock readWriteLock = new ReentrantReadWriteLock(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It should be a final
variable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
readWriteLock
here will be escape?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
readWriteLock
here will be escape?
I'm sorry i don't understand what you mean. Adding final is unnecessary or there's any reason? Just an instance final variable which can't change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Haha, jason is a man who is very precise and detail oriented! If the readWriteLock
add final decoration, then is theallMetrics
variable also needed? Since they are both private, I think it's ok : )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
readWriteLock
here will be escape?I'm sorry i don't understand what you mean. Adding final is unnecessary or there's any reason? Just an instance final variable which can't change.
我的意思是你想通过final关键字确保readWriteLock
不会发对象逃逸吗。 readWriteLock
是InMemoryMetricsRepository的私有属性并且没有暴露给外部访问的接口(getter/setter) 应该是不会发生逃逸的和也不会被外部所修改。所以加final关键字目的是?
I mean what you want to make sure is 'readWriteLock' prevent escape by using the final keyword? readWriteLock
Is InMemoryMetricsRepository private property and not exposed to the external access interface (getter/setter) . So escape is not going to happen, and also not be modified by the external. So what is the purpose of adding the final keyword?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
readWriteLock
here will be escape?I'm sorry i don't understand what you mean. Adding final is unnecessary or there's any reason? Just an instance final variable which can't change.
我的意思是你想通过final关键字确保
readWriteLock
不会发对象逃逸吗。readWriteLock
是InMemoryMetricsRepository的私有属性并且没有暴露给外部访问的接口(getter/setter) 应该是不会发生逃逸的和也不会被外部所修改。所以加final关键字目的是?
I mean what you want to make sure is 'readWriteLock' prevent escape by using the final keyword?readWriteLock
Is InMemoryMetricsRepository private property and not exposed to the external access interface (getter/setter) . So escape is not going to happen, and also not be modified by the external. So what is the purpose of adding the final keyword?Yep just to promise the purpose and you can take it as a kind of "documentation" like
"I will not change anytime and every instance has a different one."
And maybe the compiler will replace it with fixed address but not variable sign when compiling.ok, may be It is better to stress that a lock is final, when it is globally unique and won't be modified.
Yeah it's just a manner but not any constraint. Don't forget the TimeUtil issue and do you have any further question on it? It may effect the performance i think. Then we can get it done this time, right? @cdfive
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep just to promise the purpose and you can take it as a kind of "documentation" like
"I will not change anytime and every instance has a different one."
And maybe the compiler will replace it with fixed address but not variable sign when compiling.
These two points are very precise, though not very sure which is better
and I found the line in CtSph
@jasonjoo2010 @linlinisme
private static final Object LOCK = new Object();
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep just to promise the purpose and you can take it as a kind of "documentation" like
"I will not change anytime and every instance has a different one."
And maybe the compiler will replace it with fixed address but not variable sign when compiling.These two points are very precise, though not very sure which is better
and I found the line inCtSph
@jasonjoo2010 @linlinismeprivate static final Object LOCK = new Object();
Whether we should qualify it as static
depends on actual design and InMemoryMetricsRepository
may need a per instance lock only. Though there may be only one instance in practice :)
And surely static final
is the gramma to declare a "constant" so it's a good practice to name it all upper cases with underscore between each pair of word.
As per instance final
both of styles is acceptable for me though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep just to promise the purpose and you can take it as a kind of "documentation" like
"I will not change anytime and every instance has a different one."
And maybe the compiler will replace it with fixed address but not variable sign when compiling.These two points are very precise, though not very sure which is better
and I found the line inCtSph
@jasonjoo2010 @linlinismeprivate static final Object LOCK = new Object();
Whether we should qualify it as static
depends on actual design and InMemoryMetricsRepository
may need a per instance lock only. Though there may be only one instance in practice :)
And surely static final
is the gramma to declare a "constant" so name it all upper cases with
Yep just to promise the purpose and you can take it as a kind of "documentation" like
"I will not change anytime and every instance has a different one."
And maybe the compiler will replace it with fixed address but not variable sign when compiling.These two points are very precise, though not very sure which is better
and I found the line inCtSph
@jasonjoo2010 @linlinismeprivate static final Object LOCK = new Object();
By the way we should speed up your design in another PR & issue because it's quite important maybe. I have make several proposals including the one based on yours :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
感谢Jason耐心详实的说明。
读到这里,我也分享个这周跟同事讨论的一个:
public class StringConcat {
public static void main(String[] args) {
String a = "hello2";
final String b = "hello";
String d = "hello";
String c = b + 2;
String e = d + 2;
System.out.println((a == c));
System.out.println((a == e));
}
}
By the way we should speed up your design in another PR & issue because it's quite important maybe.
赞同~ 希望两位大佬别太纠结加快一点速度。
// 哈哈!太注重细节~学习了: )
@sczyh30 手动召唤大佬围观
…llis() replace System.currentTimeMillis()
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Good job and thanks for contribution! |
* calculate process cpu usage to support application running in container environment * Enhance reliability and performance of InMemoryMetricsRepository (alibaba#1319) * Fix InMemoryMetricsRepository can't keep the last five minutes metrics data problem and Improve read-write performance * Use TimeUtil.currentTimeMillis() replace System.currentTimeMillis() for better performance * dashboard: Support setting value pattern for client IP and host in gateway flow rule dialog (alibaba#1325) * doc: Update JDK requirement of the dashboard in README.md (alibaba#1316) * Following discussions in alibaba#1315 * Add "web-context-unify" config in Spring WebMVC adapter to support "chain" relation flow strategy (alibaba#1328) * Fix the parsing issue in large post request for sentinel-transport-simple-http (alibaba#1255) * Add gateway adapter for Zuul 2.x (alibaba#1138) - also add demo for Zuul 2.x adapter * Polish code and demo of Sentinel Zuul 2.x adapter Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Polish code of transport command centers and heartbeat senders Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Polish logging SPI related code and add general JUL adapter for Logger SPI (alibaba#1338) * Move the legacy JUL methods from LogBase to BaseJulLogger. * Add a JavaLoggingAdapter as the general JUL adapter for the Logger SPI, which makes it convenient to use (as the default logger). * Add LoggerSpiProvider to resolve Logger SPI. * Polish the logback demo. Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Move CommandCenterLog to sentinel-transport-common and polish related code (alibaba#1341) Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Polish placeholders in logging content to slf4j convention (alibaba#1342) * Polish placeholders in logging content to "{}" Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Fix timezone problem of sentinel-block.log Signed-off-by: Eric Zhao <sczyh16@gmail.com> * dashboard: Fix NoNodeException problem of FlowRuleZookeeperProvider example (alibaba#1352) * Introduce logging extension: slf4j (alibaba#1344) * Regroup packages related to logging into a separate module and polish document (alibaba#1355) * Fix CI failure in JDK 11 environment (alibaba#1360) * Supplement missing javax.annotation-api to sentinel-cluster-server-envoy-rls and sentinel-demo-zuul2-gateway * Upgrade mockito-core to 2.28.2 (up to date) * Fix the bug that context was not released when blocked in Spring Web adapter (alibaba#1353) * Improve standard output message in LogBase (alibaba#1357) * Complete the unit tests for sentinel-logging-slf4j module (alibaba#1358) * refactor: Make the ProcessorSlot itself as SPI and deprecate legacy slot chain builder (alibaba#411) * Make slots loaded by SPI, mark all slots with @SpiOrder from -10000 to -1000, improve comment * Reserve gateway and param slot chain builder (just extends DefaultSlotChainBuilder) and mark them as @deprecated * Force modifyRule command handler to fail if an incompatible old fastjson found (alibaba#1377) * Note that this is only a temporary solution. * Set default log level of JDK logging to INFO and polish code of SpiLoader (alibaba#1365) * Improve log info in SpiLoader, improve comment and test case * Use error level in catch block, init ArrayList with capacity and improve add item to list * doc: Polish README.md of sentinel-cluster-server-envoy-rls module Signed-off-by: Eric Zhao <sczyh16@gmail.com> * dashboard: Hide advanced options in flow rule dialog when cluster mode is enabled (alibaba#1367) * doc: Update README.md Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Update fastjson to 1.2.68 Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Bump version to 1.7.2 Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Fix the bug of extracting request cookie in Spring Cloud Gateway adapter (alibaba#1400) * Bump version to 1.8.0-SNAPSHOT Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Add JAX-RS adapter (alibaba#1396) * Fix the bug of misplaced locks in ContextUtil and ClusterNode (alibaba#1429) - which may lead to IllegalMonitorStateException in unlock() when unchecked error occurs during lock() * fix: Tracer does not trace exception to DefaultNode (alibaba#1068) * Support setting project.name via the properties file and deprecate legacy config path (alibaba#1412) * Update resolving logic of project name and polish SentinelConfig (alibaba#1437) Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Refactor the mechanism of recording error in Entry and StatisticSlot * Also polish related complete callbacks Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Polish Tracer with entry.setError(ex) mechanism Signed-off-by: Eric Zhao <sczyh16@gmail.com> * dashboard: Remove duplicate code in MetricEntity (alibaba#1441) * dashboard: Fix the bug that cookie may have conflict with web applications under the same domain (alibaba#1443) * Improve deprecated ParameterMetric purge mechanism (alibaba#1372) * Clear useless data in ParameterMetric for all removed rules * Polish code comments of the fundamental Sph/SphO/SphU class Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Add OkHttp integration (alibaba#1456) * dashboard: Fix historical version compatibility problem for auth check via localStorage (alibaba#1473) * Add exceptionPredicate in Tracer for customized exception filtering logic (alibaba#1496) * test: Add test cases for Tuple2 (alibaba#1501) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Add support for extracting param from complex object (alibaba#1491) * This could enable specified parameter flow control for customized objects. * Support setting class-level defaultFallback for annotation extension (alibaba#1493) * Add unit test for logging/TokenBucket (alibaba#1504) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Fix sentinel-apache-dubbo-adapter full GC bug (alibaba#1431) * Polish RocketMQ PullConsumerDemo to make code clear (alibaba#1528) * Add unit test for cluster/FlowResponseDataDecoder (alibaba#1514) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Improve consumer filter of Dubbo 2.6.x and 2.7.x adapter (alibaba#1532) * entry and exit with params in consumer filter * Polish sentinel-opensource-eco-landscape-en.png Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Add annotation extension for Java EE CDI (alibaba#1541) * Add Sentinel annotation and JAX-RS plugins for Quarkus (alibaba#1542) * Add sentinel-quarkus-adapter module, which provides sentinel-annotation-quarkus-adapter and sentinel-jax-rs-quarkus-adapter to adapt sentinel-annotation-cdi-interceptor and sentinel-jax-rs-adapter for Quarkus. It also provides sentinel-native-image-quarkus-adapter to support running Sentinel with Quarkus in native image mode. * Polish document and code of Sentinel annotation CDI extension Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Upgrade fastjson to 1.2.71 (alibaba#1545) * Add file.encoding JVM args in maven-surefire-plugin to avoid charset problem (alibaba#1550) * Add annotation CDI demo and Quarkus adapter demo (alibaba#1543) * Polish document and rearrange package for Quarkus and JAX-RS adapter Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Support customized origin parser in legacy Dubbo 2.6.x adapter (alibaba#1555) * Add Eureka data-source extension (alibaba#1502) * Upgrade nacos-client version to 1.3.0 in sentinel-datasource-nacos (alibaba#1576) * demo: Update slot chain SPI demo (alibaba#1581) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Add explicit null checking for charset in SimpleHttpClient#encodeRequestParams (alibaba#1589) * Adapter: Support Apache HttpClient (alibaba#1455) Introduce support through a customized client builder `SentinelApacheHttpClientBuilder`. * doc: Fix mistakes in README.md of sentinel-zuul-adapter (alibaba#1593) * Fix incorrect protocol description in FlowRequestData writer/decoder (alibaba#1607) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Refactor config mechanism for OkHttp adapter and polish related code - One config per interceptor instead of the global config - Polish document and demo Signed-off-by: Eric Zhao <sczyh16@gmail.com> * test: Add unit test for sentinel-cluster-server and polish code (alibaba#1529) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Refactor degrade hierarchy with new circuit breaker mechanism and improve strategy * Add `CircuitBreaker` abstraction (with half-open state) and add circuit breaker state change event observer support. * Improve circuit breaking strategy (avg RT → slow request ratio) and make statistics of each rule dependent (to support arbitrary statistic interval). * Add simple "trial" mechanism (aka. half-open). * Refactor mechanism of metric recording and state change handling for circuit breakers: record RT and error when requests have completed (i.e. `onExit`, based on alibaba#1420). Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Update test cases for circuit breaking Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Update demo for circuit breaking (DegradeRule) Signed-off-by: Eric Zhao <sczyh16@gmail.com> * test: Update test cases with new degrade mechanism in sentinel-demo-quarkus Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Remove deprecated passCheck() in Rule and polish interface Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Polish cluster flow control demo: add port in Nacos address (alibaba#1655) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Polish boolean checking in test cases and dashboard (alibaba#1664) * Remove unused code in TokenServerHandler#channelActive (alibaba#1667) Signed-off-by: cj <power4j@outlook.com> * Optimize the order of slots in ProcessorSlot SPI config (alibaba#1649) * Fix the bug of circuit breaker half-open state transformation when request is blocked by upcoming rules (alibaba#1645) * Refactor the workflow to fix the bug that circuit breaker may remain half-open state forever when the request is blocked by upcoming rules: revert the state change in exit handler (as a temporary workaround) * Add exit handler in Entry as a per-invocation hook. * Polish CircuitBreaker interface and update comments - Only carry context in tryPass/onComplete method (this might be generic in upcoming versions) Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Refactor exit handler mechanism of Entry - Rename: whenComplete -> whenTerminate - Execute the exit handler directly after the onExit hook of all slots Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Add extended interface for metric extension hook to support distinguishing traffic type (alibaba#1665) - Add EntryType args to all hook methods * dashboard: Refactor degrade service/controller and adapt to new features Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Polish Dubbo 2.6.x adapter and unify callback registry into DubboAdapterGlobalConfig (alibaba#1572) * Unify Dubbo callback registry (for fallback and origin parser) into DubboAdapterGlobalConfig * Polish default fallback implementation (wrap exception with RpcResult rather than directly throw it out) Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Refactor extended MetricExtension interface (matching events in Sentinel) - Unify the extended interface as a few event handlers: onPass, onBlocked, onComplete and onError - Polish related code Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Support customized origin parser in Apache Dubbo 2.7.x adapter and unify config (alibaba#1617) * Support customized origin parser in Apache Dubbo 2.7.x adapter * Unify Dubbo callback registry (for fallback and origin parser) into DubboAdapterGlobalConfig * Polish default fallback implementation (wrap exception with RpcResult rather than directly throw it out) * Polish code and README.md of sentinel-datasource-eureka Signed-off-by: Eric Zhao <sczyh16@gmail.com> * webmvc-adapter: improve to avoid ErrorEntryFreeException (alibaba#1533) If entry already exists in request just skip creation. * adapter: Add test cases for Spring WebFlux HandlerFunction (alibaba#1678) * Add RuntimeException converting method in BlockException and polish logic for validation Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Fix NPE bug and improve default fallback in Dubbo 2.7.x adapter - Fix NPE bug in consumer filter (when non-biz error occurred) - Improve default fallback in Dubbo 2.7.x adapter: convert the BlockException to a simple RuntimeException (with necessary message) - Polish code and comments Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Improve compatibility for dispatched servlet request in Spring Web adapter (alibaba#1681) * Bump version to 1.8.0 Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Update README.md Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Bump version to 1.8.1-SNAPSHOT Signed-off-by: Eric Zhao <sczyh16@gmail.com> * Fix typo in CircuitBreakingIntegrationTest (alibaba#1688) Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Pre-calculate intervalInSecond in LeapArray to reduce redundant calculation (alibaba#1700) * doc: Fix typo in code comments (alibaba#1721) * Solve the URI fetching bug in sentinel-zuul-adapter alibaba#1109 (alibaba#1605) Use `getRequestURI` instead of `getServletPath` to get URI of current request(Both in prefix and regex matching). * Fix NPE bug when updating gateway flow rules before the route/API has been requested once (alibaba#1729) * Make NettyTransportClient.getCurrentId() thread safe (alibaba#1707) Fix issue alibaba#1705. - Use CAS to make it thread safe and limited in the declared range. Signed-off-by: cj <power4j@outlook.com> * Add attributes of cluster concurrency limiting in ClusterFlowConfig Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Add concurrency token request/release operation in TokenService Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Add basic cluster concurrency limiting impl in token server module Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * Add unit tests for cluster concurrent limiting checker Signed-off-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> * doc: Fix content in README.md of sentinel-dashboard (alibaba#1737) * Fix the dependency conflict issue * Optimize logging statements using placeholder (alibaba#1736) * Optimize logging statements using placeholder to avoid unnecessary concatenation (issue alibaba#1735) * Polish document and name of parameter (alibaba#1738) - doc: Fix a typo in description of booting options for sentinel-dashboard - Fix mismatched name of parameter to its comment for VersionUtils.parseVersion() * Fix potential concurrency issue when updating flow rules (alibaba#1783) * test: Fix overrunning test `FlowRuleManagerTest.testLoadAndGetRules` (alibaba#1823) Signed-off-by: Jason Joo <hblzxsj@163.com> * Improve default block fallback logic in Dubbo 2.6.x adapter to avoid serialization problem (alibaba#1794) - convert BlockException to a simple RuntimeException (with necessary message) * Fix the problem that requests will never be blocked when slowRatioThreshold = 100% (alibaba#1779) * CI: Polish dependencies for ARM64 and add ARM64 job to Travis CI (alibaba#1765) 1. Added ARM64 architecture in .travis.yml 2. Updated 'embedded-consul' version to 2.2.0, 'consul-api' version to 1.4.5 for ARM64 support. 3. Updated grpc.version for 'io.grpc:protoc-gen-grpc-java' to 1.30.2, for ARM64 support. Signed-off-by: odidev <odidev@puresoftware.com> * [feat alibaba#1839]: Make dashboard support deploying under subpath (alibaba#1851) * dashboard: Add statIntervalMs field in DegradeRule dialog (alibaba#1781) Co-authored-by: tianhao <tianhao@kuaishou.com> Co-authored-by: jy2156121 <zry11@163.com> Co-authored-by: Olof <olof.nord@tutanota.com> Co-authored-by: cdfive <31885791+cdfive@users.noreply.github.com> Co-authored-by: Jason Joo <hblzxsj@163.com> Co-authored-by: tao.zhang <waves_Max@163.com> Co-authored-by: Eric Zhao <sczyh16@gmail.com> Co-authored-by: WongTheo <61610981+WongTheo@users.noreply.github.com> Co-authored-by: 于玉桔 <zhaoyuguang@apache.org> Co-authored-by: Zhiguo.Chen <chenzhiguo@live.com> Co-authored-by: seasidesky <62706379+seasidesky@users.noreply.github.com> Co-authored-by: haifeng <haifeng_yang@163.com> Co-authored-by: johnli <joooohnli@gmail.com> Co-authored-by: zhenxianyimeng <1920405993@qq.com> Co-authored-by: pleasecheckhere2016 <707748808@qq.com> Co-authored-by: ZhiQiang Gu <43897640+yunfeiyanggzq@users.noreply.github.com> Co-authored-by: zechao zheng <15869103363@163.com> Co-authored-by: yangy <root@jcod3r.com> Co-authored-by: xiby <15555438336@163.com> Co-authored-by: iron_city <55343460+DogBaoBao@users.noreply.github.com> Co-authored-by: Bo <15528330581@163.com> Co-authored-by: HupJ <576811031@qq.com> Co-authored-by: Peine <peineliang@163.com> Co-authored-by: cj <jclazz@outlook.com> Co-authored-by: Bill Yip <yezaifei@163.com> Co-authored-by: liqiangz <liqiang.zjhz@gmail.com> Co-authored-by: mikawudi <mikawudi@qq.com> Co-authored-by: dani3lWong <danielw0ng@foxmail.com> Co-authored-by: cj <power4j@outlook.com> Co-authored-by: yunfeiyanggzq <yunfeiyang@buaa.edu.cn> Co-authored-by: Luke <gdjiegz@gmail.com> Co-authored-by: HelloCoCooo <46306510+HelloCoCooo@users.noreply.github.com> Co-authored-by: nickChenyx <nickChenyx@gmail.com> Co-authored-by: Weihua <vip_wangweihua@163.com> Co-authored-by: 王振广 <wzg923@126.com> Co-authored-by: Lynx <65679911+xierunzi@users.noreply.github.com> Co-authored-by: odidev <odidev@puresoftware.com> Co-authored-by: Brent <xuande@inspur.com>
…baba#1319) * Fix InMemoryMetricsRepository can't keep the last five minutes metrics data problem and Improve read-write performance * Use TimeUtil.currentTimeMillis() replace System.currentTimeMillis() for better performance
…s data problem and Improve read-write performance
Does this pull request fix one issue?
fix #1031 #1174
Describe how you did it
Rewrite java.util.LinkedHashMap#removeEldestEntry make sure only keep data in lastest five minutes.
Use ReentrantReadWriteLock to avoid ConcurrentModificationException problem
Describe how to verify it
com.alibaba.csp.sentinel.dashboard.repository.metric.InMemoryMetricsRepositoryTest
Special notes for reviews