ColdFusion jvm 垃圾收集不

2023-12-24

我有一个 cfc 方法,它循环遍历列表并通过 cfhttp 进行一系列 SOAP 调用。然后将结果插入数据库。

该过程本身工作得很好,问题是java内存慢慢填满,最终(取决于返回的记录中的元素数量)停止工作。没有错误或任何可见的东西它就停止了。如果我通过 Coldfusion 管理查看应用程序日志文件,我会看到以下一个或两个错误:

GC overhead limit exceeded The specific sequence of files included or processed is:

or

Java heap space The specific sequence of files included or processed is:

下面是我正在运行的代码的简化版本:

<cfsetting requesttimeout="3600">
<cfloop condition="thisPass lt 10">
    <cfscript>
        runtime = CreateObject("java","java.lang.Runtime").getRuntime();
        objSystem = CreateObject( "java", "java.lang.System" );
        soapBody = '';
        soapResponse = '';
        thisStruct = '';
        lock scope='application' type='exclusive' timeout='60' {


//This is where I am trying to manage the memory and call garbage collection


        try {
            freeMemory = runtime.freeMemory()/1024/1024;
            writeOutput("- fm = "&freeMemory);
            if (freeMemory < 200){
                objSystem.gc();
                sleep(1000);
                writeDump(' - dumping freeMemory');
             }
         }
         catch(any error) {
            writeDump(' - trying to dump GC as '&now()& ' freeMemory = '&freeMemory);
         }
         }
        </cfscript>
        <cfsavecontent variable="soapBody">
            <?xml version="1.0" encoding="utf-8"?>
            [ BUILD SOAP ENVELOP ]
        </cfsavecontent>

        <cfhttp url="[URL]" method="post" result="httpResponse" 
                        timeout="600" resolveurl="false">
                <cfhttpparam type="header" name="SOAPAction" value="[URL2]" />
                <cfhttpparam type="xml" value="#trim( soapBody )#"/>
            </cfhttp>


            <cfscript>
                soapBody = "";
                soapResponse = httpResponse.fileContent;
                soapResponse = xmlParse( soapResponse );
                thisStruct = xmlSearch(soapResponse,'/soap:Envelope/soap:Body/')[1].xmlChildren[1].xmlChildren[1].xmlChildren;
                writeOutput("-"&arrayLen(thisStruct)&' records');
                getPageContext().getOut().flush();
                if(arrayLen(thisStruct) == 2500){
                    thisPass = thisPass+1;
                } else {
                    writeOutput("- total records = "&(2500*(thisPass-1))+arrayLen(thisStruct));
                    thisPass = 100; // since looping while thisPass lt 10 this should prevent the next iteration
                }
            </cfscript>

            <cfloop from="1" to="#arrayLen(thisStruct)#" index="i">
                [RUN PROC TO INSERT RECORDS]
            </cfloop>
        </cfloop>

GC 似乎有时释放一点内存,但没有任何可靠性。我明白 GC() 只是一个推荐让java释放一些未使用的内存,但我不确定如何让它强制释放内存。可能某个地方有泄漏,但我没有看到它。我希望这是我忽略的显而易见的事情,并且我承认我的 java 知识极其有限。

有没有java大师可以看到我的错误?

UPDATE :这是输出示例,这有助于查看内存的下降情况。

有 236 个列表可供循环

  1. 88185 - fm = 293.564407349 -6 条记录 - 总记录 = 6
  2. 88389 - FM = 290.86995697 -116 条记录 - 总记录 = 116
  3. 88390 - FM = 308.382568359 -262 条记录 - 总记录 = 262
  4. 88839 - FM = 292.707099915 -2032 条记录 - 总记录 = 2032
  5. 91088 - fm = 290.711753845 -6 条记录 - 总记录 = 6
  6. 92998 - FM = 287.754066467 -5 条记录 - 总记录 = 5
  7. 95510 - fm = 309.919425964 -91 条记录 - 总记录 = 91
  8. 96478 - FM = 292.035064697 -1180 条记录 - 总记录 = 1180
  9. 96479 - FM = 259.001213074 -1113 条记录 - 总记录 = 1113
  10. 96480 - FM = 261.121406555 -110 条记录 - 总记录 = 110
  11. 96796 - fm = 267.235244751 -2 条记录 - 总记录 = 2
  12. 96799 - fm = 265.037582397 -0 条记录 - 总记录 = 0
  13. 97435 - fm = 263.589103699 -2500 条记录 - fm = 227.629760742 -2500 条记录 - fm = 200.85987854 -2500 条记录 - fm = 202.156776428 -2500 条记录 - fm = 166.366210938 - 转储freeMemory -656 条记录 - 总记录 = 10656
  14. 98173 - fm = 160.579734802 - 转储空闲内存-35条记录-总记录= 35
  15. 99111 - fm = 176.218482971 - 转储 freeMemory -0 条记录 - 总记录 = 0
  16. 100998 - fm = 194.708694458 - 转储空闲内存-185条记录-总记录= 185
  17. 101811 - fm = 160.61415863 - 转储freeMemory -2500条记录 - fm = 112.862670898 - 转储freeMemory -2500条记录 - fm = 86.2071380615 - 转储freeMemory -2500条记录 - fm = 52.9639358521 - 转储freeMe莫里 -1064 条记录 - 总记录 = 8564
  18. 105014 - fm = 56.1721343994 - 转储freeMemory -14条记录 - 总记录= 14
  19. 105992 - fm = 73.0022964478 - 转储freeMemory -14条记录 - 总记录= 14
  20. 107539 - fm = 75.9522399902 - 转储空闲内存-93条记录-总记录= 93
  21. 107580 - fm = 58.345199585 - 转储空闲内存-2500条记录

这并不是 Java 不能很好地管理 GC,而是你没有管理你放入(以及从内存中取出)的内容,以便垃圾收集器可以清理它们。 。你正在(试图~)治疗症状而不是问题。

查看内存中的内容以及为什么您希望进行 GC 处理的内容isn't正在接受GC教育。可能是您引用了共享范围内的内容(意外地),或者类似的内容。不过,在 Java 之上使用 ColdFusion 解决此类问题有点黑暗艺术。

但是,当您强制执行 GC 时,不要尝试“修复”事物未被 GC 的“问题”,而是解决导致内存 a) 填满的问题; b) 当您认为应该可以进行 GC 时,却不能进行 GC。

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

ColdFusion jvm 垃圾收集不 的相关文章

  • 如何使用Spring WebClient进行同步调用?

    Spring Framework in 休息模板 https docs spring io spring framework docs current javadoc api org springframework web client R
  • 使用 JDBC 获取 Oracle 11g 的最后插入 ID

    我是使用 Oracle 的新手 所以我将放弃之前已经回答过的内容这个问题 https stackoverflow com questions 3131064 get id of last inserted record in oracle
  • 当路径的点超出视野时,Android Canvas 不会绘制路径

    我在绘制路径时遇到了 Android Canvas 的一些问题 我的情况是 我有一个相对布局工作 如地图视图 不使用 google api 或类似的东西 我必须在该视图上绘制一条路径 canvas drawPath polyPath bor
  • 如何将jscrollpane添加到jframe?

    我有以下源代码 有人可以给我建议如何将 jscrollpane 添加到 jframe 上吗 我尝试了几次将其添加到 jframe 但没有任何进展 它甚至没有显示 public class Form3 JFrame jframe new JF
  • Logback:SizeAndTimeBasedRollingPolicy 不遵守totalSizeCap

    我正在尝试以一种方式管理我的日志记录 一旦达到总累积大小限制或达到最大历史记录限制 我最旧的存档日志文件就会被删除 当使用SizeAndTimeBasedRollingPolicy在 Logback 1 1 7 中 滚动文件追加器将继续创建
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • 如何在java Spring Boot中实现通用服务类?

    我有许多具有重复代码的服务 我想知道如何实现通用服务 以便我的所有服务都可以扩展它 服务接口示例 重复代码 Service public interface IUserService List
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 避免 Java 中的重复导入:继承导入?

    有没有办法 继承 导入 Example 常见枚举 public enum Constant ONE TWO THREE 使用此枚举的基类 public class Base protected void register Constant
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 如何处理 StaleElementReferenceException

    我正在为鼠标悬停工作 我想通过使用 for 循环单击每个链接来测试所有链接的工作条件 在我的程序中 迭代进行一次 而对于下一次迭代 它不起作用并显示 StaleElementReferenceException 如果需要 请修改代码 pub
  • Java 的 PriorityQueue 与最小堆有何不同?

    他们为什么命名PriorityQueue如果你不能插入优先级 它看起来与堆非常相似 有什么区别吗 如果没有区别那为什么叫它PriorityQueue而不是堆 默认的PriorityQueue是用Min Heap实现的 即栈顶元素是堆中最小的
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • 基于 Spring Boot 的测试中的上下文层次结构

    我的 Spring Boot 应用程序是这样启动的 new SpringApplicationBuilder sources ParentCtxConfig class child ChildFirstCtxConfig class sib

随机推荐

  • 我的 JBoss 服务器在 Linux 上达到 100% SYS CPU;什么会导致这种情况?

    我们已经调试这个 JBoss 服务器问题很长时间了 大约工作 10 小时后 服务器陷入 100 CPU 恐慌攻击并停止运行 在此期间您无法运行任何新程序 因此您甚至无法kill quit获取堆栈跟踪 这些 100 SYS CPU 负载持续
  • 在 Spring Boot WebSocket 中向特定用户发送通知

    我想向特定客户发送通知 例如用户名 user Configuration EnableWebSocketMessageBroker public class WebSocketConfiguration extends AbstractWe
  • 使用 IO monad 的 Haskell 单元测试

    我正在尝试为返回 IO monad 的 haskell 函数编写 HUnit 测试 因为它们执行文件 I O 有什么办法可以做到这一点吗 现在我正在尝试编写一个仅返回 Bool 的方法 这可以作为我的测试 combine FilePath
  • OSCAR_SEARCH_FACETS 用于过滤产品列表

    我正在使用 django oscar 开发一个电子商务网站 产品已列出 我必须应用过滤器 例如年份 价格等 我们可以使用 oscar facet 来实现此过滤功能吗 我尝试添加以下内容奥斯卡文档 http django oscar read
  • Django 带过滤器的左外连接

    我正在使用 Django 的内置用户模型 并有一个自定义 Foo 对象 其中包含 User 的外键 我希望选择符合某些约束的所有 User 对象和所有 Foo 对象 如下所示 SELECT from auth user LEFT OUTER
  • 如何理解 Haskell 中的“$”用法[重复]

    这个问题在这里已经有答案了 当您想要将一堆函数应用于同一个变量时 就会发生这种情况 它可能如下所示 map f gt f 4 odd even 但从LYAH http learnyouahaskell com higher order fu
  • 在 MSBuild 中使用 Studio 的“自定义工具”

    我有一个 Visual Studio 的 自定义工具 可以将一些模板文件合并到代码中 为了一致性和可移植性 我希望在 Visual Studio 之外构建时能够从 MSBuild 运行此模板处理器 Visual Studio 为文件创建以下
  • Spring security Remember me 不适用于 Spring MVC 应用程序。

    身份验证和授权工作正常 但记住我在应用程序中无法正常工作 我使用了 Spring Security 的数据库身份验证和 LDAP 身份验证 一次仅一个 以及大量 Spring Security 自定义 下面是我的 spring 安全上下文文
  • Docker 使用哪种算法来使缓存无效?

    为了减少动态配置的 EC2 机器上的 Docker 镜像构建时间 我决定使用以下方法 每晚在主主机上运行 docker compose build 将整个 var lib docker 目录从主主机克隆到新盒子 在新盒子上运行 docker
  • Autohotkey 和 Windows 10:如何获取当前资源管理器路径

    我使用 autohotkey 版本 1 0 48 05 因为我坚 持使用 activeaid 读取当前路径的脚本如下 一直有效到Win 7 Get full path from open Explorer window WinGetText
  • 滚动到 UICollectionView 中的下一个单元格

    我在容器视图中有一个 UICollectionView 它的大小使得我一次只能看到一个单元格 我已禁用垂直滚动 因此仅发生水平滚动 当我在单元格之间水平滚动时 一切都很顺利 这种滚动的缺点是我可以滚动并到达一个位置 在该位置我可以看到两个单
  • 如何在java程序中禁用堆栈跟踪生成?

    我想禁用抛出异常时生成的堆栈跟踪 我用过了 Runtime getRuntime traceInstructions false Runtime getRuntime traceMethodCalls false 但我仍然可以看到生成的跟踪
  • Protractor:在不知道文件名的情况下测试下载文件

    我跟着这个答案 https stackoverflow com a 27031924 858913它看起来几乎就是我需要的东西 问题是他已经知道文件名 而我正在执行下载文件的 e2e 测试 但文件名取决于当前时间 即使是毫秒 所以我真的不知
  • maven jasperreports-functions-6.1.1 的存储库

    明显地
  • 如何在r中绘制KNN簇边界

    我正在使用 K 最近邻居的虹膜数据 我已将物种类型替换为数据中的数值 即 setosa 1 versicolor 2 virginica 3 现在我正在将数据放入训练和测试集中 并在物种colmum的基础上训练这个模型 Clustering
  • 长度示例中“List a”中的“a”是什么?

    我想知道在哪里可以找到有关 a 用在长度示例 http elm lang org examples length 似乎是某种类型 1 2 3 is a List Int 只能与整数列表一起使用的函数必须具有List Int在他们的类型签名中
  • __init__ 的目的

    我读了一些书 但无法像我想的那样完全理解这一点 我正在从 LPTHW 教程中制作一个 选择你自己的冒险 小游戏 这是完整的脚本 http codepad org YWVUlHnU http codepad org YWVUlHnU 我不明白
  • 在Python中计算modbus的CRC16

    首先 抱歉 我是初学者 我在 modbus 上得到以下字节序列 01 04 08 00 00 00 09 00 00 00 00f8 0c 该字节序列上粗体的 CRC 是正确的 但是 要检查 创建 CRC 我必须遵循设备规范 其中规定 错误
  • 什么是段以及如何在 8086 模式下寻址它们?

    自从我开始使用 8086 汇编语言编程以来 我一直在思考这些段和段寄存器 我面临的问题是 我无法对脑海中的片段有一个直观的图像 因此我不清楚这些概念 谁能帮我理解这个概念将其与现实世界场景联系起来 我还有以下问题 问题一 据我了解 在启用2
  • ColdFusion jvm 垃圾收集不

    我有一个 cfc 方法 它循环遍历列表并通过 cfhttp 进行一系列 SOAP 调用 然后将结果插入数据库 该过程本身工作得很好 问题是java内存慢慢填满 最终 取决于返回的记录中的元素数量 停止工作 没有错误或任何可见的东西它就停止了