在CentOS上进行Java性能测试的方法与工具
JMH是专门针对Java代码的微基准测试工具,可精确测量方法级性能(如算法耗时、内存占用)。
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=org.openjdk.jmh -DarchetypeArtifactId=jmh-java-benchmark-archetype -DgroupId=com.example -DartifactId=my-benchmark -Dversion=1.0
MyBenchmark.java,使用@Benchmark注解标记待测方法,配置预热(@Warmup)和测量(@Measurement)迭代次数:import org.openjdk.jmh.annotations.*;
import java.util.concurrent.TimeUnit;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
@Measurement(iterations = 10, time = 1)
@Fork(1)
@State(Scope.Benchmark)
public class MyBenchmark {
@Benchmark
public void testMethod() {
// 待测业务逻辑(如字符串拼接、数学计算)
String str = "test";
for (int i = 0; i < 100; i++) {
str += i;
}
}
public static void main(String[] args) throws Exception {
org.openjdk.jmh.Main.main(args); // 直接运行测试
}
}
mvn clean install编译项目,再运行生成的my-benchmark.jar即可输出平均耗时、偏差等指标。JMeter是开源负载测试工具,适用于模拟高并发用户访问Java Web应用(如Servlet、Spring Boot接口)。
bin目录启动(避免使用GUI模式进行正式测试):wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.4.3.tgz
tar -xzf apache-jmeter-5.4.3.tgz -C /usr/local/
cd /usr/local/apache-jmeter-5.4.3/bin
./jmeter -n -t /path/to/testplan.jmx -l /path/to/results.jtl
http://localhost:8080/api/test)、请求方法(GET/POST);sysbench可评估系统层面的CPU、内存、磁盘I/O性能,为Java应用提供基础环境参考。
sudo yum install epel-release -y
sudo yum install sysbench -y
sysbench cpu --threads=4 --cpu-max-prime=20000 run;sysbench memory --threads=4 --memory-total-size=1G run;sysbench fileio --file-test-mode=randrw --file-total-size=3G --file-num=64 --time=60 run。fio是灵活的磁盘I/O测试工具,可模拟Java应用中的文件读写场景(如数据库日志、缓存文件)。
sudo yum install fio -y
fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/tmp/randread.txt --runtime=60 --numjobs=4 --iodepth=16 --group_reporting;fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=write --filename=/tmp/write.txt --runtime=60 --numjobs=4 --iodepth=16 --group_reporting。VisualVM是JDK自带的可视化监控工具,可实时查看Java应用的CPU、内存、线程状态。
java -jar myapp.jar);jvisualvm命令),添加远程或本地JVM进程,查看“监视”标签下的性能指标(如堆内存使用率、线程数)。jstat -gc <pid> 1000 5(每1秒输出一次,共5次);jmap -dump:format=b,file=/tmp/heap.hprof <pid>;top -c(按M排序内存占用)。stress用于模拟CPU、内存压力,测试Java应用在高负载下的稳定性。
sudo yum install stress -y
# CPU压力测试(使用4个核心,持续600秒)
stress --cpu 4 --timeout 600
# 内存压力测试(分配2GB内存,持续600秒)
stress --vm 2 --vm-bytes 2G --timeout 600
iperf用于测试网络带宽性能,确保Java应用的网络传输效率(如分布式系统通信)。
iperf -s;iperf -c <server_ip> -t 60(测试60秒内的带宽)。