弹性架构
几周前,我获得了一个难得的机会,可以在基础设施领域中沾沾自喜。 在JVM内部的深入了解下,我每天的工作经历发生了有趣的变化,我想与您分享动机和成果。 希望它可以启发类似的问题类别。
背景
我将从解释需要解决方案的上下文开始。 如果您知道Plumbr性能监控的全部内容,则可以跳过此部分。 对于其他所有人,我们Plumbr都在构建性能监控解决方案。 我们的方法是独特的,因为我们旨在使所有性能问题都具有源代码的根本原因。
这种问题的较复杂类别之一是其根源隐藏在Java内存分配和管理中。 此类别中的问题包括:
- 内存不足;
- 面临太频繁/太长时间的GC暂停;
- 尝试减少应用程序的内存占用。
我们对此类问题的解决方案是建立在对对象图进行快照并从那里公开最需要内存的数据结构的基础上的。 结果,您将获得运行时透明性,以了解JVM堆中实际发生的情况:
上面是我们监视自己的服务时发现的示例。 我们可以看到,在重大GC暂停后的某个时刻,我们占据了70%以上的旧一代。 老一代的高占用率通常会导致长时间的GC暂停,因此Plumbr捕获了快照以显示其中的实际内容。
在这种特殊情况下,