- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的公司,我们在 Spring(Flex 前端)中开发了一个企业 Web 应用程序,并以 SAAS 风格在 Tomcat 6 中将该应用程序部署到我们的客户。
最近我们遇到了(看似)随机的 OutOfMemory 错误,所以经过调查我知道我们应该在错误发生时检查 JVM 的内存转储。
我们使用的JVM是1.6.18,Tomcat版本是Windows Server 2008下的Tomcat 7.0.23。
我在 Tomcat 监控面板(在 Java 选项卡下)中添加了参数 -XX:+HeapDumpOnOutOfMemoryError,但机器没有生成任何转储。
完整的 java 选项在我们正在调查的服务器上设置如下:
-Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 7.0
-Dcatalina.base=C:\Program Files\Apache Software Foundation\Tomcat 7.0
-Djava.endorsed.dirs=C:\Program Files\Apache Software Foundation\Tomcat 7.0\endorsed
-Djava.io.tmpdir=C:\Program Files\Apache Software Foundation\Tomcat 7.0\temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf\logging.properties
-XX:PermSize=128m
-XX:MaxPermSize=1024m
-Xms1024m
-Xmx6144m
-XX:+HeapDumpOnOutOfMemoryError
-Dcom.sun.management.jmxremote.port=3333
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
如您所见,最大堆大小非常大(6 Gigs),因为我们的应用程序特别重。出于测试原因,我添加了 jmx 参数,以便使用 VisualVM 实时查看 JVM 状态,但在我查看它时没有发生任何事情。
stderr 显示的是:
java.lang.OutOfMemoryError
在它之前没有任何内容(除了我不知道是否相关的其他错误,但它们在 OOM 之前记录了几个小时或几分钟)并且在它之后没有任何内容。
它不报告内存部分(Java 堆大小或 Permgen 空间)对我来说似乎很奇怪。
也许保留的内存堆太大,JVM 无法写入,因为它处于临界状态(OOM)?也许 JMX 参数搞砸了?
这是当前运行的 JVM 的 VisualVM 屏幕截图:
更新:
我安装了另一个 tomcat 安装(与问题来源相同的版本和相同的 java 选项)相同的 web 应用程序被修改为通过无限地填充数组列表来手动引发 OOM环形。测试证明 java 选项 -XX:+HeapDumpOnOutOfMemoryError 有效,因为在我引发 OOM 后产生了内存转储;在这种情况下,错误是:
java.lang.OutOfMemoryError: Java Heap space
接着是堆栈跟踪。因此,问题似乎不在于我的 JVM args 表示法,而在于我遇到的特定类型的错误。
另一个特点是,在我的测试中抛出 OOM 错误后,该应用程序继续在 Tomcat 中运行。另一方面,我的原始问题中的 OOM 导致 Tomcat 服务停止。
遗憾的是,在它停止之前没有采取堆栈跟踪,看起来很难进一步调查。 :(
最佳答案
将 -XX:HeapDumpPath="/some/path/dump.out"
添加到您的 JVM args 显式设置堆转储文件位置
关于Java Spring 应用程序 + Tomcat : JVM doesn't make memory dump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27616762/
我正在尝试将我的 xcode 应用程序存档到 Itunes,但我得到了 following errors : 1.) “配置文件不支持推送通知。” 2.) “配置文件不包含 aps-environme
我正在尝试为我们的组织构建一个 Web 应用程序,它将使用我们的 O365 进行身份验证。在尝试使用管理员帐户连接到域时,我遇到了这个错误,其中提到 admin..onmicrosoft.com(全局
当我尝试构建 MUAI 项目时,它给出错误“该项目不知道如何运行配置文件 sample.WinUI”。项目已构建但无法运行。我使用的是 Visual Studio 2022 Preview(17.0
当某项包含在列表中时,有一个查询要搜索,但当某项不在列表中时,则没有查询。 此查询查找在给定列表 cdiffnums 中没有 ContactNum 的 customer 对象。我该怎么做才能仅返回此列
我们有一个黑盒第三方 Java 程序,可以从某个位置获取输入文件并制作 PDF。每次输入时,它都会将 list 文件放在同一位置,这需要我们以受控方式提供文件。 list (或 .xen/.que)是
我看到这个has选择器,hasnt 选择器在哪里?我想查找不包含图像的表格。 最佳答案 类似$("table:not(:has(img))")? 关于jQuery: "Doesn' t 有“选择器?,
为什么?这让我发疯??? $(document).ready(function () { $('#slides1').bxSlider({ prev_
我是 kubernetes 的新手。 我无法使用 kubectl 进行部署,但我可以在 kubernetes 仪表板上看到所有部署。我该如何解决这个问题? user@master:~$ kubectl
这个问题已经有答案了: What do querySelectorAll and getElementsBy* methods return? (12 个回答) 已关闭 6 年前。 HTML JS
我有两个数组,一个包含字符串值,另一个包含整数值,尽管这可能很愚蠢,但我陷入了困境,我需要一点帮助,我想遍历两者,如果 arr1 包含 arr2 中不存在的项目,它将被推送到 newArray 这是我
我一直在尝试为我的网站安装一个 PHP 脚本,设置所有内容,通过脚本附带的 phpMyAdmin 导入 SQL 文件,但我面对的是一个空白页面,错误如下所示: File /home/user/publ
我正在努力将站点的服务器从 PHP 5.2.17 升级到 5.5,以使其在未来的升级中保持新鲜,并安装其他需要 PHP 5.4+ 的软件。 数据库有一个我正在测试的表,其中有许多列在初始 INSERT
我一直收到这个错误: Object doesn't support this property or method 每当我在 IE7 和 IE8 中运行我的代码时。这是它停止的代码: _renderU
我想使用正则表达式排除某些单词。 输入文本: aaa1234 cc bbb1234 c1234 cc dd aacc cccc ccadf cc 输出文本: aaa1234 bbb1234 c1234
我有一个名为 adjust_status 的存储函数和一个包含 status 列的表 users。 select adjust_status(status) as adjusted_status
我有一个表,其中有一列由插入前触发器填充,该列设置为 NOT NULL 并且没有DEFAULT VALUE。 当我执行 INSERT TABLE 而不传递此列时,我收到错误:1364 - Field
这个问题已经有答案了: Modify the value of each textfield based on original value using jQuery (3 个回答) 已关闭去年。 使
我正在阅读 this , 它说 @keyframes rules don't cascade, so animations never derive keyframes from more than
编辑:我解决了问题,请参阅答案中的链接。 我正在使用 XMLHttpRequest AJAX API 将来自不同网站的数据发送到我们在 PythonAnywhere 中的服务器。奇怪的事情发生了:根据
我已经阅读了 Linux 调用 dlopen() 和 dlsym() 的文档,它们分别打开一个动态库并在库中加载一个符号。 这些调用似乎等同于 Windows 的 LoadLibrary() 和 Ge
我是一名优秀的程序员,十分优秀!