Heroku JVM 调优

2023-11-25

我已经在 Heroku 的 Play2 框架上编写了一个应用程序,但遇到了内存问题。

2013-03-21T01:28:35+00:00 heroku[web.1]: Process running mem=543M(106.1%)
2013-03-21T01:28:35+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)

在本地,我在 Heroku (512MB) 上使用相同的 JVM 设置和内存限制对其进行了分析,但当我在 Heroku 发送请求时,它几乎立即运行我们的堆空间。

JAVA_OPTS:    -Xmx384m -Xss512k -XX:+UseCompressedOops

如果我可以分析那里发生的事情,我不会有任何问题,但 java-agent 似乎不适合我。

我还没有遇到过任何内存泄漏。我确实知道我创建的每个对象都只会使用一次,这样我就可以使我的年轻一代变大,而我的老一代变小。我尝试了不同的 JVM 值,但在没有正确分析的情况下似乎无法找到正确的组合来使其正常工作。

我已经阅读了所有关于调整的 Heroku 文档,但没有任何效果。有人对此有任何想法,或者也许为我指明了正确的方向吗?

EDIT

我仍然无法让远程监控工作,但这里是我的本地测试系统在 1 个完整 CG 之前和之后的一些转储。

{Heap before GC invocations=1747 (full 0):
 PSYoungGen      total 42496K, used 42496K [0x00000000f5560000, 0x00000000fded0000, 0x0000000100000000)
  eden space 42176K, 100% used [0x00000000f5560000,0x00000000f7e90000,0x00000000f7e90000)
  from space 320K, 100% used [0x00000000fde80000,0x00000000fded0000,0x00000000fded0000)
  to   space 640K, 0% used [0x00000000fdd90000,0x00000000fdd90000,0x00000000fde30000)
 PSOldGen        total 106176K, used 105985K [0x00000000e0000000, 0x00000000e67b0000, 0x00000000f5560000)
  object space 106176K, 99% used [0x00000000e0000000,0x00000000e67804c8,0x00000000e67b0000)
 PSPermGen       total 43712K, used 43684K [0x00000000d5a00000, 0x00000000d84b0000, 0x00000000e0000000)
  object space 43712K, 99% used [0x00000000d5a00000,0x00000000d84a9338,0x00000000d84b0000)
2013-03-21T14:09:36.827-0700: [GC [PSYoungGen: 42496K->384K(41536K)] 148481K->106450K(147712K), 0.0027940 secs] [Times: user=0.02 sys=0.00, real=0.00 secs] 
Heap after GC invocations=1747 (full 0):
 PSYoungGen      total 41536K, used 384K [0x00000000f5560000, 0x00000000fde90000, 0x0000000100000000)
  eden space 41152K, 0% used [0x00000000f5560000,0x00000000f5560000,0x00000000f7d90000)
  from space 384K, 100% used [0x00000000fdd90000,0x00000000fddf0000,0x00000000fddf0000)
  to   space 640K, 0% used [0x00000000fddf0000,0x00000000fddf0000,0x00000000fde90000)
 PSOldGen        total 106176K, used 106066K [0x00000000e0000000, 0x00000000e67b0000, 0x00000000f5560000)
  object space 106176K, 99% used [0x00000000e0000000,0x00000000e6794968,0x00000000e67b0000)
 PSPermGen       total 43712K, used 43684K [0x00000000d5a00000, 0x00000000d84b0000, 0x00000000e0000000)
  object space 43712K, 99% used [0x00000000d5a00000,0x00000000d84a9338,0x00000000d84b0000)
}
{Heap before GC invocations=1748 (full 1):
 PSYoungGen      total 41536K, used 384K [0x00000000f5560000, 0x00000000fde90000, 0x0000000100000000)
  eden space 41152K, 0% used [0x00000000f5560000,0x00000000f5560000,0x00000000f7d90000)
  from space 384K, 100% used [0x00000000fdd90000,0x00000000fddf0000,0x00000000fddf0000)
  to   space 640K, 0% used [0x00000000fddf0000,0x00000000fddf0000,0x00000000fde90000)
 PSOldGen        total 106176K, used 106066K [0x00000000e0000000, 0x00000000e67b0000, 0x00000000f5560000)
  object space 106176K, 99% used [0x00000000e0000000,0x00000000e6794968,0x00000000e67b0000)
 PSPermGen       total 43712K, used 43684K [0x00000000d5a00000, 0x00000000d84b0000, 0x00000000e0000000)
  object space 43712K, 99% used [0x00000000d5a00000,0x00000000d84a9338,0x00000000d84b0000)
2013-03-21T14:09:36.830-0700: [Full GC [PSYoungGen: 384K->0K(41536K)] [PSOldGen: 106066K->13137K(52224K)] 106450K->13137K(93760K) [PSPermGen: 43684K->43684K(87936K)], 0.0666250 secs] [Times: user=0.06 sys=0.01, real=0.07 secs] 
Heap after GC invocations=1748 (full 1):
 PSYoungGen      total 41536K, used 0K [0x00000000f5560000, 0x00000000fde90000, 0x0000000100000000)
  eden space 41152K, 0% used [0x00000000f5560000,0x00000000f5560000,0x00000000f7d90000)
  from space 384K, 0% used [0x00000000fdd90000,0x00000000fdd90000,0x00000000fddf0000)
  to   space 640K, 0% used [0x00000000fddf0000,0x00000000fddf0000,0x00000000fde90000)
 PSOldGen        total 52224K, used 13137K [0x00000000e0000000, 0x00000000e3300000, 0x00000000f5560000)
  object space 52224K, 25% used [0x00000000e0000000,0x00000000e0cd4528,0x00000000e3300000)
 PSPermGen       total 87936K, used 43684K [0x00000000d5a00000, 0x00000000dafe0000, 0x00000000e0000000)
  object space 87936K, 49% used [0x00000000d5a00000,0x00000000d84a9338,0x00000000dafe0000)
}

EDIT

这是我能得到的——虽然不多,但这是 100 个请求之后发生的情况,因为一切都开始降级,您可以看到 web.2 已经在此转储中交换

2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=load_avg_1m val=0.41
2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=memory_total val=246.95 units=MB
2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=memory_rss val=246.91 units=MB
2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=memory_cache val=0.05 units=MB
2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=memory_swap val=0.00 units=MB
2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=memory_pgpgin val=72259 units=pages
2013-03-21T22:24:23+00:00 heroku[web.1]: source=heroku.13369226.web.1.d615093e-77a3-42b1-8da1-a228bd7582a1 measure=memory_pgpgout val=9039 units=pages
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=load_avg_1m val=0.30
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=memory_total val=532.83 units=MB
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=memory_rss val=511.86 units=MB
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=memory_cache val=0.04 units=MB
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=memory_swap val=20.93 units=MB
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=memory_pgpgin val=145460 units=pages
2013-03-21T22:24:25+00:00 heroku[web.2]: source=heroku.13369226.web.2.cb423d08-dd15-41c1-9843-95bcdc269111 measure=memory_pgpgout val=14414 units=pages
2013-03-21T22:24:25+00:00 heroku[web.2]: Process running mem=532M(104.1%)
2013-03-21T22:24:25+00:00 heroku[web.2]: Error R14 (Memory quota exceeded)
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=load_avg_1m val=1.83
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=memory_total val=400.66 units=MB
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=memory_rss val=400.61 units=MB
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=memory_cache val=0.05 units=MB
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=memory_swap val=0.00 units=MB
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=memory_pgpgin val=113336 units=pages
2013-03-21T22:24:29+00:00 heroku[web.4]: source=heroku.13369226.web.4.25274242-a3af-4d2e-9da3-44e5e0a45c09 measure=memory_pgpgout val=10767 units=pages
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=load_avg_1m val=0.25
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=memory_total val=397.70 units=MB
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=memory_rss val=397.64 units=MB
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=memory_cache val=0.05 units=MB
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=memory_swap val=0.00 units=MB
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=memory_pgpgin val=112163 units=pages
2013-03-21T22:24:29+00:00 heroku[web.3]: source=heroku.13369226.web.3.2132f01f-94b1-4151-8fa8-09cdb2774919 measure=memory_pgpgout val=10353 units=pages

我遇到过同样的问题。 Heroku 告诉您机器内存不足,而不是 Java 虚拟机内存不足。 Heroku Play 2.2 部署中实际上存在一个错误,启动脚本读取 java_opts,而不是 JAVA_OPTS。

我通过设置两者来修复它:

heroku config:add java_opts='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops'
heroku config:add JAVA_OPTS='-Xmx384m -Xms384m -Xss512k -XX:+UseCompressedOops'

我还必须设置 -Xms,否则我会收到一条错误消息,指出最小值和最大值不兼容。我猜 Play2.2 使用的默认值高于 384m。

要找出您使用的总内存,这是一个有用的方程(java 8 之前):

Max memory = [-Xmx] + [-XX:MaxPermSize] + number_of_threads * [-Xss]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Heroku JVM 调优 的相关文章

  • 在 Java 中重置 Graphics2D 对象

    我正在用 Java 尝试 Graphics2D 但像往常一样 我被困住了 P 问题是 假设我有这个代码 Graphics2D g Graphics2D this getGraphics Inside a JFrame g rotate Ma
  • Windows 上的虚假唤醒。是否可以?

    我最近学习了 虚假唤醒 有人说这个问题只可能发生在某些类型的 Linux PC 上 我用的是窗户 我为虚假唤醒编写了测试 我得到的结果是这是可能的 但我想向您展示这个测试 也许我在某个地方犯了错误 我的初始变体 import java ut
  • 为移动设备扩展 libgdx UI?

    眼下desktop应用程序的版本很好 按钮缩放得很好 但是当我部署到android它们很小 几乎无法使用 DesktopLauncher public class DesktopLauncher public static void mai
  • Hamcrest 泛型地狱 #2:iterable With Size 给出错误“不适用于参数”

    在 hamcrest 中 1 3 RC2 没有 JUnit 依赖项 我使用失败iterableWithSize 我有一个 扩展 Iterator参数化为Content像这样EndResult
  • 如何将 Spark-sftp 等新库添加到我的 Pyspark 代码中?

    当我尝试在 Spark conf 中设置包依赖项 spark sftp 时 我收到 ClassNotFoundException 但当我使用以下命令执行脚本时它会起作用 Spark submit packages com springml
  • 如何使用 log4j 自动记录类中调用的每个方法

    我有一个包含数据库调用的类 我通常希望使用 log4j 记录该类中调用的每个方法 带参数 logger debug foo id id initiated 可以自动执行此操作吗 也许通过在每个方法的开头使用某种注释而不是编写每个 logge
  • 仅使用 ServletContext 查找应用程序的 URL

    我正在使用 Spring MVC 编写一个 Java Web 应用程序 我有一个后台进程 它会遍历数据库并查找必须通过电子邮件发送给我的用户的通知 这些电子邮件需要包含应用程序的超链接 对于网络应用程序来说 这似乎是相当常见的模式 但我遇到
  • Java HttpURLConnection:内容长度计算

    我目前正在为 bitbucket issues RESTful API 开发一个库 我取得了很大的进步 现在我要解决这个部分更新问题 http confluence atlassian com display BBDEV Issues Is
  • 如何用java对jpg进行像素化?

    我正在尝试使用 Java 6 对 JPEG 进行像素化 但运气不佳 它需要使用 Java 而不是像 Photoshop 这样的图像处理程序 并且它需要看起来像老派 像这样 有谁能够帮助我 使用java awt image javadoc h
  • 在 Android 中使用 lambdaj

    有人尝试过在android开发中使用lambdaj库吗 当我创建一个简单的小型java应用程序时 它对我来说工作得很好 但我无法在android应用程序中使用它 UPDATE 我正在添加 lambdaj lambdaj 2 3 2 with
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 从外部 clojar 导入/使用资源

    我想做的是将一个大文件 MIDI 声音字体 打包到一个独立的 Maven repo clojar 中 然后能够以编程方式将其拉下来并从单独的项目中使用它 事实证明 这个看似简单的任务比我想象的要复杂 理想的情况是 如果有一种方法可以直接访问
  • 如何在最短的时间内克隆java中的输入流

    有人可以告诉我如何克隆输入流 并花费尽可能少的创建时间吗 我需要多次克隆输入流以使用多种方法来处理 IS 我尝试了三种方法 但由于这样或那样的原因 事情不起作用 方法 1 感谢 stackoverflow 社区 我发现以下链接很有帮助 并将
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • ObservableList 不更新 ArrayList

    对于学校作业 我们正在使用 JavaFX 中的 ObservableList 对象 对吗 我已经为此工作了一天多了 但无法弄清楚 老师只告诉我们 谷歌一下 所以这也没有帮助 基本上 我们正在开发一个基本的管理应用程序来跟踪人们及其家人 人们
  • java.lang.NoSuchMethodError:com.fasterxml.jackson.databind.type。使用 apache beam Spark runner 运行 go 示例时

    我想跑grades https github com apache beam tree master sdks go examples gradesapache beam go sdk 提出的示例 在一个主服务器和两个从服务器 spark2
  • Google OR-Tools:无法运行 java 示例,java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools

    我是java新手 我想尝试google or tools来解决车辆路由问题 只是尝试运行 java 示例here https developers google com optimization introduction run progr
  • java.lang.NoClassDefFoundError:com.google.ads.AdView

    我正在尝试将 admob 广告合并到我的应用程序中 到目前为止我已经添加了以下代码 在我的应用程序主要活动的 onCreate 方法中 adView new AdView this AdSize BANNER my code number
  • 当我必须在 Netty4 编码器中调用 ByteBuf.retain() 时?

    我正在编写一个以 NUL 终止 JSON 消息的编码器 以便在消息碎片的情况下可以对其进行解码 我找到了这个样本 gt click https github com netty netty blob master codec src mai
  • Spring JMS开始根据请求监听jms队列

    Spring提供 JMSListener用于监听来自特定队列的消息的注释 还有一个替代方案实施JmsListenerConfigurer http docs spring io spring docs current spring fram

随机推荐

  • 如何将输出重定向到文件和标准输出

    在 bash 中 调用foo会在标准输出上显示该命令的任何输出 Calling foo gt output会将该命令的任何输出重定向到指定的文件 在本例中为 输出 有没有办法将输出重定向到文件and它显示在标准输出上吗 您想要的命令名为te
  • 在 .Net 3.5 应用程序中使用 Entity Framework 4.0 [重复]

    这个问题在这里已经有答案了 可能的重复 在 NET 3 5 SP1 上使用 EF 4 是否可以在 NET 3 5 应用程序中使用 Entity Framework v4 0 我的意思是 我可以只引用 EF 4 0 的相关程序集并在我的 NE
  • ssh 登录时的 .bashrc

    当我 ssh 进入运行 Hardy 8 04 的 ubuntu box 时 我的环境变量 bashrc未设置 如果我做一个来源 bashrc 变量设置正确 一切都很好 怎么会 bashrc不是在登录时运行吗 bashrc使用 SSH 登录时
  • R 中方差分析箱线图的事后标签

    如果我有一些数据并进行方差分析和事后测试 如何制作自动添加事后分类的箱线图 而不必在 R 之外编辑图形 例如 以下是一些入门数据 install packages reshape dependencies T library reshape
  • 解析 ps 的“etime”输出并将其转换为秒

    这些是可能的输出格式ps h eo etime 21 18 26 30 15 28 37 48 14 00 01 如何将它们解析为秒 请假设天数部分至少为 3 位数字 因为我不知道它可以有多长 输出将是egreped仅一行 因此无需循环 另
  • 你能帮忙把这个非常小的 C++ 组件翻译成 Delphi 吗?

    我正在将以下 C 组件翻译为 Delphi http borland newsgroups archived at public delphi vcl components using win32 200708 0708225318 htm
  • Ruby on Rails 工作流引擎(如 IBM WorkFlow)

    RoR中有工作流程实现吗 几年来 我使用 IBM WorkFlow 开发并支持 IBM Lotus Notes 企业应用程序 该软件提供了绘制业务流程方案的可能性 例如 某人创建文档并将其发送给另一名员工 另一名员工进行一些更改并将该文档发
  • 延迟评估索引序列类型

    我需要构建一系列从外部资源加载的对象 这种加载是一项昂贵的操作 需要延迟到需要对象时为止 构建集合后 我需要对所包含的对象进行索引访问 Scala 标准库是否提供适合此用例的集合 如果没有 实施它的最佳方法是什么 Edit 索引查找最好应该
  • 从 HTML 帮助程序中提取显示名称和描述属性

    我正在建立一个自定义HTML LabelFor助手看起来像这样 public static MvcHtmlString LabelFor
  • 从日期字符串创建 JavaScript Date 对象

    我想从以下字符串 010 10 25T23 25 55 847Z 创建一个有效的 JavaScript Date 对象 该字符串来自 PostGIS 数据库 带有时区的时间戳 数据类型字段 有人知道我该怎么做吗 Fail Edit 抱歉 我
  • 从 JSON 获取数据时出现混乱

    我正在尝试使用一项以 json 格式返回所需数据的 Web 服务 现在的实际问题是我可以从字符串中的特定 Web 服务 url 获取数据 string url http api oodle com api v2 listings key T
  • HTMLAgilityPack 获取带有 id 属性的 td 标签的内部文本

    我正在尝试使用 HTMLAgilityPack 选择带有 id 属性的 td 的内部文本 网页代码 td 5 td td 8 39pm td td 8 58pm td Code HtmlAgilityPack HtmlDocument do
  • woocommerce 如何获取当前类别

    我正在访问archive products php在 woocommerce 上显示我的产品 就像 woocommerce 中的正常流程 在 archive products php 页面上 我添加了侧边栏 其中包含我商店拥有的所有产品类别
  • eglSwapBuffers 不稳定/缓慢

    我在使用 NDK 和 egl 命令的 Android 平板电脑上遇到渲染时间非常短的问题 我已定时致电eglSwapBuffers并且花费的时间量不定 经常超过设备帧速率 我知道它会同步刷新 但大约是 60FPS 而这里的时间远低于这个值
  • 如何通过按外来对象字段的值进行选择来构建查询

    使用外来对象字段的值进行查询的最佳方式是什么 假设我有这三门课 UnitResult 类描述了单位数量 DatabaseTable public class UnitResult public static final String ID
  • 我们如何使用 s3 cp 和不同的配置文件在不同帐户/凭证的存储桶之间复制 s3 文件?

    我创建了两个配置文件 一个用于源存储桶 一个用于目标存储桶 并使用以下命令进行复制 aws s3 cp profile source profile s3 source bucket file txt profile target prof
  • 如何生成没有破折号的uuid

    我正在创建一个具有以下表定义的表 CREATE TABLE auth id UUID PRIMARY KEY DEFAULT gen random uuid role VARCHAR 64 生成的 uuid 的形式为a0eebc99 9c0
  • jQuery:在 html() 中替换()

    如何替换 html 部分replace div a href http www google com google com a div JS var e div fix e html replace google com duckduckg
  • 使用 Laravel Auth 中间件

    Laravel 5 1 的文档确实很少 我需要清楚地了解如何使用 Auth 中间件保护路由 文档告诉我们将 middleware gt auth 参数添加到路由中 或者可以做 public function construct this g
  • Heroku JVM 调优

    我已经在 Heroku 的 Play2 框架上编写了一个应用程序 但遇到了内存问题 2013 03 21T01 28 35 00 00 heroku web 1 Process running mem 543M 106 1 2013 03