这篇文章是关于最近的性能调整练习的。 与往常一样,这些开始于关于症状的模糊表述。 这次,魔鬼采取了“应用程序速度慢,我们无法访问源代码的形式。 我们有什么改善情况的选择”。

对该应用程序进行仔细研究后发现,它由捆绑在一起的几个批处理作业组成。 深入研究“绩效”标准表明,执行特定工作所花费的时间过长。 稍后再仔细检查,我得到了一个可衡量的目标。 我需要从特定的作业运行时间中抽出两分钟,以适应预先分配的时间窗口。

陷入困境的应用程序是一个看起来非常无辜的小型JAR文件。 幸运的是,这也捆绑了负载测试。

在打开GC日志记录的情况下运行该应用程序( -XX:+ PrintGCTimeStamps -Xloggc:/path-to/gc.log -XX:+ PrintGCDetails )并快速查看日志,这是优化的第一个目标。 累积的GC暂停时间总计为三分半钟,暗示我可能会有机会。

在这种情况下,他可以使用几种工具,其中一些简单明了:

  • 修改堆/ permgen的大小
  • 更改GC算法
  • 配置内存区域之间的比率

我采取了改变堆大小的方法。 除了幸运的猜测外,它还基于最近学到的有关实时数据集大小和建议堆大小之间的相关性的课程。 从GC日志中,我还注意到该应用程序的实时数据集约为240m。 因此,根据我最近获得的知识,此应用程序堆的最佳结合点在720至960m之间。

但是在配置中,我发现-Xmx设置为仅300m。 稍微调整一下参数,我再次运行测试,结果如下:

堆大小 总GC暂停时间 通量
300m 207.48秒 92.25%
384m 54.13秒 97.97%
720m 20.52秒 99.11%
1,440m * 11.37秒 * 99.55%

*表示此配置在运行期间未触发Full GC。

现在,如果您查看结果,可能会将结果转换为“越大越好”。 如果仅以毫秒为单位进行测量,那的确是正确的。 如果成功标准之一与金钱有关,那么可能就不那么容易了。 在大型部署中将数百或数千台这些机器放在一起,您可能会单单在电费账单上就感到讨厌。

除此之外,本文是性能调优教科书中的教科书案例。 如果您有可衡量的目标,并且可以衡量结果而不是猜测,那么您将成功。 如果我被迫在没有明确目标或负载测试能力的情况下跳入,那么我仍然会调整配置的随机位。

参考: 为JVM分配内存:来自我们的JCG合作伙伴 Nikita Salnikov Tarnovski (来自Plumbr Blog博客) 的案例研究 。

翻译自: https://www.javacodegeeks.com/2014/03/allocating-memory-for-the-jvm-a-case-study.html

为JVM分配内存:一个案例研究相关推荐

  1. jvm分配内存_为JVM分配内存:一个案例研究

    jvm分配内存 这篇文章是关于最近的性能调整练习的. 与往常一样,这些开始于关于症状的模糊表述. 这次,魔鬼采取了"应用程序速度慢,我们无权访问源代码的形式. 我们有什么选择来改善局势&qu ...

  2. openjpa_OpenJPA:内存泄漏案例研究

    openjpa 本文将提供完整的根本原因分析详细信息以及解决影响Oracle Weblogic Server 10.0生产环境的Java堆内存泄漏(Apache OpenJPA泄漏)的方法. 这篇文章 ...

  3. OpenJPA:内存泄漏案例研究

    本文将提供完整的根本原因分析详细信息以及解决影响Oracle Weblogic Server 10.0生产环境的Java堆内存泄漏(Apache OpenJPA泄漏)的方法. 这篇文章还将演示在管理j ...

  4. 采用ODC改善软件质量:一个案例研究

    采用ODC改善软件质量:一个案例研究 点击:265       更新时间:2007-7-17 11:39:42     作者:Yang Gu 出处:IBM   本文内容包括: 软件开发中典型的质量问题 ...

  5. javascript案例_如何在JavaScript中使用增强现实-一个案例研究

    javascript案例 by Apurav Chauhan 通过Apurav Chauhan 如何在JavaScript中使用增强现实-一个案例研究 (How to use Augmented Re ...

  6. 易于使用的人工智能_需求分析:如何使用这种易于启动的方法+一个案例研究...

    易于使用的人工智能 by Turgay Çelik 由TurgayÇelik 需求分析:如何使用这种易于启动的方法+一个案例研究 (Requirement Analysis: how to use t ...

  7. java内存泄漏案例_寻找内存泄漏:一个案例研究

    java内存泄漏案例 一周前,我被要求修复一个有内存泄漏问题的webapp. 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏,我想这有多难. 但是事实证明这是一个挑战. 12小时后,我发现该应 ...

  8. 寻找内存泄漏:一个案例研究

    一周前,我被要求修复一个有内存泄漏问题的webapp. 考虑到过去两年左右的时间里我已经看到并修复了数百个泄漏,我想这有多难. 但是事实证明这是一个挑战. 12小时后,我发现该应用程序中不少于5个漏洞 ...

  9. Java技术专题之JVM逻辑内存回收机制研究图解版

    一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JV ...

最新文章

  1. python总线 rabbitmq_Python rabbitMQ如何实现生产消费者模式
  2. SpringBoot AOP拦截器
  3. JAVA中获得一个月最大天数的方法(备忘)
  4. 重磅! SpringBoot+Sentinel+Nacos已撸完
  5. myeclipse 保存失败
  6. 线性表_循环链表(增减删查 + 约瑟夫环问题 代码实现 )
  7. 分享个B端竞品分析报告
  8. 三种隐藏 HTML 元素的方式
  9. How to create swiping gesture list items for Windows Phone 7
  10. SICP练习1.16
  11. 179. Largest Number
  12. 基于TI AM335X的工业网关参考设计分享
  13. opencv保存视频编码方式
  14. 指纹识别综述(3): 特征提取
  15. 【学前教育论文】幼儿学前教育中采茶小游戏的运用可行性分析(节选)
  16. 解决“远程主机被迫关闭了一个现有的连接”的问题
  17. likely()和unlikely()
  18. 笔记本在AHCi模式下识别不到硬盘2(涵图片)
  19. 命运冠位指定服务器选择,命运冠位指定从者选择技巧 fgo从者哪个最好
  20. JavaScript 学习笔记(二)

热门文章

  1. MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established
  2. idea中Gitlab项目导入导出
  3. vmware安装centos6-步骤小结
  4. 转:并发与并行的区别
  5. flink 卡夫卡_卡夫卡–一次语义学
  6. jvm体系结构概述_JVM体系结构:JVM和JVM体系结构概述
  7. JSON合并补丁程序:JSON-P 1.1概述系列
  8. enumset_枚举集合的EnumSet
  9. 什么是openstack_您在OpenStack Summit 2016上错过了什么
  10. 五皇后问题 java_Java的5个古怪问题