1. 基准测试:JMH(Java Microbenchmark Harness)
JMH是专门针对Java代码的微基准测试工具,可精确测量方法级性能(如算法耗时、方法调用开销)。其核心步骤包括:
pom.xml中引入JMH核心依赖(jmh-core)和注解处理器(jmh-generator-annprocess),版本需与JDK兼容(如1.35);@Benchmark注解标记待测方法,通过@BenchmarkMode(如AverageTime平均耗时)、@OutputTimeUnit(如NANOSECONDS纳秒)配置测试模式,@Warmup(预热迭代次数,如5次)和@Measurement(正式测量迭代次数,如10次)优化测试准确性;OptionsBuilder构建测试配置(指定测试类、迭代次数、fork进程数),调用Runner执行测试,结果会输出平均耗时、误差范围等指标。2. 负载/压力测试:Apache JMeter
JMeter是开源负载测试工具,适用于模拟高并发用户访问Java Web应用(如Servlet、Spring Boot接口)。关键流程如下:
apache-jmeter-5.4.3),确保CentOS已安装Java环境(java -version验证);./jmeter -n -t testplan.jmx -l result.jtl,避免GUI模式消耗资源),生成HTML报告(./jmeter -g result.jtl -o /path/to/report)分析性能瓶颈(如响应时间过长、吞吐量下降)。3. 系统性能基准测试:sysbench
sysbench是跨平台系统性能测试工具,可用于评估CentOS服务器底层资源(CPU、内存、磁盘、线程)的性能,为Java应用性能提供基准参考:
yum安装(yum install -y sysbench);sysbench cpu --cpu-max-prime=20000 --threads=4 run,查看CPU计算能力(如事件处理耗时、每秒事件数);sysbench memory --memory-total-size=1G --threads=4 run,评估内存读写速度(如MB/s、延迟);sysbench fileio --file-test-mode=rndrw --file-total-size=3G --file-num=64 --time=60 run,测试磁盘随机读写性能(如IOPS、吞吐量)。4. 磁盘I/O性能测试:fio
fio是灵活的磁盘I/O测试工具,可模拟Java应用对磁盘的读写场景(如数据库、日志写入):
yum安装(yum install -y fio);fio --ioengine=libaio --bs=4k --direct=1 --thread --time_based --rw=randread --filename=/home/randread.txt --runtime=60 --numjobs=1 --iodepth=1 --group_reporting --name=randread-test(--bs块大小、--rw读写模式、--numjobs并发数);--rw=write,执行类似命令,查看磁盘顺序写入性能(如带宽、IOPS)。5. 性能监控工具
yum install -y java-1.8.0-openjdk-devel获取),通过jvisualvm命令启动,添加远程或本地Java进程即可监控;jconsole命令启动);top(实时查看系统进程资源占用)、vmstat(监控进程、内存、I/O、CPU状态,如vmstat 1 5每秒刷新一次,共5次)、iostat(查看磁盘I/O性能,如iostat -x 1);jstat(监控GC情况,如jstat -gcutil <pid> 1000每秒输出一次GC统计)、jmap(生成堆转储快照,如jmap -dump:format=b,file=heap.hprof <pid>,用于分析内存泄漏)、jstack(查看线程堆栈,如jstack <pid>,用于分析线程阻塞)。6. 专业性能分析工具
-agentpath参数加载代理,或通过IDE插件集成);-agentpath参数集成到Java应用中,生成详细性能报告。7. 自定义压力测试代码
通过Java多线程模拟并发请求,适合特定业务场景的压力测试(如自定义接口、内部方法):
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CustomPressureTest {
public static void main(String[] args) {
int threadCount = 100; // 并发线程数
ExecutorService executor = Executors.newFixedThreadPool(threadCount);
long startTime = System.currentTimeMillis();
for (int i = 0; i < threadCount; i++) {
executor.execute(() -> {
// 待测业务逻辑(替换为实际代码)
testMethod();
});
}
executor.shutdown();
while (!executor.isTerminated()) {
// 等待所有线程完成
}
long endTime = System.currentTimeMillis();
System.out.println("Total time: " + (endTime - startTime) + "ms");
}
private static void testMethod() {
// 示例:模拟业务逻辑(如数据库查询、计算)
try {
Thread.sleep(10); // 模拟耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
通过调整threadCount(并发数)和testMethod(业务逻辑),可测试Java应用在不同并发场景下的性能表现。