串行内存消耗 并行内存

这个故事可以追溯到至少十年之前,当时我第一次接触PHB时遇到一个问题:“在生产部署中,我们需要购买多大服务器”。 我们正在构建的新的,闪亮的系统距离生产开始还有9个月的时间,显然该公司已承诺提供包括硬件在内的整个解决方案。

天哪,我有麻烦了。 凭借几年的经验,我几乎可以掷骰子了。 尽管我确信我完全缺乏信心是显而易见的,但我仍然不得不想出答案。 四个小时的谷歌搜索之后,我想起坐在那里,同样的问题仍然徘徊在我眼花bed乱的脸前:

“如何估算对计算能力的需求?”

在本文中,我为您提供了有关如何估算全新Java应用程序的内存需求的粗略指导,从而开始了这一主题。 对于不耐烦的用户,答案是从大约等于5 x [Live Data占用的内存量]的内存开始,然后从那里开始进行微调。 对于那些对背后的逻辑更加好奇的人,请留在我身边,我将带您进行推理。

首先,我只能建议避免在没有详细信息的情况下回答这样的问题。 您的答案必须基于性能要求,因此,即使没有先澄清这些要求也不要开始。 我的意思不是太含糊的“系统需要支持700个并发用户”,而是考虑到数据量和使用模式而提出的有关延迟和吞吐量的更多具体说明。 也不要忘记预算-我们所有人都可以梦到亚毫秒级的延迟,但是那些没有HFT银行骨干预算的人们-不幸的是,这只是一个梦想。

现在,假设您已具备这些要求。 下一站将是创建模拟用户行为的负载测试脚本。 如果现在可以同时启动这些脚本,那么您已经为答案奠定了基础。 正如您可能已经猜到的那样,下一步涉及我们通常建议的不要猜测的建议。 但是要注意。

实时数据大小

即,我们追求最佳内存配置需要捕获实时数据大小。 捕获了这一点之后,我们就可以进行微调的基线配置了。

如何定义实时数据大小? Charlie Hunt和Binu John在他们的“ Java Performance ”书中给出了以下定义:

实时数据大小是在稳定状态下运行应用程序所需的一组长期对象消耗的堆大小。

有了定义,我们准备在打开GC日志记录的情况下对应用程序运行负载测试(-XX:+ PrintGCTimeStamps -Xloggc:/tmp/gc.log -XX:+ PrintGCDetails),并可视化日志(使用例如gcviewer的帮助)来确定应用程序达到稳定状态的时间。 您所追求的类似于以下内容:

我们可以在熟悉的双锯齿图形中看到GC在次要GC和Full GC运行中都能完成工作。 在第21秒运行第一个完整GC之后,该特定应用程序似乎已经达到稳定状态。 但是,在大多数情况下,需要10到20个完整GC运行才能发现趋势变化。 在运行了四个完整的GC之后,我们可以估计实时数据大小大约等于100MB。

前面提到的Java Performance书现在表明,在典型的Java EE应用程序中,“实时数据大小”与最佳内存配置参数之间存在很强的相关性。 该领域的证据也支持他们的建议:

将最大堆大小设置为3-4 x [实时数据大小]

因此,对于当前的应用程序,我们应该将-Xmx设置为介于300m和400m之间,以进行初始性能测试,然后从那里开始进行测试。

我们对本书中的其他建议有不同的看法,建议将最大永久代大小设置为1.2-1.5 x [永久代的实时数据大小],并将-XX:NewRatio设置为[[实时数据大小]。 目前,我们正在收集更多数据以确定正相关性是否存在,但是在此之前,我建议您将生存和简化配置的决定基于监视分配率。

您现在可能会问为什么要打扰。 的确,有两个原因不引起立即关注:

  • 在撰写本文时,8G内存芯片的价格不到100美元
  • 虚拟化,特别是在使用大型供应商(例如Amazon AWS)时,使调整容量变得容易

这两个原因都是部分有效的,并且肯定减少了精确配置的需求。 但是他们两个仍然把你置于危险区域

  • 当“以防万一”投入大量内存时,您很可能会显着影响延迟-进入8G以上的堆时,引入跨越数十秒的Full GC暂停非常容易。
  • 当以“稍后再调整”的思想进行过度配置时,“后期”部分趋向于永不满足。 正因为如此,我面对了许多在预置环境上运行的应用程序。 例如,我发现在Amazon EC2 m1.xlarge实例上运行的上述应用程序使该公司每年每实例花费4,200美元。 将其转换为m1.small可以使实例的账单减少到520美元。 如果您的部署规模很大,则可以从您的运营预算中看到8倍的成本降低,请相信我。

摘要

不幸的是,我仍然看到太多的决策完全像十年前我被迫做的那样。 这会导致容量规划不足和规划过度,两者都是同样糟糕的选择,尤其是在您无法享受虚拟化优势的情况下。

我很幸运,但是您可能不会与您的客户见面,所以我只建议您使用本文中描述的简单框架进行实际计划。

参考: 如何估算内存消耗? 由我们的JCG合作伙伴 Nikita Salnikov Tarnovski在Plumbr Blog博客上获得。

翻译自: https://www.javacodegeeks.com/2014/01/how-to-estimate-memory-consumption.html

串行内存消耗 并行内存

串行内存消耗 并行内存_如何估算内存消耗?相关推荐

  1. java内存分析详解_深入java内存查看与分析详解

    1:gc日志输出在jvm启动参数中加入 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimestamps -XX:+PrintGCApplicationS ...

  2. promise异步请求串行异步then并行异步all竞争异步race 传递参数resolve(then)reject(catch)

    1.印象 古人云:"君子一诺千金",这种"承诺将来会执行"的对象在JavaScript中称为Promise对象. Promise就是解决多个异步请求的问题 Pr ...

  3. MySQL内存预估_mysql时该如何估算内存的消耗,公式如何计算?

    经常有人问配置mysql时该如何估算内存的消耗.那么该使用什么公式来计算呢? 关心内存怎么使用的原因是可以理解的.如果配置mysql服务器使用太少的内存会导致性能不是最优的;如果配置了太多的内存则会导 ...

  4. iOS GCD, 同步,异步,串行队列,并行队列,dispatch_group

    同步,指代码在同一个线程运行 异步,代码在另一个线程运行 串行队列,提交到该队列的block会顺序执行 并行队列,提交到该队列的block会并发执行 如果想等某一队列中所有block都执行完了在执行一 ...

  5. android 组合属性动画,Android属性动画组合(sequence串行、together并行)

    在android中用原生api实现一系列复杂动画会很麻烦,所以对属性动画进行了一定封装,让使用起来更简单,能够按照人的思维依次编写动画. 简单效果: 使用方法: 添加依赖:dependencies { ...

  6. 数据传输方式串行快于并行

    在实际时钟频率比较低的情况下,并行因为可以同时传输若干比特,速率确实比串行快. 但是,随着技术的发展,时钟频率越来越高,并行导线之间的相互干扰越来越严重,速度反而不如串行传的快.

  7. BCH编码(15,5)1bit串行,5bit并行

    1)什么是BCH码 ①BCH码是一种纠错码.线性分组码.循环码. ②需要传输信息位数:k ③纠错能力:t ④总码长(信息位+监督位):n ⑤n的长度满足n=2^m –1时生成的为本原BCH码:n的长度 ...

  8. 典型的计算机串行和并行总线,串行总线和并行总线的区别

    描述 并行通信传输中有多个数据位,同时在两个设备之间传输.发送设备将这些数据位通过 对应的数据线传送给接收设备,还可附加一位数据校验位.接收设备可同时接收到这些数据,不需要做任何变换就可直接使用.并行 ...

  9. 16g电脑内存有什么好处_电脑16g内存和8g内存区别多大

    展开全部 16g内存和8g内存的一般情况下差别不大,特殊使用场景下有着较大差距,32313133353236313431303231363533e78988e69d8331333433626561具体 ...

最新文章

  1. 如何优化Golang中重复的错误处理
  2. 16位转8位 winhex_078期中4位2复式3码232,排列五第19079期爱我彩规
  3. gzip: stdin: unexpected end of file
  4. ywy_c_asm题
  5. 华为手机服务器响应,服务器响应优化
  6. docker搭建gitlab服务器(Centos7)
  7. 学习ASP.NET Core, 怎能不了解请求处理管道[3]: 自定义一个服务器感受一下管道是如何监听、接收和响应请求的...
  8. Excel的设置 .net
  9. 【病灶分类】基于matlab粒子群算法优化SVM病灶分类【含Matlab源码 1520期】
  10. 雅黑科技php探针,雅黑PHP探针参数详解
  11. Spark调优—参数调优
  12. 泪目!java面试八股文是哪些
  13. php addslashes 防注入,PHP基础-addslashes防sql注入-北漂者
  14. Centos Linux破解开机密码
  15. Springboot+Vue实现仿课堂派
  16. 计算机硬件找不到网络适配器,图文学习网络适配器不见了 【操作教程】 的恢复方法_...
  17. C语言 代码 九九乘法表
  18. 区块链-拜占庭将军问题介绍
  19. 芯准TTE系统测试与验证(1)—— 测试环境与案例说明
  20. 内网横传之哈希传递(Pass The Hash)

热门文章

  1. 【树链剖分】Milk Visits G(luogu 5838)
  2. 【图论】【最短路】【SPFA】香甜的黄油 Sweet Butter (luogu 1828)
  3. Memcached:列出所有Key
  4. Hibernate基本概念 (3)
  5. 将Springboot项目放在服务器上一直运行
  6. 遍历线索化二叉树+图解
  7. mysql---批量插入数据:100w条数据
  8. 怎样批量获取文件名,批量提取文件名 文件名读取windows 批处理文件
  9. Spring MVC开发环境搭建
  10. linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...