使用jmeter压测,生成dump内存快照,并用jvisualvm分析

2,382 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情


jmeter使用

window下,直接打开jmeter.bat即可

image-20220505103426023.png

1.创建计划

image-20220505100955520.png

image-20220505101416348.png

2.创建线程组

image-20220505101540062.png

image-20220505101903502.png

3.创建http请求

image-20220505102003446.png

  • 一般配置

image-20220505102322343.png

  • 高级配置

image-20220505102410703.png

  • 请求头header,cookie等

image-20220505102525503.png

image-20220505102750944.png

4.创建结果树

image-20220505102857215.png

image-20220505102953408.png

5.执行查看结果

image-20220505103139998.png

  • 清空结果树

image-20220505104004150.png

导出jvm内存快照

jmap -dump:format=b,file=/dumps/jmap.hprof 21060

21060是java进程的id

jmap -dump:live,format=b,file=/dumps/jmap.hprof 21060

或者启动的时候,配置一下参数。

java -jar -XX:+HeapDumpOnOutOfMemoryError

-XX:+HeapDumpOnOutOfMemoryError,表示oom的时候,生成hprof文件

或者使用jstack也可以导出

  • jstack(查看线程)、jmap(查看内存)、jstat(性能分析)

查看gc次数

jstat -gc pid
1Serial:串行(-XX:+UseSerialGC)>为单线程环境设计,且使用一个线程回收垃圾,会暂停所有的用户线程,不适合服务器环境(例如:用户用餐,餐厅叫出去要叫一个清洁工打扫,打扫完再回来吃)
2Parallel:并行(-XX:+UseParallelGC)>多个并行垃圾收集线程工作,此时用户线程是暂停的,适用于科学计算、大数据处理首台处理等若交互环境(例如:用户用餐,餐厅叫出去要叫多个清洁工打扫,打扫完再回来吃)
3CMS:(-XX:UseConcMarkSweepGC)>用户线程和垃圾收集线程同时执行(并不一定是并行,可能交替执行),不需要停顿用户线程
,适用对响应时间有要求的场景(例如:用户用餐,餐厅叫出去要叫多个清洁工打扫,边吃边打扫)
4G1:(garbage first)(-XX:UseG1GC)>G1垃圾回收器将堆内存分割成不通的区域然后并发的对其进行垃圾回收 java11默认GC回收器是ZGC

jvisualvm分析

  • 一般的jdk默认都会自带jvisualvm工具,咱们用自带的即可。

image-20220505110852313.png

1.装入heapdump文件

image-20220505111247999.png

image-20220505111402479.png

2.oom异常线程查看

可参考这里

image-20220505111626754.png

image-20220505111742734.png

3.oom异常变量查看

image-20220505112043108.png


好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

image.png