草庐IT

php - 在 OutOfMemory 异常时让 PHP 转储堆

我目前正在调试一个经常遇到OutOfMemory异常的脚本。它作为cronjob运行并且通常运行良好,但是当cronjob有一段时间没有运行时(无论出于何种原因)脚本必须处理许多排队的元素并将遇到OutOfMemory异常。通过检查代码,我无法发现问题。我相信其中一个迭代函数调用可能会泄漏内存,但我不确定是哪一个以及在哪里。当发生OutOfMemory异常时,是否可以选择让PHP转储堆?我也许可以从那里发现问题(很有可能)。 最佳答案 虽然我找不到“异常时转储堆”选项,但我确实找到了get_defined_vars()如果从全局范围

php - 我应该如何开始使用 PHPUnit 作为我已经制作的一堆函数和类的测试框架?

我已经阅读了文档。基本上,我在遵循BankAccount示例的同时尝试了测试。但是我得到错误:Warning:require_once(PHP/CodeCoverage/Filter.php)[function.require-once]:failedtoopenstream:Nosuchfileordirectoryin[...]/unitTest/phpunit.phponline38此外,PHP脚本似乎以#!/usr/bin/envphp开头,这表明它们应该从控制台运行。我宁愿从浏览器运行这些...假设我有一个返回字符串的函数f1()。应该如何进行测试?我错过了什么吗?

java - 由于 ReadVirtual 失败,无法创建堆转储

我们有一个在Java6update45中运行的JBoss应用程序服务器。我们遇到了很可能是我们自己引入的OutOfMemoryErrors。我们想分析这些并想创建一个堆转储。此操作失败,但出现以下异常。谷歌搜索和搜索stackoverflow对我帮助不大,有没有人知道如何从这台机器上获取堆转储?谢谢!马丁异常(exception)情况是:C:\>"d:\ProgramFiles\Java\bin\"jmap-F"-dump:format=b,file=D:\heapdumps\20130620_085902_heap.dump"1832AttachingtoprocessID1832,

java - 使用 jackson ObjectMapper 时保留的堆大小更大

我正在使用Jackson映射器将我的java对象转换为字符串,但这些对象不会被堆中的GC删除。我的代码ListreportList;//ThiscontainsmyobjectsObjectMappermap=newObjectMapper();//org.codehaus.jackson.map.ObjectMapperreturnmap.writeValueAsString(reportList);这将String返回到我的View层,但是通过对象映射器解析的对象保留在堆中。我已经进行了堆转储。ClassName|Objects|ShallowHeap|RetainedHeap--

java - 堆内存每次都触及新高

我图表中的peek每次都触及新高。我的虚拟机参数如下,-XX:+UseCompressedOops-XX:+TieredCompilation-Xms1303m-Xmx1303m-XX:MaxPermSize=256m-Djava.net.preferIPv4Stack=true-Dorg.jboss.resolver.warning=true-Dsun.rmi.dgc.client.gcInterval=3600000-Dsun.rmi.dgc.server.gcInterval=3600000争论是好是坏? 最佳答案 这对我来说

java - 与 Java 堆大小作斗争,本地 Java 和 Java web 启动之间的巨大差异

上周末我接到一个客户的电话,告诉我他们的Java程序在导入数据时没有响应。数据是一个包含4个工作表的简单Excel工作簿。正在从列中读取所有数据并将其添加到数据库中。所以我开始调查并得到了一些奇怪的结果。使用RuninNetbeans测试导入。这使用Java64位实例:第一次运行第二次运行使用JavaWebstart测试导入。这是通过打开JNLP文件并使用Java32位实例启动的:第一次运行在这种情况下,我遇到了客户报告的相同问题,程序在导入过程进行了一段时间后停止响应。这是因为据我所知,我已达到最大堆大小(红色圆圈)。第二次运行所以我决定通过将以下内容添加到我的JNLP文件来增加初始

java.lang.OutOfMemoryError GC 开销限制超过 Java 堆空间?

java.lang.OutOfMemoryError:Javaheapspace是什么意思该消息意味着应用程序只需要比正常运行可用的更多Java堆空间。java.lang.OutOfMemoryError:GCoverheadlimitexceeded是什么意思此消息意味着由于某种原因,垃圾收集器占用了过多的时间(默认情况下占进程所有CPU时间的98%),并且在每次运行中回收的内存很少(默认情况下占堆的2%)。这在内部也意味着当应用程序只需要比正常运行可用的更多Java堆空间时。那么我的问题是,以上两种情况会触发哪种情况?所以这是我的理解,何时会根据场景抛出特定异常:-假设我分配了1G

java - 计算 jvm 堆大小以托管 Web 应用程序

我想在他们提供32、64、128、256MB计划的私有(private)JVM上托管Web应用程序。我的Web应用程序使用Spring。我为每个登录的用户session存储一些对象。我的问题是:我如何分析我的网络应用程序以查看它需要多少堆大小以便我可以选择一个计划?我如何模拟数百名用户同时登录?我正在使用Netbeans6.7Java1.6Tomcat6.0.18开发应用程序谢谢。 最佳答案 要进行分析,您可以使用VisualVM,YourKit等要模拟负载,您可以使用ApacheJMeter

java - 一个类什么时候从堆内存中卸载

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Unloadingclassesinjava?类什么时候从内存中卸载?为了加载一个类,我们可以调用Class.forName("NameOfClass");或者当我们创建一个类的对象时,然后将该类加载到内存中。

java - 您可以覆盖由 -XX+HeapDumpOnOutOfMemoryError 生成的堆转储的文件权限吗?

在Linux上,当使用-XX+HeapDumpOnOutOfMemoryError时,生成的hprof文件归运行java进程的用户所有,权限为600。我知道这些权限是最安全的,但是否可以覆盖它们? 最佳答案 你可以用启动JVMjava-XX:+HeapDumpOnOutOfMemoryError-XX:OnOutOfMemoryError="chmodg+rjava_pid*.hprof"{mainclass}{args}该命令在创建堆转储后运行。例如,这将允许对当前目录中的所有堆转储文件进行组读取访问。