You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by pe...@apache.org on 2018/08/20 03:09:31 UTC

[incubator-skywalking] branch 6.0 updated (c2df706 -> 77e5b65)

This is an automated email from the ASF dual-hosted git repository.

pengys pushed a change to branch 6.0
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git.


    from c2df706  Adjust documents.
     new ffece16  Indicator analysis test successfully.
     new d39b6ba  Merge branch '6.0' of https://github.com/apache/incubator-skywalking into 6.0
     new 77e5b65  Invoke the function in indicator to calculate result and persistent to storage.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 oap-server/server-core/pom.xml                     |   5 -
 .../server/core/analysis/DispatcherManager.java    |   9 ++
 .../generated/endpoint/EndpointAvgIndicator.java   |  27 ++--
 .../generated/endpoint/EndpointDispatcher.java     |   3 +-
 .../endpoint/EndpointPercentIndicator.java         |  25 ++--
 .../InstanceJvmCpuIndicator.java}                  |  64 ++++-----
 .../ServiceInstanceJVMCPUDispatcher.java}          |  20 ++-
 .../InstanceJvmGcTimeIndicator.java}               |  52 ++++---
 .../ServiceInstanceJVMGCDispatcher.java}           |  20 ++-
 .../InstanceJvmMemoryMaxIndicator.java}            |  52 ++++---
 .../ServiceInstanceJVMMemoryDispatcher.java}       |  29 ++--
 .../InstanceJvmMemoryPoolMaxIndicator.java}        |  52 ++++---
 .../ServiceInstanceJVMMemoryPoolDispatcher.java}   |  29 ++--
 .../{AvgIndicator.java => DoubleAvgIndicator.java} |  14 +-
 .../server/core/analysis/indicator/Indicator.java  |   2 +
 .../{AvgIndicator.java => LongAvgIndicator.java}   |   8 +-
 .../core/analysis/indicator/PercentIndicator.java  |  13 +-
 .../analysis/worker/IndicatorPersistentWorker.java |   5 +-
 .../oap/server/core/source/DetectPoint.java        |   7 +-
 .../oap/server/core/source/Endpoint.java           |   3 +-
 .../oap/server/core/source/EndpointRelation.java   |   5 +-
 .../oap/server/core/source/GCPhrase.java}          |   5 +-
 .../source/{Source.java => MemoryPoolType.java}    |   8 +-
 .../oap/server/core/source/RequestType.java        |   5 +-
 .../skywalking/oap/server/core/source/Scope.java   |   3 +-
 .../skywalking/oap/server/core/source/Service.java |  12 +-
 .../{Endpoint.java => ServiceInstanceJVMCPU.java}  |  12 +-
 .../{Endpoint.java => ServiceInstanceJVMGC.java}   |  14 +-
 ...Endpoint.java => ServiceInstanceJVMMemory.java} |  18 +--
 ...oint.java => ServiceInstanceJVMMemoryPool.java} |  18 +--
 ...AvgIndicator.java => TestLongAvgIndicator.java} |   4 +-
 .../oap/server/library}/util/TimeBucketUtils.java  |  11 +-
 oap-server/server-receiver-plugin/pom.xml          |   6 +
 .../pom.xml                                        |   8 --
 .../pom.xml                                        |   3 +-
 .../oap/server/receiver/jvm/module/JVMModule.java} |   6 +-
 .../receiver/jvm/provider/JVMModuleProvider.java}  |  15 +-
 .../provider/handler/JVMMetricsServiceHandler.java | 152 +++++++++++++++++++++
 ...ywalking.oap.server.library.module.ModuleDefine |   2 +-
 ...alking.oap.server.library.module.ModuleProvider |   2 +-
 .../handler/JVMMetricsServiceHandlerMainTest.java  |  60 +++-----
 .../src/test/resources/log4j2.xml                  |   0
 oap-server/server-starter/pom.xml                  |   5 +
 .../src/main/resources/application.yml             |   2 +
 .../ElasticSearchColumnTypeMappingTestCase.java    |   2 +-
 45 files changed, 465 insertions(+), 352 deletions(-)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{endpoint/EndpointAvgIndicator.java => serviceinstancejvmcpu/InstanceJvmCpuIndicator.java} (62%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{service/ServiceDispatcher.java => serviceinstancejvmcpu/ServiceInstanceJVMCPUDispatcher.java} (57%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{endpoint/EndpointAvgIndicator.java => serviceinstancejvmgc/InstanceJvmGcTimeIndicator.java} (68%)
 rename oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{service/ServiceDispatcher.java => serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java} (57%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{endpoint/EndpointAvgIndicator.java => serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java} (68%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{endpoint/EndpointDispatcher.java => serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java} (57%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{endpoint/EndpointAvgIndicator.java => serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java} (67%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/{endpoint/EndpointDispatcher.java => serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java} (57%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/{AvgIndicator.java => DoubleAvgIndicator.java} (76%)
 rename oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/{AvgIndicator.java => LongAvgIndicator.java} (88%)
 copy apm-collector/apm-collector-remote/collector-remote-define/src/main/java/org/apache/skywalking/apm/collector/remote/RoutingRule.java => oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java (88%)
 copy oap-server/{server-library/library-server/src/main/java/org/apache/skywalking/oap/server/library/server/ServerHandler.java => server-core/src/main/java/org/apache/skywalking/oap/server/core/source/GCPhrase.java} (90%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/{Source.java => MemoryPoolType.java} (87%)
 copy apm-collector/apm-collector-core/src/main/java/org/apache/skywalking/apm/collector/core/module/ModuleConfig.java => oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/RequestType.java (88%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/{Endpoint.java => ServiceInstanceJVMCPU.java} (74%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/{Endpoint.java => ServiceInstanceJVMGC.java} (74%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/{Endpoint.java => ServiceInstanceJVMMemory.java} (69%)
 copy oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/{Endpoint.java => ServiceInstanceJVMMemoryPool.java} (69%)
 rename oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/{TestAvgIndicator.java => TestLongAvgIndicator.java} (94%)
 copy {apm-collector/apm-collector-core/src/main/java/org/apache/skywalking/apm/collector/core => oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library}/util/TimeBucketUtils.java (86%)
 copy oap-server/server-receiver-plugin/{zipkin-receiver-plugin => skywalking-jvm-receiver-plugin}/pom.xml (95%)
 copy oap-server/server-receiver-plugin/{skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/module/RegisterModule.java => skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/module/JVMModule.java} (87%)
 copy oap-server/server-receiver-plugin/{skywalking-register-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/register/provider/RegisterModuleProvider.java => skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/JVMModuleProvider.java} (70%)
 create mode 100644 oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandler.java
 copy apm-collector/apm-collector-core/src/test/resources/META-INF/defines/test_define.define => oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine (92%)
 copy oap-server/{server-core => server-receiver-plugin/skywalking-jvm-receiver-plugin}/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider (91%)
 copy apm-collector/apm-collector-agent/agent-grpc/agent-grpc-provider/src/test/java/org/apache/skywalking/apm/collector/agent/grpc/provider/handler/mock/JVMMetricMock.java => oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandlerMainTest.java (63%)
 copy oap-server/server-receiver-plugin/{skywalking-register-receiver-plugin => skywalking-jvm-receiver-plugin}/src/test/resources/log4j2.xml (100%)


[incubator-skywalking] 02/03: Merge branch '6.0' of https://github.com/apache/incubator-skywalking into 6.0

Posted by pe...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pengys pushed a commit to branch 6.0
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git

commit d39b6baf3532a18f8057a52d267a0034d76baf15
Merge: ffece16 c2df706
Author: peng-yongsheng <80...@qq.com>
AuthorDate: Mon Aug 20 11:02:05 2018 +0800

    Merge branch '6.0' of https://github.com/apache/incubator-skywalking into 6.0

 README.md                                        | 4 ++++
 docs/en/concepts-and-designs/README.md           | 4 +---
 docs/en/concepts-and-designs/backend-overview.md | 3 +++
 docs/en/concepts-and-designs/trace-receiver.md   | 0
 4 files changed, 8 insertions(+), 3 deletions(-)


[incubator-skywalking] 03/03: Invoke the function in indicator to calculate result and persistent to storage.

Posted by pe...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pengys pushed a commit to branch 6.0
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git

commit 77e5b65b53482dafd9c6a796b784090f1b1cb98f
Author: peng-yongsheng <80...@qq.com>
AuthorDate: Mon Aug 20 11:09:24 2018 +0800

    Invoke the function in indicator to calculate result and persistent to storage.
---
 .../oap/server/core/analysis/worker/IndicatorPersistentWorker.java   | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorPersistentWorker.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorPersistentWorker.java
index dd140c8..1ac53e7 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorPersistentWorker.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/worker/IndicatorPersistentWorker.java
@@ -122,8 +122,11 @@ public class IndicatorPersistentWorker extends AbstractWorker<Indicator> {
     private void cacheData(Indicator input) {
         mergeDataCache.writing();
         if (mergeDataCache.containsKey(input)) {
-            mergeDataCache.get(input).combine(input);
+            Indicator indicator = mergeDataCache.get(input);
+            indicator.combine(input);
+            indicator.calculate();
         } else {
+            input.calculate();
             mergeDataCache.put(input);
         }
 


[incubator-skywalking] 01/03: Indicator analysis test successfully.

Posted by pe...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pengys pushed a commit to branch 6.0
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git

commit ffece1617ad90853f91a44d571f1b5ad75c3544b
Author: peng-yongsheng <80...@qq.com>
AuthorDate: Mon Aug 20 11:01:33 2018 +0800

    Indicator analysis test successfully.
---
 oap-server/server-core/pom.xml                     |   5 -
 .../server/core/analysis/DispatcherManager.java    |   9 ++
 .../generated/endpoint/EndpointAvgIndicator.java   |  27 ++--
 .../generated/endpoint/EndpointDispatcher.java     |   3 +-
 .../endpoint/EndpointPercentIndicator.java         |  25 ++--
 .../InstanceJvmCpuIndicator.java}                  |  64 ++++-----
 .../ServiceInstanceJVMCPUDispatcher.java}          |  20 ++-
 .../InstanceJvmGcTimeIndicator.java}               |  52 ++++---
 .../ServiceInstanceJVMGCDispatcher.java}           |  20 ++-
 .../InstanceJvmMemoryMaxIndicator.java}            |  52 ++++---
 .../ServiceInstanceJVMMemoryDispatcher.java}       |  29 ++--
 .../InstanceJvmMemoryPoolMaxIndicator.java}        |  52 ++++---
 .../ServiceInstanceJVMMemoryPoolDispatcher.java}   |  29 ++--
 .../{AvgIndicator.java => DoubleAvgIndicator.java} |  14 +-
 .../server/core/analysis/indicator/Indicator.java  |   2 +
 .../{AvgIndicator.java => LongAvgIndicator.java}   |   8 +-
 .../core/analysis/indicator/PercentIndicator.java  |  13 +-
 .../core/source/{Scope.java => DetectPoint.java}   |   4 +-
 .../oap/server/core/source/Endpoint.java           |   3 +-
 .../oap/server/core/source/EndpointRelation.java   |   5 +-
 .../core/source/{Scope.java => GCPhrase.java}      |   4 +-
 .../source/{Scope.java => MemoryPoolType.java}     |   4 +-
 .../core/source/{Scope.java => RequestType.java}   |   4 +-
 .../skywalking/oap/server/core/source/Scope.java   |   3 +-
 .../skywalking/oap/server/core/source/Service.java |  12 +-
 .../{Endpoint.java => ServiceInstanceJVMCPU.java}  |  12 +-
 .../{Endpoint.java => ServiceInstanceJVMGC.java}   |  14 +-
 ...Endpoint.java => ServiceInstanceJVMMemory.java} |  18 +--
 ...oint.java => ServiceInstanceJVMMemoryPool.java} |  18 +--
 ...AvgIndicator.java => TestLongAvgIndicator.java} |   4 +-
 .../oap/server/library/util/TimeBucketUtils.java   |  75 ++++++++++
 oap-server/server-receiver-plugin/pom.xml          |   6 +
 .../pom.xml                                        |   8 --
 .../{ => skywalking-jvm-receiver-plugin}/pom.xml   |  31 +----
 .../oap/server/receiver/jvm/module/JVMModule.java} |  18 +--
 .../receiver/jvm/provider/JVMModuleProvider.java   |  59 ++++++++
 .../provider/handler/JVMMetricsServiceHandler.java | 152 +++++++++++++++++++++
 ...ywalking.oap.server.library.module.ModuleDefine |  19 +++
 ...alking.oap.server.library.module.ModuleProvider |  19 +++
 .../handler/JVMMetricsServiceHandlerMainTest.java  | 137 +++++++++++++++++++
 .../src/test/resources/log4j2.xml                  |  31 +++++
 oap-server/server-starter/pom.xml                  |   5 +
 .../src/main/resources/application.yml             |   2 +
 .../ElasticSearchColumnTypeMappingTestCase.java    |   2 +-
 44 files changed, 778 insertions(+), 315 deletions(-)

diff --git a/oap-server/server-core/pom.xml b/oap-server/server-core/pom.xml
index ca6ac7a..5ffad8d 100644
--- a/oap-server/server-core/pom.xml
+++ b/oap-server/server-core/pom.xml
@@ -53,11 +53,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
-            <artifactId>apm-network</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
             <artifactId>apm-datacarrier</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
index 3579ad8..b8953c6 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/DispatcherManager.java
@@ -20,6 +20,10 @@ package org.apache.skywalking.oap.server.core.analysis;
 
 import java.util.*;
 import org.apache.skywalking.oap.server.core.analysis.generated.endpoint.EndpointDispatcher;
+import org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmcpu.ServiceInstanceJVMCPUDispatcher;
+import org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc.ServiceInstanceJVMGCDispatcher;
+import org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory.ServiceInstanceJVMMemoryDispatcher;
+import org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool.ServiceInstanceJVMMemoryPoolDispatcher;
 import org.apache.skywalking.oap.server.core.source.Scope;
 import org.slf4j.*;
 
@@ -35,6 +39,11 @@ public class DispatcherManager {
     public DispatcherManager() {
         this.dispatcherMap = new HashMap<>();
         this.dispatcherMap.put(Scope.Endpoint, new EndpointDispatcher());
+
+        this.dispatcherMap.put(Scope.ServiceInstanceJVMCPU, new ServiceInstanceJVMCPUDispatcher());
+        this.dispatcherMap.put(Scope.ServiceInstanceJVMGC, new ServiceInstanceJVMGCDispatcher());
+        this.dispatcherMap.put(Scope.ServiceInstanceJVMMemory, new ServiceInstanceJVMMemoryDispatcher());
+        this.dispatcherMap.put(Scope.ServiceInstanceJVMMemoryPool, new ServiceInstanceJVMMemoryPoolDispatcher());
     }
 
     public SourceDispatcher getDispatcher(Scope scope) {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
index 6763c08..bc28345 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
@@ -20,12 +20,13 @@ package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
 
 import java.util.*;
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.indicator.LongAvgIndicator;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
-import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -35,14 +36,16 @@ import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
 @IndicatorType
 @StreamData
 @StorageEntity(name = "endpoint_avg", builder = EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends AvgIndicator {
+public class EndpointAvgIndicator extends LongAvgIndicator {
 
     @Setter @Getter @Column(columnName = "id") private int id;
     @Setter @Getter @Column(columnName = "service_id") private int serviceId;
     @Setter @Getter @Column(columnName = "service_instance_id") private int serviceInstanceId;
 
     @Override public String id() {
-        return String.valueOf(id);
+        String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        return splitJointId;
     }
 
     @Override public int hashCode() {
@@ -52,7 +55,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return result;
     }
 
-
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -70,7 +72,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return true;
     }
 
-
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
@@ -116,13 +117,13 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
         @Override public EndpointAvgIndicator map2Data(Map<String, Object> dbMap) {
             EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-            indicator.setId((int)dbMap.get("id"));
-            indicator.setServiceId((int)dbMap.get("service_id"));
-            indicator.setServiceInstanceId((int)dbMap.get("service_instance_id"));
-            indicator.setSummation((long)dbMap.get("summation"));
-            indicator.setCount((int)dbMap.get("count"));
-            indicator.setValue((long)dbMap.get("value"));
-            indicator.setTimeBucket((long)dbMap.get("time_bucket"));
+            indicator.setId(((Number)dbMap.get("id")).intValue());
+            indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            indicator.setSummation(((Number)dbMap.get("summation")).longValue());
+            indicator.setCount(((Number)dbMap.get("count")).intValue());
+            indicator.setValue(((Number)dbMap.get("value")).longValue());
+            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
index 4f54a6b..7343625 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
@@ -29,7 +29,6 @@ import org.apache.skywalking.oap.server.core.source.Endpoint;
  */
 public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
 
-
     @Override public void dispatch(Endpoint source) {
         doEndpointAvg(source);
         doEndpointPercent(source);
@@ -45,6 +44,7 @@ public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
         indicator.combine(source.getLatency(), 1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
+
     private void doEndpointPercent(Endpoint source) {
         EndpointPercentIndicator indicator = new EndpointPercentIndicator();
 
@@ -55,4 +55,5 @@ public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
         indicator.combine(new org.apache.skywalking.oap.server.core.analysis.indicator.expression.BooleanBinaryMatch(), source.isStatus(), true);
         IndicatorProcess.INSTANCE.in(indicator);
     }
+
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
index 72a092a..e581434 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointPercentIndicator.java
@@ -20,12 +20,13 @@ package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
 
 import java.util.*;
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.indicator.PercentIndicator;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
-import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -42,7 +43,9 @@ public class EndpointPercentIndicator extends PercentIndicator {
     @Setter @Getter @Column(columnName = "service_instance_id") private int serviceInstanceId;
 
     @Override public String id() {
-        return String.valueOf(id);
+        String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        return splitJointId;
     }
 
     @Override public int hashCode() {
@@ -52,7 +55,6 @@ public class EndpointPercentIndicator extends PercentIndicator {
         return result;
     }
 
-
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -70,7 +72,6 @@ public class EndpointPercentIndicator extends PercentIndicator {
         return true;
     }
 
-
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
@@ -116,13 +117,13 @@ public class EndpointPercentIndicator extends PercentIndicator {
 
         @Override public EndpointPercentIndicator map2Data(Map<String, Object> dbMap) {
             EndpointPercentIndicator indicator = new EndpointPercentIndicator();
-            indicator.setId((int)dbMap.get("id"));
-            indicator.setServiceId((int)dbMap.get("service_id"));
-            indicator.setServiceInstanceId((int)dbMap.get("service_instance_id"));
-            indicator.setTotal((long)dbMap.get("total"));
-            indicator.setPercentage((int)dbMap.get("percentage"));
-            indicator.setMatch((long)dbMap.get("match"));
-            indicator.setTimeBucket((long)dbMap.get("time_bucket"));
+            indicator.setId(((Number)dbMap.get("id")).intValue());
+            indicator.setServiceId(((Number)dbMap.get("service_id")).intValue());
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            indicator.setTotal(((Number)dbMap.get("total")).longValue());
+            indicator.setPercentage(((Number)dbMap.get("percentage")).intValue());
+            indicator.setMatch(((Number)dbMap.get("match")).longValue());
+            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
similarity index 62%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
index 6763c08..cc19365 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/InstanceJvmCpuIndicator.java
@@ -16,16 +16,17 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmcpu;
 
 import java.util.*;
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.indicator.DoubleAvgIndicator;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
-import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -34,15 +35,16 @@ import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_avg", builder = EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends AvgIndicator {
+@StorageEntity(name = "instance_jvm_cpu", builder = InstanceJvmCpuIndicator.Builder.class)
+public class InstanceJvmCpuIndicator extends DoubleAvgIndicator {
 
     @Setter @Getter @Column(columnName = "id") private int id;
-    @Setter @Getter @Column(columnName = "service_id") private int serviceId;
     @Setter @Getter @Column(columnName = "service_instance_id") private int serviceInstanceId;
 
     @Override public String id() {
-        return String.valueOf(id);
+        String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        return splitJointId;
     }
 
     @Override public int hashCode() {
@@ -52,7 +54,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return result;
     }
 
-
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -61,7 +62,7 @@ public class EndpointAvgIndicator extends AvgIndicator {
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
+        InstanceJvmCpuIndicator indicator = (InstanceJvmCpuIndicator)obj;
         if (id != indicator.id)
             return false;
         if (getTimeBucket() != indicator.getTimeBucket())
@@ -70,42 +71,38 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return true;
     }
 
-
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
-        remoteBuilder.setDataLongs(0, getSummation());
-        remoteBuilder.setDataLongs(1, getValue());
-        remoteBuilder.setDataLongs(2, getTimeBucket());
+        remoteBuilder.setDataLongs(0, getTimeBucket());
 
+        remoteBuilder.setDataDoubles(0, getSummation());
+        remoteBuilder.setDataDoubles(1, getValue());
 
         remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getServiceId());
-        remoteBuilder.setDataIntegers(2, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(3, getCount());
+        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
+        remoteBuilder.setDataIntegers(2, getCount());
 
         return remoteBuilder;
     }
 
     @Override public void deserialize(RemoteData remoteData) {
 
-        setSummation(remoteData.getDataLongs(0));
-        setValue(remoteData.getDataLongs(1));
-        setTimeBucket(remoteData.getDataLongs(2));
+        setTimeBucket(remoteData.getDataLongs(0));
 
+        setSummation(remoteData.getDataDoubles(0));
+        setValue(remoteData.getDataDoubles(1));
 
         setId(remoteData.getDataIntegers(0));
-        setServiceId(remoteData.getDataIntegers(1));
-        setServiceInstanceId(remoteData.getDataIntegers(2));
-        setCount(remoteData.getDataIntegers(3));
+        setServiceInstanceId(remoteData.getDataIntegers(1));
+        setCount(remoteData.getDataIntegers(2));
     }
 
-    public static class Builder implements StorageBuilder<EndpointAvgIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmCpuIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmCpuIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", storageData.getId());
-            map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
@@ -114,15 +111,14 @@ public class EndpointAvgIndicator extends AvgIndicator {
             return map;
         }
 
-        @Override public EndpointAvgIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-            indicator.setId((int)dbMap.get("id"));
-            indicator.setServiceId((int)dbMap.get("service_id"));
-            indicator.setServiceInstanceId((int)dbMap.get("service_instance_id"));
-            indicator.setSummation((long)dbMap.get("summation"));
-            indicator.setCount((int)dbMap.get("count"));
-            indicator.setValue((long)dbMap.get("value"));
-            indicator.setTimeBucket((long)dbMap.get("time_bucket"));
+        @Override public InstanceJvmCpuIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmCpuIndicator indicator = new InstanceJvmCpuIndicator();
+            indicator.setId(((Number)dbMap.get("id")).intValue());
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            indicator.setSummation(((Number)dbMap.get("summation")).doubleValue());
+            indicator.setCount(((Number)dbMap.get("count")).intValue());
+            indicator.setValue(((Number)dbMap.get("value")).doubleValue());
+            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/ServiceInstanceJVMCPUDispatcher.java
similarity index 57%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/ServiceInstanceJVMCPUDispatcher.java
index 7452ccd..48df5b4 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmcpu/ServiceInstanceJVMCPUDispatcher.java
@@ -16,18 +16,30 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmcpu;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-import org.apache.skywalking.oap.server.core.source.Service;
+import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMCPU;
 
 /**
  * This class is auto generated. Please don't change this class manually.
  *
  * @author Observability Analysis Language code generator
  */
-public class ServiceDispatcher implements SourceDispatcher<Service> {
-    @Override public void dispatch(Service source) {
+public class ServiceInstanceJVMCPUDispatcher implements SourceDispatcher<ServiceInstanceJVMCPU> {
+    
+    @Override public void dispatch(ServiceInstanceJVMCPU source) {
+        doInstanceJvmCpu(source);
     }
 
+    private void doInstanceJvmCpu(ServiceInstanceJVMCPU source) {
+        InstanceJvmCpuIndicator indicator = new InstanceJvmCpuIndicator();
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setId(source.getId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getUsePercent(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmGcTimeIndicator.java
similarity index 68%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmGcTimeIndicator.java
index 6763c08..d2c7147 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/InstanceJvmGcTimeIndicator.java
@@ -16,16 +16,17 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc;
 
 import java.util.*;
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.indicator.LongAvgIndicator;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
-import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -34,15 +35,16 @@ import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_avg", builder = EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends AvgIndicator {
+@StorageEntity(name = "instance_jvm_gc_time", builder = InstanceJvmGcTimeIndicator.Builder.class)
+public class InstanceJvmGcTimeIndicator extends LongAvgIndicator {
 
     @Setter @Getter @Column(columnName = "id") private int id;
-    @Setter @Getter @Column(columnName = "service_id") private int serviceId;
     @Setter @Getter @Column(columnName = "service_instance_id") private int serviceInstanceId;
 
     @Override public String id() {
-        return String.valueOf(id);
+        String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        return splitJointId;
     }
 
     @Override public int hashCode() {
@@ -52,7 +54,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return result;
     }
 
-
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -61,7 +62,7 @@ public class EndpointAvgIndicator extends AvgIndicator {
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
+        InstanceJvmGcTimeIndicator indicator = (InstanceJvmGcTimeIndicator)obj;
         if (id != indicator.id)
             return false;
         if (getTimeBucket() != indicator.getTimeBucket())
@@ -70,7 +71,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return true;
     }
 
-
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
@@ -80,9 +80,8 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
 
         remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getServiceId());
-        remoteBuilder.setDataIntegers(2, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(3, getCount());
+        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
+        remoteBuilder.setDataIntegers(2, getCount());
 
         return remoteBuilder;
     }
@@ -95,17 +94,15 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
 
         setId(remoteData.getDataIntegers(0));
-        setServiceId(remoteData.getDataIntegers(1));
-        setServiceInstanceId(remoteData.getDataIntegers(2));
-        setCount(remoteData.getDataIntegers(3));
+        setServiceInstanceId(remoteData.getDataIntegers(1));
+        setCount(remoteData.getDataIntegers(2));
     }
 
-    public static class Builder implements StorageBuilder<EndpointAvgIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmGcTimeIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmGcTimeIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", storageData.getId());
-            map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
@@ -114,15 +111,14 @@ public class EndpointAvgIndicator extends AvgIndicator {
             return map;
         }
 
-        @Override public EndpointAvgIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-            indicator.setId((int)dbMap.get("id"));
-            indicator.setServiceId((int)dbMap.get("service_id"));
-            indicator.setServiceInstanceId((int)dbMap.get("service_instance_id"));
-            indicator.setSummation((long)dbMap.get("summation"));
-            indicator.setCount((int)dbMap.get("count"));
-            indicator.setValue((long)dbMap.get("value"));
-            indicator.setTimeBucket((long)dbMap.get("time_bucket"));
+        @Override public InstanceJvmGcTimeIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmGcTimeIndicator indicator = new InstanceJvmGcTimeIndicator();
+            indicator.setId(((Number)dbMap.get("id")).intValue());
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            indicator.setSummation(((Number)dbMap.get("summation")).longValue());
+            indicator.setCount(((Number)dbMap.get("count")).intValue());
+            indicator.setValue(((Number)dbMap.get("value")).longValue());
+            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java
similarity index 57%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java
index 7452ccd..c634b96 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmgc/ServiceInstanceJVMGCDispatcher.java
@@ -16,18 +16,30 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmgc;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-import org.apache.skywalking.oap.server.core.source.Service;
+import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMGC;
 
 /**
  * This class is auto generated. Please don't change this class manually.
  *
  * @author Observability Analysis Language code generator
  */
-public class ServiceDispatcher implements SourceDispatcher<Service> {
-    @Override public void dispatch(Service source) {
+public class ServiceInstanceJVMGCDispatcher implements SourceDispatcher<ServiceInstanceJVMGC> {
+
+    @Override public void dispatch(ServiceInstanceJVMGC source) {
+        doInstanceJvmGcTime(source);
     }
 
+    private void doInstanceJvmGcTime(ServiceInstanceJVMGC source) {
+    InstanceJvmGcTimeIndicator indicator = new InstanceJvmGcTimeIndicator();
+
+        indicator.setTimeBucket(source.getTimeBucket());
+        indicator.setId(source.getId());
+        indicator.setServiceInstanceId(source.getServiceInstanceId());
+        indicator.combine(source.getTime(), 1);
+        IndicatorProcess.INSTANCE.in(indicator);
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
similarity index 68%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
index 6763c08..c3e53cf 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/InstanceJvmMemoryMaxIndicator.java
@@ -16,16 +16,17 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory;
 
 import java.util.*;
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.indicator.LongAvgIndicator;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
-import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -34,15 +35,16 @@ import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_avg", builder = EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends AvgIndicator {
+@StorageEntity(name = "instance_jvm_memory_max", builder = InstanceJvmMemoryMaxIndicator.Builder.class)
+public class InstanceJvmMemoryMaxIndicator extends LongAvgIndicator {
 
     @Setter @Getter @Column(columnName = "id") private int id;
-    @Setter @Getter @Column(columnName = "service_id") private int serviceId;
     @Setter @Getter @Column(columnName = "service_instance_id") private int serviceInstanceId;
 
     @Override public String id() {
-        return String.valueOf(id);
+        String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        return splitJointId;
     }
 
     @Override public int hashCode() {
@@ -52,7 +54,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return result;
     }
 
-
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -61,7 +62,7 @@ public class EndpointAvgIndicator extends AvgIndicator {
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
+        InstanceJvmMemoryMaxIndicator indicator = (InstanceJvmMemoryMaxIndicator)obj;
         if (id != indicator.id)
             return false;
         if (getTimeBucket() != indicator.getTimeBucket())
@@ -70,7 +71,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return true;
     }
 
-
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
@@ -80,9 +80,8 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
 
         remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getServiceId());
-        remoteBuilder.setDataIntegers(2, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(3, getCount());
+        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
+        remoteBuilder.setDataIntegers(2, getCount());
 
         return remoteBuilder;
     }
@@ -95,17 +94,15 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
 
         setId(remoteData.getDataIntegers(0));
-        setServiceId(remoteData.getDataIntegers(1));
-        setServiceInstanceId(remoteData.getDataIntegers(2));
-        setCount(remoteData.getDataIntegers(3));
+        setServiceInstanceId(remoteData.getDataIntegers(1));
+        setCount(remoteData.getDataIntegers(2));
     }
 
-    public static class Builder implements StorageBuilder<EndpointAvgIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmMemoryMaxIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmMemoryMaxIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", storageData.getId());
-            map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
@@ -114,15 +111,14 @@ public class EndpointAvgIndicator extends AvgIndicator {
             return map;
         }
 
-        @Override public EndpointAvgIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-            indicator.setId((int)dbMap.get("id"));
-            indicator.setServiceId((int)dbMap.get("service_id"));
-            indicator.setServiceInstanceId((int)dbMap.get("service_instance_id"));
-            indicator.setSummation((long)dbMap.get("summation"));
-            indicator.setCount((int)dbMap.get("count"));
-            indicator.setValue((long)dbMap.get("value"));
-            indicator.setTimeBucket((long)dbMap.get("time_bucket"));
+        @Override public InstanceJvmMemoryMaxIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
+            indicator.setId(((Number)dbMap.get("id")).intValue());
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            indicator.setSummation(((Number)dbMap.get("summation")).longValue());
+            indicator.setCount(((Number)dbMap.get("count")).intValue());
+            indicator.setValue(((Number)dbMap.get("value")).longValue());
+            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java
similarity index 57%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java
index 4f54a6b..ddcc5e8 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemory/ServiceInstanceJVMMemoryDispatcher.java
@@ -16,43 +16,30 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemory;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-import org.apache.skywalking.oap.server.core.source.Endpoint;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMMemory;
 
 /**
  * This class is auto generated. Please don't change this class manually.
  *
  * @author Observability Analysis Language code generator
  */
-public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
+public class ServiceInstanceJVMMemoryDispatcher implements SourceDispatcher<ServiceInstanceJVMMemory> {
 
-
-    @Override public void dispatch(Endpoint source) {
-        doEndpointAvg(source);
-        doEndpointPercent(source);
+    @Override public void dispatch(ServiceInstanceJVMMemory source) {
+        doInstanceJvmMemoryMax(source);
     }
 
-    private void doEndpointAvg(Endpoint source) {
-        EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-
-        indicator.setTimeBucket(source.getTimeBucket());
-        indicator.setId(source.getId());
-        indicator.setServiceId(source.getServiceId());
-        indicator.setServiceInstanceId(source.getServiceInstanceId());
-        indicator.combine(source.getLatency(), 1);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-    private void doEndpointPercent(Endpoint source) {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+    private void doInstanceJvmMemoryMax(ServiceInstanceJVMMemory source) {
+    InstanceJvmMemoryMaxIndicator indicator = new InstanceJvmMemoryMaxIndicator();
 
         indicator.setTimeBucket(source.getTimeBucket());
         indicator.setId(source.getId());
-        indicator.setServiceId(source.getServiceId());
         indicator.setServiceInstanceId(source.getServiceInstanceId());
-        indicator.combine(new org.apache.skywalking.oap.server.core.analysis.indicator.expression.BooleanBinaryMatch(), source.isStatus(), true);
+        indicator.combine(source.getMax(), 1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
similarity index 67%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
index 6763c08..42f1a75 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointAvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/InstanceJvmMemoryPoolMaxIndicator.java
@@ -16,16 +16,17 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool;
 
 import java.util.*;
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.*;
+import org.apache.skywalking.oap.server.core.Const;
+import org.apache.skywalking.oap.server.core.analysis.indicator.LongAvgIndicator;
 import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorType;
 import org.apache.skywalking.oap.server.core.remote.annotation.StreamData;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
-import org.apache.skywalking.oap.server.core.storage.annotation.*;
 import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
+import org.apache.skywalking.oap.server.core.storage.annotation.*;
 
 /**
  * This class is auto generated. Please don't change this class manually.
@@ -34,15 +35,16 @@ import org.apache.skywalking.oap.server.core.storage.StorageBuilder;
  */
 @IndicatorType
 @StreamData
-@StorageEntity(name = "endpoint_avg", builder = EndpointAvgIndicator.Builder.class)
-public class EndpointAvgIndicator extends AvgIndicator {
+@StorageEntity(name = "instance_jvm_memory_pool_max", builder = InstanceJvmMemoryPoolMaxIndicator.Builder.class)
+public class InstanceJvmMemoryPoolMaxIndicator extends LongAvgIndicator {
 
     @Setter @Getter @Column(columnName = "id") private int id;
-    @Setter @Getter @Column(columnName = "service_id") private int serviceId;
     @Setter @Getter @Column(columnName = "service_instance_id") private int serviceInstanceId;
 
     @Override public String id() {
-        return String.valueOf(id);
+        String splitJointId = String.valueOf(getTimeBucket());
+        splitJointId += Const.ID_SPLIT + String.valueOf(id);
+        return splitJointId;
     }
 
     @Override public int hashCode() {
@@ -52,7 +54,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return result;
     }
 
-
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -61,7 +62,7 @@ public class EndpointAvgIndicator extends AvgIndicator {
         if (getClass() != obj.getClass())
             return false;
 
-        EndpointAvgIndicator indicator = (EndpointAvgIndicator)obj;
+        InstanceJvmMemoryPoolMaxIndicator indicator = (InstanceJvmMemoryPoolMaxIndicator)obj;
         if (id != indicator.id)
             return false;
         if (getTimeBucket() != indicator.getTimeBucket())
@@ -70,7 +71,6 @@ public class EndpointAvgIndicator extends AvgIndicator {
         return true;
     }
 
-
     @Override public RemoteData.Builder serialize() {
         RemoteData.Builder remoteBuilder = RemoteData.newBuilder();
 
@@ -80,9 +80,8 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
 
         remoteBuilder.setDataIntegers(0, getId());
-        remoteBuilder.setDataIntegers(1, getServiceId());
-        remoteBuilder.setDataIntegers(2, getServiceInstanceId());
-        remoteBuilder.setDataIntegers(3, getCount());
+        remoteBuilder.setDataIntegers(1, getServiceInstanceId());
+        remoteBuilder.setDataIntegers(2, getCount());
 
         return remoteBuilder;
     }
@@ -95,17 +94,15 @@ public class EndpointAvgIndicator extends AvgIndicator {
 
 
         setId(remoteData.getDataIntegers(0));
-        setServiceId(remoteData.getDataIntegers(1));
-        setServiceInstanceId(remoteData.getDataIntegers(2));
-        setCount(remoteData.getDataIntegers(3));
+        setServiceInstanceId(remoteData.getDataIntegers(1));
+        setCount(remoteData.getDataIntegers(2));
     }
 
-    public static class Builder implements StorageBuilder<EndpointAvgIndicator> {
+    public static class Builder implements StorageBuilder<InstanceJvmMemoryPoolMaxIndicator> {
 
-        @Override public Map<String, Object> data2Map(EndpointAvgIndicator storageData) {
+        @Override public Map<String, Object> data2Map(InstanceJvmMemoryPoolMaxIndicator storageData) {
             Map<String, Object> map = new HashMap<>();
             map.put("id", storageData.getId());
-            map.put("service_id", storageData.getServiceId());
             map.put("service_instance_id", storageData.getServiceInstanceId());
             map.put("summation", storageData.getSummation());
             map.put("count", storageData.getCount());
@@ -114,15 +111,14 @@ public class EndpointAvgIndicator extends AvgIndicator {
             return map;
         }
 
-        @Override public EndpointAvgIndicator map2Data(Map<String, Object> dbMap) {
-            EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-            indicator.setId((int)dbMap.get("id"));
-            indicator.setServiceId((int)dbMap.get("service_id"));
-            indicator.setServiceInstanceId((int)dbMap.get("service_instance_id"));
-            indicator.setSummation((long)dbMap.get("summation"));
-            indicator.setCount((int)dbMap.get("count"));
-            indicator.setValue((long)dbMap.get("value"));
-            indicator.setTimeBucket((long)dbMap.get("time_bucket"));
+        @Override public InstanceJvmMemoryPoolMaxIndicator map2Data(Map<String, Object> dbMap) {
+            InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
+            indicator.setId(((Number)dbMap.get("id")).intValue());
+            indicator.setServiceInstanceId(((Number)dbMap.get("service_instance_id")).intValue());
+            indicator.setSummation(((Number)dbMap.get("summation")).longValue());
+            indicator.setCount(((Number)dbMap.get("count")).intValue());
+            indicator.setValue(((Number)dbMap.get("value")).longValue());
+            indicator.setTimeBucket(((Number)dbMap.get("time_bucket")).longValue());
             return indicator;
         }
     }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java
similarity index 57%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java
index 4f54a6b..ad9d1e6 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/endpoint/EndpointDispatcher.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/serviceinstancejvmmemorypool/ServiceInstanceJVMMemoryPoolDispatcher.java
@@ -16,43 +16,30 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.endpoint;
+package org.apache.skywalking.oap.server.core.analysis.generated.serviceinstancejvmmemorypool;
 
 import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
 import org.apache.skywalking.oap.server.core.analysis.worker.IndicatorProcess;
-import org.apache.skywalking.oap.server.core.source.Endpoint;
+import org.apache.skywalking.oap.server.core.source.ServiceInstanceJVMMemoryPool;
 
 /**
  * This class is auto generated. Please don't change this class manually.
  *
  * @author Observability Analysis Language code generator
  */
-public class EndpointDispatcher implements SourceDispatcher<Endpoint> {
+public class ServiceInstanceJVMMemoryPoolDispatcher implements SourceDispatcher<ServiceInstanceJVMMemoryPool> {
 
-
-    @Override public void dispatch(Endpoint source) {
-        doEndpointAvg(source);
-        doEndpointPercent(source);
+    @Override public void dispatch(ServiceInstanceJVMMemoryPool source) {
+        doInstanceJvmMemoryPoolMax(source);
     }
 
-    private void doEndpointAvg(Endpoint source) {
-        EndpointAvgIndicator indicator = new EndpointAvgIndicator();
-
-        indicator.setTimeBucket(source.getTimeBucket());
-        indicator.setId(source.getId());
-        indicator.setServiceId(source.getServiceId());
-        indicator.setServiceInstanceId(source.getServiceInstanceId());
-        indicator.combine(source.getLatency(), 1);
-        IndicatorProcess.INSTANCE.in(indicator);
-    }
-    private void doEndpointPercent(Endpoint source) {
-        EndpointPercentIndicator indicator = new EndpointPercentIndicator();
+    private void doInstanceJvmMemoryPoolMax(ServiceInstanceJVMMemoryPool source) {
+    InstanceJvmMemoryPoolMaxIndicator indicator = new InstanceJvmMemoryPoolMaxIndicator();
 
         indicator.setTimeBucket(source.getTimeBucket());
         indicator.setId(source.getId());
-        indicator.setServiceId(source.getServiceId());
         indicator.setServiceInstanceId(source.getServiceInstanceId());
-        indicator.combine(new org.apache.skywalking.oap.server.core.analysis.indicator.expression.BooleanBinaryMatch(), source.isStatus(), true);
+        indicator.combine(source.getMax(), 1);
         IndicatorProcess.INSTANCE.in(indicator);
     }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/AvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/DoubleAvgIndicator.java
similarity index 76%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/AvgIndicator.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/DoubleAvgIndicator.java
index 41f24c8..895fa87 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/AvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/DoubleAvgIndicator.java
@@ -26,24 +26,28 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column;
  * @author peng-yongsheng
  */
 @IndicatorOperator
-public abstract class AvgIndicator extends Indicator {
+public abstract class DoubleAvgIndicator extends Indicator {
 
     protected static final String SUMMATION = "summation";
     protected static final String COUNT = "count";
     protected static final String VALUE = "value";
 
-    @Getter @Setter @Column(columnName = SUMMATION) private long summation;
+    @Getter @Setter @Column(columnName = SUMMATION) private double summation;
     @Getter @Setter @Column(columnName = COUNT) private int count;
-    @Getter @Setter @Column(columnName = VALUE) private long value;
+    @Getter @Setter @Column(columnName = VALUE) private double value;
 
     @Entrance
-    public final void combine(@SourceFrom long summation, @ConstOne int count) {
+    public final void combine(@SourceFrom double summation, @ConstOne int count) {
         this.summation += summation;
         this.count += count;
     }
 
     @Override public final void combine(Indicator indicator) {
-        AvgIndicator avgIndicator = (AvgIndicator)indicator;
+        DoubleAvgIndicator avgIndicator = (DoubleAvgIndicator)indicator;
         combine(avgIndicator.summation, avgIndicator.count);
     }
+
+    @Override public final void calculate() {
+        this.value = this.summation / this.count;
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/Indicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/Indicator.java
index fe29ed6..933ac59 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/Indicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/Indicator.java
@@ -35,4 +35,6 @@ public abstract class Indicator extends StreamData implements StorageData {
     public abstract String id();
 
     public abstract void combine(Indicator indicator);
+
+    public abstract void calculate();
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/AvgIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/LongAvgIndicator.java
similarity index 88%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/AvgIndicator.java
rename to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/LongAvgIndicator.java
index 41f24c8..1649af3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/AvgIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/LongAvgIndicator.java
@@ -26,7 +26,7 @@ import org.apache.skywalking.oap.server.core.storage.annotation.Column;
  * @author peng-yongsheng
  */
 @IndicatorOperator
-public abstract class AvgIndicator extends Indicator {
+public abstract class LongAvgIndicator extends Indicator {
 
     protected static final String SUMMATION = "summation";
     protected static final String COUNT = "count";
@@ -43,7 +43,11 @@ public abstract class AvgIndicator extends Indicator {
     }
 
     @Override public final void combine(Indicator indicator) {
-        AvgIndicator avgIndicator = (AvgIndicator)indicator;
+        LongAvgIndicator avgIndicator = (LongAvgIndicator)indicator;
         combine(avgIndicator.summation, avgIndicator.count);
     }
+
+    @Override public final void calculate() {
+        this.value = this.summation / this.count;
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java
index ab590e8..b5b4551 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/indicator/PercentIndicator.java
@@ -18,13 +18,8 @@
 
 package org.apache.skywalking.oap.server.core.analysis.indicator;
 
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Entrance;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.Expression;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ExpressionArg0;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.ExpressionArg1;
-import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.IndicatorOperator;
+import lombok.*;
+import org.apache.skywalking.oap.server.core.analysis.indicator.annotation.*;
 import org.apache.skywalking.oap.server.core.analysis.indicator.expression.BooleanBinaryMatch;
 import org.apache.skywalking.oap.server.core.storage.annotation.Column;
 
@@ -56,4 +51,8 @@ public abstract class PercentIndicator extends Indicator {
         total += ((PercentIndicator)indicator).total;
         match += ((PercentIndicator)indicator).match;
     }
+
+    @Override public void calculate() {
+        percentage = (int)(match / total);
+    }
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java
similarity index 86%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java
index e6c5e81..bdc60ea 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/DetectPoint.java
@@ -21,6 +21,6 @@ package org.apache.skywalking.oap.server.core.source;
 /**
  * @author peng-yongsheng
  */
-public enum Scope {
-    All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress
+public enum DetectPoint {
+    CLIENT, SERVER, PROXY
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
index e1f68fe..c4063b9 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
@@ -19,7 +19,6 @@
 package org.apache.skywalking.oap.server.core.source;
 
 import lombok.*;
-import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
 
 /**
@@ -40,5 +39,5 @@ public class Endpoint extends Source {
     @Getter @Setter private int latency;
     @Getter @Setter private boolean status;
     @Getter @Setter private int responseCode;
-    @Getter @Setter private SpanLayer type;
+    @Getter @Setter private RequestType type;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
index 896cf7c..8c0ed3b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/EndpointRelation.java
@@ -19,7 +19,6 @@
 package org.apache.skywalking.oap.server.core.source;
 
 import lombok.*;
-import org.apache.skywalking.apm.network.language.agent.*;
 
 /**
  * @author peng-yongsheng
@@ -37,7 +36,7 @@ public class EndpointRelation extends Source {
     @Getter @Setter private int rpcLatency;
     @Getter @Setter private boolean status;
     @Getter @Setter private int responseCode;
-    @Getter @Setter private SpanLayer type;
-    @Getter @Setter private SpanType detectPoint;
+    @Getter @Setter private RequestType type;
+    @Getter @Setter private DetectPoint detectPoint;
 }
 
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/GCPhrase.java
similarity index 86%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/GCPhrase.java
index e6c5e81..1c06ee3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/GCPhrase.java
@@ -21,6 +21,6 @@ package org.apache.skywalking.oap.server.core.source;
 /**
  * @author peng-yongsheng
  */
-public enum Scope {
-    All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress
+public enum GCPhrase {
+    NEW, OLD
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/MemoryPoolType.java
similarity index 86%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/MemoryPoolType.java
index e6c5e81..7811715 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/MemoryPoolType.java
@@ -21,6 +21,6 @@ package org.apache.skywalking.oap.server.core.source;
 /**
  * @author peng-yongsheng
  */
-public enum Scope {
-    All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress
+public enum MemoryPoolType {
+    CODE_CACHE_USAGE, NEWGEN_USAGE, OLDGEN_USAGE, SURVIVOR_USAGE, PERMGEN_USAGE, METASPACE_USAGE
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/RequestType.java
similarity index 86%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/RequestType.java
index e6c5e81..dfe2c7a 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/RequestType.java
@@ -21,6 +21,6 @@ package org.apache.skywalking.oap.server.core.source;
 /**
  * @author peng-yongsheng
  */
-public enum Scope {
-    All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress
+public enum RequestType {
+    DATABASE, HTTP, RPC, gRPC
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
index e6c5e81..43c1ef3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Scope.java
@@ -22,5 +22,6 @@ package org.apache.skywalking.oap.server.core.source;
  * @author peng-yongsheng
  */
 public enum Scope {
-    All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress
+    All, Service, ServiceInstance, Endpoint, ServiceRelation, ServiceInstanceRelation, EndpointRelation, NetworkAddress,
+    ServiceInstanceJVMCPU, ServiceInstanceJVMMemory, ServiceInstanceJVMMemoryPool, ServiceInstanceJVMGC
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java
index 15f28e3..c1a5719 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Service.java
@@ -18,14 +18,24 @@
 
 package org.apache.skywalking.oap.server.core.source;
 
+import lombok.*;
 import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
 
 /**
- * @author wusheng
+ * @author wusheng, peng-yongsheng
  */
 @SourceType
 public class Service extends Source {
     @Override public Scope scope() {
         return Scope.Service;
     }
+
+    @Getter @Setter private int id;
+    @Getter @Setter private String name;
+    @Getter @Setter private String serviceInstanceName;
+    @Getter @Setter private String endpointName;
+    @Getter @Setter private int latency;
+    @Getter @Setter private boolean status;
+    @Getter @Setter private int responseCode;
+    @Getter @Setter private RequestType type;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java
similarity index 74%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java
index e1f68fe..6d3397c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMCPU.java
@@ -19,26 +19,20 @@
 package org.apache.skywalking.oap.server.core.source;
 
 import lombok.*;
-import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
 
 /**
  * @author peng-yongsheng
  */
 @SourceType
-public class Endpoint extends Source {
+public class ServiceInstanceJVMCPU extends Source {
     @Override public Scope scope() {
-        return Scope.Endpoint;
+        return Scope.ServiceInstanceJVMCPU;
     }
 
     @Getter @Setter private int id;
     @Getter @Setter private String name;
-    @Getter @Setter private int serviceId;
     @Getter @Setter private String serviceName;
     @Getter @Setter private int serviceInstanceId;
-    @Getter @Setter private String serviceInstanceName;
-    @Getter @Setter private int latency;
-    @Getter @Setter private boolean status;
-    @Getter @Setter private int responseCode;
-    @Getter @Setter private SpanLayer type;
+    @Getter @Setter private double usePercent;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java
similarity index 74%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java
index e1f68fe..4c52e52 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMGC.java
@@ -19,26 +19,22 @@
 package org.apache.skywalking.oap.server.core.source;
 
 import lombok.*;
-import org.apache.skywalking.apm.network.language.agent.SpanLayer;
 import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
 
 /**
  * @author peng-yongsheng
  */
 @SourceType
-public class Endpoint extends Source {
+public class ServiceInstanceJVMGC extends Source {
     @Override public Scope scope() {
-        return Scope.Endpoint;
+        return Scope.ServiceInstanceJVMGC;
     }
 
     @Getter @Setter private int id;
     @Getter @Setter private String name;
-    @Getter @Setter private int serviceId;
     @Getter @Setter private String serviceName;
     @Getter @Setter private int serviceInstanceId;
-    @Getter @Setter private String serviceInstanceName;
-    @Getter @Setter private int latency;
-    @Getter @Setter private boolean status;
-    @Getter @Setter private int responseCode;
-    @Getter @Setter private SpanLayer type;
+    @Getter @Setter private GCPhrase phrase;
+    @Getter @Setter private long time;
+    @Getter @Setter private long count;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java
index e1f68fe..b66c9b3 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemory.java
@@ -19,26 +19,22 @@
 package org.apache.skywalking.oap.server.core.source;
 
 import lombok.*;
-import org.apache.skywalking.apm.network.language.agent.SpanLayer;
-import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
 
 /**
  * @author peng-yongsheng
  */
-@SourceType
-public class Endpoint extends Source {
+public class ServiceInstanceJVMMemory extends Source {
     @Override public Scope scope() {
-        return Scope.Endpoint;
+        return Scope.ServiceInstanceJVMMemory;
     }
 
     @Getter @Setter private int id;
     @Getter @Setter private String name;
-    @Getter @Setter private int serviceId;
     @Getter @Setter private String serviceName;
     @Getter @Setter private int serviceInstanceId;
-    @Getter @Setter private String serviceInstanceName;
-    @Getter @Setter private int latency;
-    @Getter @Setter private boolean status;
-    @Getter @Setter private int responseCode;
-    @Getter @Setter private SpanLayer type;
+    @Getter @Setter private boolean isHeap;
+    @Getter @Setter private long init;
+    @Getter @Setter private long max;
+    @Getter @Setter private long used;
+    @Getter @Setter private long committed;
 }
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java
similarity index 69%
copy from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
copy to oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java
index e1f68fe..ea5a09c 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/Endpoint.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/source/ServiceInstanceJVMMemoryPool.java
@@ -19,26 +19,22 @@
 package org.apache.skywalking.oap.server.core.source;
 
 import lombok.*;
-import org.apache.skywalking.apm.network.language.agent.SpanLayer;
-import org.apache.skywalking.oap.server.core.source.annotation.SourceType;
 
 /**
  * @author peng-yongsheng
  */
-@SourceType
-public class Endpoint extends Source {
+public class ServiceInstanceJVMMemoryPool extends Source {
     @Override public Scope scope() {
-        return Scope.Endpoint;
+        return Scope.ServiceInstanceJVMMemoryPool;
     }
 
     @Getter @Setter private int id;
     @Getter @Setter private String name;
-    @Getter @Setter private int serviceId;
     @Getter @Setter private String serviceName;
     @Getter @Setter private int serviceInstanceId;
-    @Getter @Setter private String serviceInstanceName;
-    @Getter @Setter private int latency;
-    @Getter @Setter private boolean status;
-    @Getter @Setter private int responseCode;
-    @Getter @Setter private SpanLayer type;
+    @Getter @Setter private MemoryPoolType poolType;
+    @Getter @Setter private long init;
+    @Getter @Setter private long max;
+    @Getter @Setter private long used;
+    @Getter @Setter private long committed;
 }
diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/TestAvgIndicator.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/TestLongAvgIndicator.java
similarity index 94%
rename from oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/TestAvgIndicator.java
rename to oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/TestLongAvgIndicator.java
index 757215d..737badf 100644
--- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/TestAvgIndicator.java
+++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/indicator/define/TestLongAvgIndicator.java
@@ -19,13 +19,13 @@
 package org.apache.skywalking.oap.server.core.analysis.indicator.define;
 
 import lombok.*;
-import org.apache.skywalking.oap.server.core.analysis.indicator.AvgIndicator;
+import org.apache.skywalking.oap.server.core.analysis.indicator.LongAvgIndicator;
 import org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData;
 
 /**
  * @author peng-yongsheng
  */
-public class TestAvgIndicator extends AvgIndicator {
+public class TestLongAvgIndicator extends LongAvgIndicator {
 
     @Setter @Getter private int id;
 
diff --git a/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/TimeBucketUtils.java b/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/TimeBucketUtils.java
new file mode 100644
index 0000000..078c6a3
--- /dev/null
+++ b/oap-server/server-library/library-util/src/main/java/org/apache/skywalking/oap/server/library/util/TimeBucketUtils.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.library.util;
+
+import java.text.*;
+import java.util.*;
+
+/**
+ * @author peng-yongsheng
+ */
+public enum TimeBucketUtils {
+    INSTANCE;
+
+    public long getMinuteTimeBucket(long time) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(time);
+
+        long year = calendar.get(Calendar.YEAR);
+        long month = calendar.get(Calendar.MONTH) + 1;
+        long day = calendar.get(Calendar.DAY_OF_MONTH);
+        long hour = calendar.get(Calendar.HOUR_OF_DAY);
+        long minute = calendar.get(Calendar.MINUTE);
+
+        return year * 100000000 + month * 1000000 + day * 10000 + hour * 100 + minute;
+    }
+
+    public long getSecondTimeBucket(long time) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTimeInMillis(time);
+
+        long year = calendar.get(Calendar.YEAR);
+        long month = calendar.get(Calendar.MONTH) + 1;
+        long day = calendar.get(Calendar.DAY_OF_MONTH);
+        long hour = calendar.get(Calendar.HOUR_OF_DAY);
+        long minute = calendar.get(Calendar.MINUTE);
+        long second = calendar.get(Calendar.SECOND);
+
+        return year * 10000000000L + month * 100000000 + day * 1000000 + hour * 10000 + minute * 100 + second;
+    }
+
+    public String formatMinuteTimeBucket(long minuteTimeBucket) throws ParseException {
+        SimpleDateFormat minuteDateFormat = new SimpleDateFormat("yyyyMMddHHmm");
+        Date date = minuteDateFormat.parse(String.valueOf(minuteTimeBucket));
+        SimpleDateFormat parsedMinuteDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        return parsedMinuteDateFormat.format(date);
+    }
+
+    public long minuteToHour(long minuteBucket) {
+        return minuteBucket / 100;
+    }
+
+    public long minuteToDay(long minuteBucket) {
+        return minuteBucket / 100 / 100;
+    }
+
+    public long minuteToMonth(long minuteBucket) {
+        return minuteBucket / 100 / 100 / 100;
+    }
+}
diff --git a/oap-server/server-receiver-plugin/pom.xml b/oap-server/server-receiver-plugin/pom.xml
index 8a9131b..96faaa9 100644
--- a/oap-server/server-receiver-plugin/pom.xml
+++ b/oap-server/server-receiver-plugin/pom.xml
@@ -35,6 +35,7 @@
         <module>skywalking-mesh-receiver-plugin</module>
         <module>skywalking-istio-telemetry-receiver-plugin</module>
         <module>skywalking-register-receiver-plugin</module>
+        <module>skywalking-jvm-receiver-plugin</module>
     </modules>
 
     <dependencies>
@@ -45,6 +46,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.skywalking</groupId>
+            <artifactId>apm-network</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
             <artifactId>library-module</artifactId>
             <version>${project.version}</version>
         </dependency>
diff --git a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/pom.xml b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/pom.xml
index 1152aa5..1baefe5 100644
--- a/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/pom.xml
+++ b/oap-server/server-receiver-plugin/skywalking-istio-telemetry-receiver-plugin/pom.xml
@@ -30,14 +30,6 @@
     <artifactId>skywalking-istio-telemetry-receiver-plugin</artifactId>
     <packaging>jar</packaging>
 
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>server-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
-
     <build>
         <plugins>
             <plugin>
diff --git a/oap-server/server-receiver-plugin/pom.xml b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/pom.xml
similarity index 53%
copy from oap-server/server-receiver-plugin/pom.xml
copy to oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/pom.xml
index 8a9131b..0538152 100644
--- a/oap-server/server-receiver-plugin/pom.xml
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/pom.xml
@@ -21,37 +21,12 @@
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <parent>
-        <artifactId>oap-server</artifactId>
+        <artifactId>server-receiver-plugin</artifactId>
         <groupId>org.apache.skywalking</groupId>
         <version>6.0.0-alpha-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>server-receiver-plugin</artifactId>
-    <packaging>pom</packaging>
-    <modules>
-        <module>skywalking-trace-receiver-plugin</module>
-        <module>zipkin-receiver-plugin</module>
-        <module>skywalking-mesh-receiver-plugin</module>
-        <module>skywalking-istio-telemetry-receiver-plugin</module>
-        <module>skywalking-register-receiver-plugin</module>
-    </modules>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>server-core</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>library-module</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.skywalking</groupId>
-            <artifactId>library-util</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-    </dependencies>
+    <artifactId>skywalking-jvm-receiver-plugin</artifactId>
+    <packaging>jar</packaging>
 </project>
\ No newline at end of file
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/module/JVMModule.java
similarity index 63%
rename from oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
rename to oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/module/JVMModule.java
index 7452ccd..16c7211 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/generated/service/ServiceDispatcher.java
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/module/JVMModule.java
@@ -16,18 +16,20 @@
  *
  */
 
-package org.apache.skywalking.oap.server.core.analysis.generated.service;
+package org.apache.skywalking.oap.server.receiver.jvm.module;
 
-import org.apache.skywalking.oap.server.core.analysis.SourceDispatcher;
-import org.apache.skywalking.oap.server.core.source.Service;
+import org.apache.skywalking.oap.server.library.module.ModuleDefine;
 
 /**
- * This class is auto generated. Please don't change this class manually.
- *
- * @author Observability Analysis Language code generator
+ * @author peng-yongsheng
  */
-public class ServiceDispatcher implements SourceDispatcher<Service> {
-    @Override public void dispatch(Service source) {
+public class JVMModule extends ModuleDefine {
+
+    @Override public String name() {
+        return "receiver-jvm";
     }
 
+    @Override public Class[] services() {
+        return new Class[0];
+    }
 }
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/JVMModuleProvider.java b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/JVMModuleProvider.java
new file mode 100644
index 0000000..dfb7626
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/JVMModuleProvider.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.receiver.jvm.provider;
+
+import org.apache.skywalking.oap.server.core.CoreModule;
+import org.apache.skywalking.oap.server.core.server.GRPCHandlerRegister;
+import org.apache.skywalking.oap.server.library.module.*;
+import org.apache.skywalking.oap.server.receiver.jvm.module.JVMModule;
+import org.apache.skywalking.oap.server.receiver.jvm.provider.handler.JVMMetricsServiceHandler;
+
+/**
+ * @author peng-yongsheng
+ */
+public class JVMModuleProvider extends ModuleProvider {
+
+    @Override public String name() {
+        return "default";
+    }
+
+    @Override public Class<? extends ModuleDefine> module() {
+        return JVMModule.class;
+    }
+
+    @Override public ModuleConfig createConfigBeanIfAbsent() {
+        return null;
+    }
+
+    @Override public void prepare() {
+    }
+
+    @Override public void start() {
+        GRPCHandlerRegister grpcHandlerRegister = getManager().find(CoreModule.NAME).getService(GRPCHandlerRegister.class);
+        grpcHandlerRegister.addHandler(new JVMMetricsServiceHandler(getManager()));
+    }
+
+    @Override public void notifyAfterCompleted() {
+
+    }
+
+    @Override public String[] requiredModules() {
+        return new String[] {CoreModule.NAME};
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandler.java b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandler.java
new file mode 100644
index 0000000..ede98bf
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandler.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.receiver.jvm.provider.handler;
+
+import io.grpc.stub.StreamObserver;
+import java.util.List;
+import org.apache.skywalking.apm.network.language.agent.*;
+import org.apache.skywalking.oap.server.core.*;
+import org.apache.skywalking.oap.server.core.source.GCPhrase;
+import org.apache.skywalking.oap.server.core.source.*;
+import org.apache.skywalking.oap.server.library.module.ModuleManager;
+import org.apache.skywalking.oap.server.library.server.grpc.GRPCHandler;
+import org.apache.skywalking.oap.server.library.util.TimeBucketUtils;
+import org.slf4j.*;
+
+/**
+ * @author peng-yongsheng
+ */
+public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsServiceImplBase implements GRPCHandler {
+
+    private static final Logger logger = LoggerFactory.getLogger(JVMMetricsServiceHandler.class);
+
+    private final SourceReceiver sourceReceiver;
+
+    public JVMMetricsServiceHandler(ModuleManager moduleManager) {
+        this.sourceReceiver = moduleManager.find(CoreModule.NAME).getService(SourceReceiver.class);
+    }
+
+    @Override public void collect(JVMMetrics request, StreamObserver<Downstream> responseObserver) {
+        int serviceInstanceId = request.getApplicationInstanceId();
+
+        if (logger.isDebugEnabled()) {
+            logger.debug("receive the jvm metric from application instance, id: {}", serviceInstanceId);
+        }
+
+        request.getMetricsList().forEach(metric -> {
+            long minuteTimeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(metric.getTime());
+            sendToCpuMetricProcess(serviceInstanceId, minuteTimeBucket, metric.getCpu());
+            sendToMemoryMetricProcess(serviceInstanceId, minuteTimeBucket, metric.getMemoryList());
+            sendToMemoryPoolMetricProcess(serviceInstanceId, minuteTimeBucket, metric.getMemoryPoolList());
+            sendToGCMetricProcess(serviceInstanceId, minuteTimeBucket, metric.getGcList());
+            sendToInstanceHeartBeatProcess(serviceInstanceId, metric.getTime());
+        });
+
+        responseObserver.onNext(Downstream.newBuilder().build());
+        responseObserver.onCompleted();
+    }
+
+    private void sendToCpuMetricProcess(int serviceInstanceId, long timeBucket, CPU cpu) {
+        ServiceInstanceJVMCPU serviceInstanceJVMCPU = new ServiceInstanceJVMCPU();
+        serviceInstanceJVMCPU.setId(serviceInstanceId);
+        serviceInstanceJVMCPU.setName(Const.EMPTY_STRING);
+        serviceInstanceJVMCPU.setServiceInstanceId(serviceInstanceId);
+        serviceInstanceJVMCPU.setServiceName(Const.EMPTY_STRING);
+        serviceInstanceJVMCPU.setUsePercent(cpu.getUsagePercent());
+        serviceInstanceJVMCPU.setTimeBucket(timeBucket);
+        sourceReceiver.receive(serviceInstanceJVMCPU);
+    }
+
+    private void sendToGCMetricProcess(int serviceInstanceId, long timeBucket, List<GC> gcs) {
+        gcs.forEach(gc -> {
+            ServiceInstanceJVMGC serviceInstanceJVMGC = new ServiceInstanceJVMGC();
+            serviceInstanceJVMGC.setId(serviceInstanceId);
+            serviceInstanceJVMGC.setName(Const.EMPTY_STRING);
+            serviceInstanceJVMGC.setServiceInstanceId(serviceInstanceId);
+            serviceInstanceJVMGC.setServiceName(Const.EMPTY_STRING);
+
+            switch (gc.getPhrase()) {
+                case NEW:
+                    serviceInstanceJVMGC.setPhrase(GCPhrase.NEW);
+                case OLD:
+                    serviceInstanceJVMGC.setPhrase(GCPhrase.OLD);
+            }
+
+            serviceInstanceJVMGC.setTime(gc.getTime());
+            serviceInstanceJVMGC.setCount(gc.getCount());
+            serviceInstanceJVMGC.setTimeBucket(timeBucket);
+            sourceReceiver.receive(serviceInstanceJVMGC);
+        });
+    }
+
+    private void sendToMemoryMetricProcess(int serviceInstanceId, long timeBucket, List<Memory> memories) {
+        memories.forEach(memory -> {
+            ServiceInstanceJVMMemory serviceInstanceJVMMemory = new ServiceInstanceJVMMemory();
+            serviceInstanceJVMMemory.setId(serviceInstanceId);
+            serviceInstanceJVMMemory.setName(Const.EMPTY_STRING);
+            serviceInstanceJVMMemory.setServiceInstanceId(serviceInstanceId);
+            serviceInstanceJVMMemory.setServiceName(Const.EMPTY_STRING);
+            serviceInstanceJVMMemory.setHeap(memory.getIsHeap());
+            serviceInstanceJVMMemory.setInit(memory.getInit());
+            serviceInstanceJVMMemory.setMax(memory.getMax());
+            serviceInstanceJVMMemory.setUsed(memory.getUsed());
+            serviceInstanceJVMMemory.setCommitted(memory.getCommitted());
+            serviceInstanceJVMMemory.setTimeBucket(timeBucket);
+            sourceReceiver.receive(serviceInstanceJVMMemory);
+        });
+    }
+
+    private void sendToMemoryPoolMetricProcess(int serviceInstanceId, long timeBucket,
+        List<MemoryPool> memoryPools) {
+
+        memoryPools.forEach(memoryPool -> {
+            ServiceInstanceJVMMemoryPool serviceInstanceJVMMemoryPool = new ServiceInstanceJVMMemoryPool();
+            serviceInstanceJVMMemoryPool.setId(serviceInstanceId);
+            serviceInstanceJVMMemoryPool.setName(Const.EMPTY_STRING);
+            serviceInstanceJVMMemoryPool.setServiceInstanceId(serviceInstanceId);
+            serviceInstanceJVMMemoryPool.setServiceName(Const.EMPTY_STRING);
+
+            switch (memoryPool.getType()) {
+                case NEWGEN_USAGE:
+                    serviceInstanceJVMMemoryPool.setPoolType(MemoryPoolType.NEWGEN_USAGE);
+                case OLDGEN_USAGE:
+                    serviceInstanceJVMMemoryPool.setPoolType(MemoryPoolType.OLDGEN_USAGE);
+                case PERMGEN_USAGE:
+                    serviceInstanceJVMMemoryPool.setPoolType(MemoryPoolType.PERMGEN_USAGE);
+                case SURVIVOR_USAGE:
+                    serviceInstanceJVMMemoryPool.setPoolType(MemoryPoolType.SURVIVOR_USAGE);
+                case METASPACE_USAGE:
+                    serviceInstanceJVMMemoryPool.setPoolType(MemoryPoolType.METASPACE_USAGE);
+                case CODE_CACHE_USAGE:
+                    serviceInstanceJVMMemoryPool.setPoolType(MemoryPoolType.CODE_CACHE_USAGE);
+            }
+
+            serviceInstanceJVMMemoryPool.setInit(memoryPool.getInit());
+            serviceInstanceJVMMemoryPool.setMax(memoryPool.getMax());
+            serviceInstanceJVMMemoryPool.setUsed(memoryPool.getUsed());
+            serviceInstanceJVMMemoryPool.setCommitted(memoryPool.getCommited());
+            serviceInstanceJVMMemoryPool.setTimeBucket(timeBucket);
+            sourceReceiver.receive(serviceInstanceJVMMemoryPool);
+        });
+    }
+
+    private void sendToInstanceHeartBeatProcess(int instanceId, long heartBeatTime) {
+//        instanceHeartBeatService.heartBeat(instanceId, heartBeatTime);
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine
new file mode 100644
index 0000000..fe4dab3
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleDefine
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+org.apache.skywalking.oap.server.receiver.jvm.module.JVMModule
\ No newline at end of file
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider
new file mode 100644
index 0000000..4b3751f
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/main/resources/META-INF/services/org.apache.skywalking.oap.server.library.module.ModuleProvider
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+#
+
+org.apache.skywalking.oap.server.receiver.jvm.provider.JVMModuleProvider
\ No newline at end of file
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandlerMainTest.java b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandlerMainTest.java
new file mode 100644
index 0000000..ffa2c8d
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/java/org/apache/skywalking/oap/server/receiver/jvm/provider/handler/JVMMetricsServiceHandlerMainTest.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.skywalking.oap.server.receiver.jvm.provider.handler;
+
+import io.grpc.*;
+import org.apache.skywalking.apm.network.language.agent.*;
+
+/**
+ * @author peng-yongsheng
+ */
+public class JVMMetricsServiceHandlerMainTest {
+
+    public static void main(String[] args) {
+        ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).usePlaintext(true).build();
+
+        JVMMetricsServiceGrpc.JVMMetricsServiceBlockingStub stub = JVMMetricsServiceGrpc.newBlockingStub(channel);
+
+        JVMMetrics.Builder jvmMetrics = JVMMetrics.newBuilder();
+        jvmMetrics.setApplicationInstanceId(1);
+
+        JVMMetric.Builder jvmMetricBuilder = JVMMetric.newBuilder();
+        jvmMetricBuilder.setTime(System.currentTimeMillis());
+
+        buildCPUMetric(jvmMetricBuilder);
+        buildGCMetric(jvmMetricBuilder);
+        buildMemoryMetric(jvmMetricBuilder);
+        buildMemoryPoolMetric(jvmMetricBuilder);
+
+        jvmMetrics.addMetrics(jvmMetricBuilder);
+
+        stub.collect(jvmMetrics.build());
+    }
+
+    private static void buildMemoryPoolMetric(JVMMetric.Builder metricBuilder) {
+        MemoryPool.Builder codeCache = MemoryPool.newBuilder();
+        codeCache.setInit(10);
+        codeCache.setMax(100);
+        codeCache.setCommited(10);
+        codeCache.setUsed(50);
+        codeCache.setType(PoolType.CODE_CACHE_USAGE);
+        metricBuilder.addMemoryPool(codeCache);
+
+        MemoryPool.Builder newGen = MemoryPool.newBuilder();
+        newGen.setInit(10);
+        newGen.setMax(100);
+        newGen.setCommited(10);
+        newGen.setUsed(50);
+        newGen.setType(PoolType.NEWGEN_USAGE);
+        metricBuilder.addMemoryPool(newGen);
+
+        MemoryPool.Builder oldGen = MemoryPool.newBuilder();
+        oldGen.setInit(10);
+        oldGen.setMax(100);
+        oldGen.setCommited(10);
+        oldGen.setUsed(50);
+        oldGen.setType(PoolType.OLDGEN_USAGE);
+        metricBuilder.addMemoryPool(oldGen);
+
+        MemoryPool.Builder survivor = MemoryPool.newBuilder();
+        survivor.setInit(10);
+        survivor.setMax(100);
+        survivor.setCommited(10);
+        survivor.setUsed(50);
+        survivor.setType(PoolType.SURVIVOR_USAGE);
+        metricBuilder.addMemoryPool(survivor);
+
+        MemoryPool.Builder permGen = MemoryPool.newBuilder();
+        permGen.setInit(10);
+        permGen.setMax(100);
+        permGen.setCommited(10);
+        permGen.setUsed(50);
+        permGen.setType(PoolType.PERMGEN_USAGE);
+        metricBuilder.addMemoryPool(permGen);
+
+        MemoryPool.Builder metaSpace = MemoryPool.newBuilder();
+        metaSpace.setInit(10);
+        metaSpace.setMax(100);
+        metaSpace.setCommited(10);
+        metaSpace.setUsed(50);
+        metaSpace.setType(PoolType.METASPACE_USAGE);
+        metricBuilder.addMemoryPool(metaSpace);
+    }
+
+    private static void buildMemoryMetric(JVMMetric.Builder metricBuilder) {
+        Memory.Builder isHeap = Memory.newBuilder();
+        isHeap.setInit(20);
+        isHeap.setMax(100);
+        isHeap.setCommitted(20);
+        isHeap.setUsed(60);
+        isHeap.setIsHeap(true);
+        metricBuilder.addMemory(isHeap);
+
+        Memory.Builder nonHeap = Memory.newBuilder();
+        nonHeap.setInit(20);
+        nonHeap.setMax(100);
+        nonHeap.setCommitted(20);
+        nonHeap.setUsed(60);
+        nonHeap.setIsHeap(false);
+        metricBuilder.addMemory(nonHeap);
+    }
+
+    private static void buildGCMetric(JVMMetric.Builder metricBuilder) {
+        GC.Builder newGC = GC.newBuilder();
+        newGC.setPhrase(GCPhrase.NEW);
+        newGC.setCount(2);
+        newGC.setTime(1000);
+        metricBuilder.addGc(newGC);
+
+        GC.Builder oldGC = GC.newBuilder();
+        oldGC.setPhrase(GCPhrase.OLD);
+        oldGC.setCount(4);
+        oldGC.setTime(49);
+        metricBuilder.addGc(oldGC);
+    }
+
+    private static void buildCPUMetric(JVMMetric.Builder metricBuilder) {
+        CPU.Builder cpu = CPU.newBuilder();
+        cpu.setUsagePercent(20);
+        metricBuilder.setCpu(cpu.build());
+    }
+}
diff --git a/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/resources/log4j2.xml b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..cd67282
--- /dev/null
+++ b/oap-server/server-receiver-plugin/skywalking-jvm-receiver-plugin/src/test/resources/log4j2.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+<Configuration status="INFO">
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout charset="UTF-8" pattern="%d - %c -%-4r [%t] %-5p %x - %m%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Root level="INFO">
+            <AppenderRef ref="Console"/>
+        </Root>
+    </Loggers>
+</Configuration>
diff --git a/oap-server/server-starter/pom.xml b/oap-server/server-starter/pom.xml
index 00fb0c4..9d0ddd0 100644
--- a/oap-server/server-starter/pom.xml
+++ b/oap-server/server-starter/pom.xml
@@ -74,6 +74,11 @@
             <artifactId>skywalking-register-receiver-plugin</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.skywalking</groupId>
+            <artifactId>skywalking-jvm-receiver-plugin</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         <!-- receiver module -->
 
         <!-- storage module -->
diff --git a/oap-server/server-starter/src/main/resources/application.yml b/oap-server/server-starter/src/main/resources/application.yml
index cdce1cb..004745a 100644
--- a/oap-server/server-starter/src/main/resources/application.yml
+++ b/oap-server/server-starter/src/main/resources/application.yml
@@ -51,6 +51,8 @@ storage:
     monthMetricDataTTL: 18 # Unit is month
 receiver-register:
   default:
+receiver-jvm:
+  default:
 service-mesh:
   default:
 istio-telemetry:
diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ElasticSearchColumnTypeMappingTestCase.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ElasticSearchColumnTypeMappingTestCase.java
index 2553ab7..24d78f0 100644
--- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ElasticSearchColumnTypeMappingTestCase.java
+++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/test/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/ElasticSearchColumnTypeMappingTestCase.java
@@ -38,6 +38,6 @@ public class ElasticSearchColumnTypeMappingTestCase {
         Assert.assertEquals("double", mapping.transform(double.class));
         Assert.assertEquals("double", mapping.transform(Double.class));
 
-        Assert.assertEquals("text", mapping.transform(String.class));
+        Assert.assertEquals("keyword", mapping.transform(String.class));
     }
 }