JVM 性能调优之内存优化与 GC 优化实战

JVM 调优调什么

JVM 调优是一个系统而又复杂的过程,但我们知道,在大多数情况下,我们基本不用去调整 JVM 内存分配,因为一些初始化的参数已经可以保证应用服务正常稳定地工作了。而且一般情况下,就算出现了,也是架构师级别的去处理。

实际上,JVM 调优,调的是稳定,并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了,保证服务的稳定,gc 永远会是 Java 程序员需要考虑的不稳定因素之一。复杂和高并发下的服务,必须保证每次 gc 不会出现性能下降,各种性能指标不会出现波动。因此我们通过压测的方式来看一下对 JVM 的性能是否造成影响。而压测主要就是看吞吐量和响应时间。

JDK1.8 默认垃圾收集器 Parallel Scavenge(新生代)+Parallel Old(老年代)。Parallel 就是关注吞吐量的垃圾收集器,高吞吐量则可以高效率地利用 CPU 时间,尽快完成程序的运算任务。通过命令java -XX:+PrintCommandLineFlags -version 可以查看默认垃圾回收器。

所谓吞吐量就是 CPU 用于运行用户代码的时间与 CPU 总消耗时间的比值,即:

  • 吞吐量:吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。即吞吐量 = 运行用户代码时间 / (运行用户代码时间+垃圾收集时间)

  • 响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。

压测工具 AB

Ab(ApacheBench) 测试工具是 Apache 提供的一款测试工具,具有简单易上手的特点,在测试 Web 服务时非常实用。ab 一般都是在 Linux 上用。安装非常简单,只需要在 Linux 系统中输入命令安装:

yum-y install httpd-tools

复制代码

AB 命令参数

ab [options] 需要进行压力测试的url

复制代码

参数说明:

-n  即requests,用于指定压力测试总共的执行次数。-c  即concurrency,用于指定的并发数。-t  即timelimit,等待响应的最大时间(单位:秒)。-b  即windowsize,TCP发送/接收的缓冲大小(单位:字节)。-p  即postfile,发送POST请求时需要上传的文件,此外还必须设置-T参数。-u  即putfile,发送PUT请求时需要上传的文件,此外还必须设置-T参数。-T  即content-type,用于设置Content-Type请求头信息,例如:application/x-www-form-urlencoded,默认值为text/plain。-v  即verbosity,指定打印帮助信息的冗余级别。-w  以HTML表格形式打印结果。-i  使用HEAD请求代替GET请求。-x  插入字符串作为table标签的属性。-y  插入字符串作为tr标签的属性。-z  插入字符串作为td标签的属性。-C  添加cookie信息,例如:"Apache=1234"(可以重复该参数选项以添加多个)。-H  添加任意的请求头,例如:"Accept-Encoding: gzip",请求头将会添加在现有的多个请求头之后(可以重复该参数选项以添加多个)。-A  添加一个基本的网络认证信息,用户名和密码之间用英文冒号隔开。-P  添加一个基本的代理认证信息,用户名和密码之间用英文冒号隔开。-X  指定使用的和端口号,例如:"126.10.10.3:88"。-V  打印版本号并退出。-k  使用HTTP的KeepAlive特性。-d  不显示百分比。-S  不显示预估和警告信息。-g  输出结果信息到gnuplot格式的文件中。-e  输出结果信息到CSV格式的文件中。-r  指定接收到错误信息时不退出程序。-h  显示用法信息,其实就是ab -help。

复制代码

测试

模拟并发请求 10 次,总共请求 10 万次。

名词解释:

Server Software:        (服务器软件名称及版本信息)Server Hostname:        127.0.0.1(服务器主机名)Server Port:            8080(服务器端口)
Document Path:          /blind/order(供测试的URL路径)Document Length:        7 bytes(供测试的URL返回的文档大小)
Concurrency Level:      10(并发数)Time taken for tests:   60.070 seconds(压力测试消耗的总时间)Complete requests:      100000(总次数)Failed requests:        0(失败的请求数)Write errors:           0(网络连接写入错误数)Total transferred:      13900000 bytes(传输的总数据量)HTML transferred:       700000 bytes(HTML文档的总数据量)Requests per second:    1664.73 [#/sec] (mean)(平均每秒的请求数,即服务器的吞吐量) Time per request:       6.007 [ms] (mean)(所有并发用户(这里是10)都请求一次的平均时间)Time per request:       0.601 [ms] (mean, across all concurrent requests)(单个用户请求一次的平均时间)Transfer rate:          225.97 [Kbytes/sec] received(每秒获取的数据长度 (传输速率,单位:KB/s))
Connection Times (ms)              min  mean[+/-sd] median   maxConnect:        0    0   0.1      0       4Processing:     0    6   4.5      4      67Waiting:        0    6   4.5      4      67Total:          0    6   4.5      4      68
Percentage of the requests served within a certain time (ms)  50%      4 (50%的请求在4ms内返回 )  66%      5 (66%的请求在5ms内返回 )  75%      7  80%      9  90%     12
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值