From f683850b9afc8976a781c58d6fa0332b8b2b9a7a Mon Sep 17 00:00:00 2001 From: kezhenxu94 Date: Sun, 9 Jun 2019 15:19:04 +0800 Subject: [PATCH] Improve plugin performance (#2838) * Improve plugin performance. fix #2837 --- .travis.yml | 2 +- .../plugin/solrj/SolrClientInterceptor.java | 4 +- .../solrj/StringFormatBenchmarkTest.java | 71 +++++++++++++++++++ .../nacos-mysql.sql | 2 + 4 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/StringFormatBenchmarkTest.java diff --git a/.travis.yml b/.travis.yml index 495b1129e1..a49a049b17 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,4 +11,4 @@ language: java install: - ./mvnw org.jacoco:jacoco-maven-plugin:0.8.3:prepare-agent clean install org.jacoco:jacoco-maven-plugin:0.8.3:report coveralls:report --quiet - - ./mvnw javadoc:javadoc -Dmaven.test.skip=true --quiet \ No newline at end of file + - ./mvnw javadoc:javadoc -Dmaven.test.skip=true --quiet diff --git a/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptor.java index 5c4d69a22b..d2ac0dbe23 100644 --- a/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/solrj/SolrClientInterceptor.java @@ -193,11 +193,11 @@ public class SolrClientInterceptor implements InstanceMethodsAroundInterceptor, } private static final String getOperatorNameWithAction(String collection, String path, String action) { - return String.format("solrJ/%s%s/%s", collection, path, action); + return "solrJ/" + collection + path + "/" + action; } private static final String getOperatorName(String collection, String path) { - return String.format("solrJ/%s%s", collection, path); + return "solrJ/" + collection + path; } private static final String getCollection(SolrjInstance instance, Object argument) { diff --git a/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/StringFormatBenchmarkTest.java b/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/StringFormatBenchmarkTest.java new file mode 100644 index 0000000000..8c68408041 --- /dev/null +++ b/apm-sniffer/apm-sdk-plugin/solrj-7.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/solrj/StringFormatBenchmarkTest.java @@ -0,0 +1,71 @@ +/* + * 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.apm.plugin.solrj; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +import java.util.concurrent.TimeUnit; + +/** + * Benchmark Mode Cnt Score Error Units + * StringFormatBenchmark.testStringConcat thrpt 10 326.444 ± 46.432 ops/ms + * StringFormatBenchmark.testStringFormat thrpt 10 6.094 ± 1.065 ops/ms + * + * @author kezhenxu94 + */ +@BenchmarkMode(Mode.Throughput) +@OutputTimeUnit(TimeUnit.MILLISECONDS) +@State(Scope.Thread) +@Fork(2) +@Warmup(iterations = 4) +@Measurement(iterations = 5) +public class StringFormatBenchmarkTest { + @Benchmark + public void testStringFormat() { + for (int i = 0; i < 100; i++) { + String.format("solrJ/%s%s/%s", i, i, i); + } + } + + @Benchmark + public void testStringConcat() { + for (int i = 0; i < 100; i++) { + String a = "solrJ/" + i + i + "/" + i; + } + } + + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.MICROSECONDS) + public static void main(String[] args) throws RunnerException { + Options options = new OptionsBuilder().include(StringFormatBenchmarkTest.class.getSimpleName()).build(); + new Runner(options).run(); + } +} diff --git a/oap-server/server-configuration/configuration-nacos/src/test/resources/docker/docker-entrypoint-initdb.d/nacos-mysql.sql b/oap-server/server-configuration/configuration-nacos/src/test/resources/docker/docker-entrypoint-initdb.d/nacos-mysql.sql index 46b19c347a..c08daf9a2b 100644 --- a/oap-server/server-configuration/configuration-nacos/src/test/resources/docker/docker-entrypoint-initdb.d/nacos-mysql.sql +++ b/oap-server/server-configuration/configuration-nacos/src/test/resources/docker/docker-entrypoint-initdb.d/nacos-mysql.sql @@ -17,6 +17,8 @@ CREATE DATABASE test DEFAULT CHARACTER SET = 'utf8'; +USE test; + /******************************************/ /* database name = nacos_config */ /* table_name = config_info */ -- GitLab