Ubuntu上Java应用的性能测试实践指南
一 测试类型与工具选型
二 快速上手 JMH 微基准测试
<dependencies>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.37</version>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.37</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source><target>17</target>
<annotationProcessorPaths>
<path>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.37</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
import org.openjdk.jmh.annotations.*;
import java.util.concurrent.TimeUnit;
@BenchmarkMode({Mode.Throughput, Mode.AverageTime})
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@State(Scope.Thread)
public class StringConcatBenchmark {
private String s1 = "Hello", s2 = "World", s3 = "Java";
private int n = 100;
@Benchmark public String testStringBuilder() {
var sb = new StringBuilder();
for (int i = 0; i < n; i++) { sb.append(s1).append(s2).append(s3); }
return sb.toString();
}
@Benchmark public String testStringBuffer() {
var sb = new StringBuffer();
for (int i = 0; i < n; i++) { sb.append(s1).append(s2).append(s3); }
return sb.toString();
}
@Benchmark public String testPlus() {
String r = "";
for (int i = 0; i < n; i++) { r += s1; r += s2; r += s3; }
return r;
}
}
mvn clean package -DskipTestsjava -jar target/benchmarks.jar StringConcatBenchmark三 负载与压力测试 JMeter 与 Gatling
四 运行时监控与瓶颈定位
top/htop(CPU/内存)、free -m(内存)、df -h(磁盘)、iftop(网络带宽)。五 系统层面与网络 I O 基准
sudo apt-get install sysbenchsysbench cpu --threads 4 --time 60 run(按需调整线程数与时长)。