Ubuntu下Java性能测试实操指南
一 环境准备与基线
二 微基准测试 JMH
<dependencies>
<!-- JMH -->
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.36</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-generator-annprocess</artifactId>
<version>1.36</version>
<scope>test</scope>
</dependency>
<!-- JUnit 5(可选,用于辅助测试) -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
</dependencies>
import org.openjdk.jmh.annotations.*;
import java.util.concurrent.TimeUnit;
@State(Scope.Benchmark)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Fork(value = 1, jvmArgs = {"-Xms1g", "-Xmx1g"})
@Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@BenchmarkMode(Mode.Throughput)
public class StringConcatBenchmark {
@Param({"100", "1000", "10000"})
private int size;
private String base;
@Setup
public void setup() {
base = "x".repeat(size);
}
@Benchmark
public String concatPlus() {
String s = "";
for (int i = 0; i < size; i++) s += "x";
return s;
}
@Benchmark
public String concatBuilder() {
var sb = new StringBuilder();
for (int i = 0; i < size; i++) sb.append("x");
return sb.toString();
}
}
mvn clean package && java -jar target/benchmarks.jar -rf json -rff results.json三 负载与压力测试 JMeter 与 Gatling
bin/jmeter.sh(GUI 用于设计,CLI 用于压测)。四 运行时监控与诊断
top/htop、vmstat、iostat、sar、free -m、df -h、iftop,用于定位 CPU 饱和、内存压力、I/O 等待、网络瓶颈。五 一套可复用的测试流程