这个参数用于限制Mataspace(堆外内存:Metaspace 区域位于堆外,所以它的最大内存大小取决于系统内存,而不是堆大小,我们可以指定 MaxMetaspaceSize 参数来限定它的最大内存)增长的上限,防止因为某些情况导致Mataspace无限的使用本地内存,如果超过设置的值就会触发Full GC,此值默认没有限制,应取决于系统内存的大小,jvm会动态的改变此值。例如:
// 如果是一台4g的机器,直接设置成4096m即可
-XX:MaxMataspaceSize=4096M
设置堆内存最大值为512m,这个值推荐设置成2048m
设置堆内存的最小值为1g(ps:-Xms和-Xmx实际上是 -Xx:InitialHeapSize和 -XX: MaxHeapSize的缩写。例如:-XX: InitialHeapSize=123m -XX: MaxHeapSize=2g)
https://jmeter-plugins.org/install/Install/



例子:


前面都是按照线程数,这里按照qps的概念来做了


压测过程中如果我们想要看报错,就需要看日志。因为压测执行人可能会有多个,可能所有人都在看这个错误,但是不能每个人都在一台机器看,这个时候就需要用到分布式日志收集方式,本次我们用的是ElasticSearch+FileBeats+Kibana的架构

// 下载并解压到本地,然后编辑配置文件
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-oss-7.5.1-darwin-x86_64.tar.gz --no-check-certificate
tar -xzf filebeat-oss-7.5.1-darwin-x86_64.tar.gz
Vi filebeat.yaml
编辑配置文件时,我们重点关注这些:

日志输出路径:因为这个给的是elk,这里会修改成对应的端口号

下载elk

// 启动kibana (这里限制jvm参数,因为该机器性能一般)
docker run -e ES_JAVA_OPTS="-Xms256m =Mmx256m" -idt -p 9202:9200 -p 5602:5601 nshou/elasticsearch-kibana
浏览器验证es是否启动了

验证kibana是否启动了

配置filebeats:这些是常见的要修改的地方
vi filebeat.yml
纠正下,第二个是配置分隔符,按照什么进行分行

jmeter会生成2类日志,一个是jmeter.log,另一个是error.log,如果我们只想要打印错误日志,目前有2种方式

jmeter常用的存储变量的工具
1,ctx:
2,vars:存在jmeter变量后,可以通过vars去get/set
3,props:可以在运行时去改动jmeter原生的属性,比如说去修改开始结束时间的格式
4,prev:可以通过这个拿到上一个请求的result结果,并基于这个去做下一步的动作





这里写了一段脚本,意思是如果code!=200,则打印出error

我们可以在kibana查看到对应日志
这样我们就基本能拿到客户端的比较全的监控了

Prometheus架构:
配置完成以后我们查看报表,可以看到jmeter达到瓶颈的同时,机器性能总体是比较优,并没有什么异常表现,还在可接受范围,这个时候我们可以从其他角度拿到服务端压测数据,并对其进行分析

如果被测应用是springboot应用,想对其jvm或者springboot进行监控可以用micrometer插件

操作步骤:
<dependence>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.3.5</version>
</dependence>
配置文件
在这个yml文件进行配置

push image到远程仓库
配置完记得点击右边的package进行打包,这边配置了docker插件,会自动push到远程

docker Image暴露对外接口:
docker run -p9100:9100 -p 8001:8001 -p 8085:8085 --name mall-portal --link mall-mysql:db --link mall-redis:redis --link mongo:mongo --link rabbitmq:rabbit -v /etc/localtime:/etc/localtime -v /mydata/app/portal/logs:/var/logs -d mall/mall-portal:1.0-SNAPSHOT
配置完之后访问这个,如果可以正常访问就表示配置成功了

为啥要在这个目录去找呢?因为我们在配置文件就是这么配置的
base-path

8001



| 指标名称 | 含义 |
|---|---|
| jvm_memory_used_bytes | jvm内存的使用,包括堆内存/非堆内存,新生代/老生代,具体的值 |
| jvm_threads_live_threads | jvm活跃线程数,主要指当前活跃线程数 |
| jvm_threads_peak_threads | jvm峰值线程数是多少 |
| jvm_classes_loaded_classes | 加载了多少class线程数以及待加载的class数 |
| jvm_gc_xxx | 重点关注如主gc和副gc的发生的时间,发生的次数,gc的耗时,gc的最大内存 |
| tomcat_sessions_xxx | tomcat的连接相关数据,比如创建/活跃session数 |
| system_cpu_usage/count | jvm使用的cpu核数,使用率信息等 |





auto-time-requests:true时,会把接收到的请求,请求的状态,响应耗时打印出来
因为这样显示不太直观,我们直接来用报表展示



查看报表:
我们可以看到启动时间,首次启动时间,堆内存使用占比,非堆内存的使用占比等参数



jvm的cpu,活跃线程数等属性

gc的一些属性,比如耗时啥的
