jvm分配内存

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

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

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

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

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

  • 修改堆/内存大小
  • 更改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分配内存

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

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

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

  2. 4g内存 堆内存分配多少_我需要多少内存

    4g内存 堆内存分配多少 什么是保留堆? 我需要多少内存? 在构建解决方案,创建数据结构或选择算法时,您可能会问自己(或其他人)这个问题. 如果此图包含1,000,000条边并且我使用HashMap进 ...

  3. 32位jdk最大内存_你了解Java 内存区域和GC机制吗?

    目录 Java垃圾回收概况 Java内存区域 Java对象的访问方式 Java内存分配机制 Java GC机制 垃圾收集器 Java垃圾回收概况 Java GC(Garbage Collection, ...

  4. 本地线程分配缓冲_线程本地分配缓冲区

    本地线程分配缓冲 最近,我一直在研究遭受严重性能问题的Java应用程序. 在许多问题中,真正引起我注意的一个问题是新对象的分配速度相对较慢(应用程序分配了大量的相当大的对象). 后来发现,原因是大量的 ...

  5. jvm高并发_在JVM上对高并发HTTP服务器进行基准测试

    jvm高并发 在第一篇关于HTTP客户端的文章 (我将您重定向到JVM上的高效HTTP的介绍)之后,现在让我们来谈谈HTTP 服务器 . 有一些关于HTTP服务器的基准测试,但通常受到诸如以下缺点的阻 ...

  6. python 内存_一行Python解决内存问题

    原标题:一行Python解决内存问题 内存不足是项目开发过程中经常碰到的问题,我和我的团队在之前的一个项目中也遇到了这个问题,我们的项目需要存储和处理一个相当大的动态列表,测试人员经常向我抱怨内存不足 ...

  7. 查看程序占用内存_电脑扩展了内存 但还总是提示内存不足?

    今天英特尔中国解答了一个大家可能遇到的电脑内存问题,电脑扩展了内存但还总提示内存不足?这是怎么回事呢? 英特尔表示,这很可能是某个程序的代码错误导致电脑内存溢出,之前被占用的内存无法释放.用户可以进入 ...

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

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

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

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

最新文章

  1. 分区表在安装系统(MBR)丢失或损坏
  2. 交换机无法ping通之谜
  3. win7 修复计算机 黑屏,boot bcd修复win7 旗舰版系统黑屏错误代码0xc0000034的解决方法...
  4. 数据挖掘(Data mining、资料探勘、数据采矿)(情报检索、数据分析、模式识别)
  5. 如何在单台计算机上配置 Windows XP SP2 网络保护技术
  6. pstools psexec 执行文件
  7. 从Commons CLI迁移到picocli
  8. 小程序 报错 err code: 40029, errmsg: 'invalid code, hints: [ req_id: JhIay6yFe-XN5A3 ]'
  9. bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
  10. UI网页头部设计模板素材|这么多讲究,你知道吗?
  11. 跨域调用webapi web端跨域调用webapi
  12. 数据库乱象丛生,开发者该如何选择?
  13. 【PL/SQL】 使用游标
  14. andriod连接mysql测试_android开发 MyEclipse下测试连接MySQL数据库
  15. 说说VNode节点(Vue.js实现)
  16. 【aspnetcore】模拟中间件处理请求的管道
  17. 多线程mute/lock_guard/unique_lock/condition_variable访问同一公共资源
  18. iphone5s已停用连接itunes怎么办?苹果5s已停用连接itunes解决方法
  19. 26丨 搜索引擎架构:如何瞬间完成海量数据检索?
  20. Unity在UGUI上使用Polygon Collider 2D实现不规则图案匹配

热门文章

  1. Codeforces Round #668 (Div. 2)
  2. 【区间DP】甲虫(luogu 4870)
  3. 芋道 Spring Boot 自动配置原理
  4. Hadoop入门(七)Mapreduce高级Shuffle
  5. JavaFX UI控件教程(二十五)之Color Picker
  6. SpringMVC表单验证器的使用
  7. Maven精选系列--eclipse各种操作
  8. 递归算法介绍及Java应用实战
  9. 2017派卧底去阿里、京东、美团、滴滴带回来的面试题
  10. js的三元表达式用来替换表格中的颜色