Coldfusion ColdSuion中请求的正常内存使用是什么

Coldfusion ColdSuion中请求的正常内存使用是什么,coldfusion,Coldfusion,查看Coldfusion的服务器监视器,我看到许多平均内存使用量在100KB到700KB之间的请求。这对我来说似乎很高,是吗 如果它是高的,它将解释为什么服务器似乎喜欢吃掉RAM并且从不让它离开。找出内存使用率如此之高的原因的好方法是什么。我想不出会用这么多的内存。有没有调试Coldfusion请求的好方法?我们很幸运地使用了SeeFusion,并在服务器上简单地使用Jconsole来监视内存和线程。 我们确实发现,在呈现数据以返回给用户的过程中,内存使用率最高。一旦表单显示出来,内存就会显著下

查看Coldfusion的服务器监视器,我看到许多平均内存使用量在100KB到700KB之间的请求。这对我来说似乎很高,是吗


如果它是高的,它将解释为什么服务器似乎喜欢吃掉RAM并且从不让它离开。找出内存使用率如此之高的原因的好方法是什么。我想不出会用这么多的内存。有没有调试Coldfusion请求的好方法?

我们很幸运地使用了SeeFusion,并在服务器上简单地使用Jconsole来监视内存和线程。
我们确实发现,在呈现数据以返回给用户的过程中,内存使用率最高。一旦表单显示出来,内存就会显著下降。还要确保垃圾收集设置正确。

您是否确实遇到了“内存不足”异常?还是“堆栈空间不足”错误?仔细检查日志,因为我以前有过CF自动重启的经验-检查
server.log
文件

如果答案是肯定的,那么-如前所述-您可以使用类似JConsole的工具来监视内存使用情况。如果您看到内存在这些异常之前不断增加,那么您需要找出内存泄漏的位置。实现这一点的最佳方法是在当时获取JVM的转储并使用meomry分析工具。我相信这是我们的经验

如果没有异常等,那么请注意JRun使用了大量内存。在Win32服务器上,通常介于500MB和1.5GB之间,即使JVM堆大小的CF Admin设置为1024MB。JRun和JRun运行在Java之上,运行一个应用服务器,所以这将足够高。您需要注意的是,使用JConsole时,内存的使用越来越多

至于GC调优,只有当你真的有问题的时候,才会弄乱这些设置。这很复杂,如果操作不正确或不了解JavaGC的工作原理,将导致服务器不稳定。您可以获取基本信息,然后可以将设置(例如,
-XX:MaxPermSize=192m
)作为JVM参数传递到CF admin中


追根究底的内存问题可能是具有挑战性和耗时的,所以祝你好运

听起来像是内存泄漏。您希望生成一个JVM堆转储—JVM内存的快照。最简单的方法是使用jvisualvm。然后使用中的泄漏报告分析该快照

设置JVM JMX端口以获取ColdFusion堆转储的步骤

  • 编辑jvm.config并添加到java.args:-Dcom.sun.management.jmxremote.port=3333-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=true
  • 复制\ColdFusion9\runtime\jre\lib\management\jmxremote.access.template->jxmremote.access
  • 编辑jxmremote.access将“controlRole changeIt”添加到文件末尾,用您选择的密码替换“changeIt”
  • 在Windows资源管理器中>jxmremote.access>右键单击>属性>安全性>高级
    • 所有者>管理员
    • 权限>取消选中“允许可继承…”>对话框单击“复制”
    • 添加具有完全控制权的“管理员”
    • 删除所有其他权限项
    • 单击“确定”
  • 重新启动ColdFusion
生成堆转储

  • 在ColdFusion box上安装JDK
  • 从jdk install dir/bin/jvisualvm运行jvisualvm
  • 打开JMX连接(例如localhost:3333)
  • 在“监视器”选项卡上,单击堆转储按钮,并通过右键单击其节点保存结果
  • 获取此文件并在Eclipse内存分析器中打开,然后运行泄漏报告
  • 深入研究,使用Eclipse帮助了解如何评估

我使用这种方法在ColdFusion代码中发现了大量内存泄漏

对于GC来说什么是合适的?这是如何设置的?由于很难设置准确的值,因此很难回答什么是“合适的”收集。我们费了好一阵子才找到适合我们的方法。我将在这里进行简化,但它是每个应用程序的请求数、每个请求消耗的内存量、用户数等的函数。这会导致监视创建和处理的线程,等等。这是一项乏味的工作,我不确定它是否能使我们更接近解决方案。最后,我们添加了更多内存,并将其设置回建议的设置。;)祝你好运我在Win2k8x64服务器上将JVM堆设置为10240。但是,每当接近6GB内存时,服务器似乎会挂起并没有响应。这里的问题是,即使是监控服务(我已经设置为作为一个单独的服务器运行)也没有响应,所以我永远看不出我到底错了什么。哇-6GB的内存!还有一个10GB的堆!我无法想象一个普通的web应用服务器需要这么多内存。你是一个非常繁忙的网站吗?但是首先:你试过使用JConsole吗?如果您正在将CF作为windows服务运行,请检查此链接:-保持其运行,然后在其增长约1GB时进行内存转储和检查。该分析可能会显示一个类是罪魁祸首。是的,它没有那么忙,尽管有很多模板。明天我会给jConsole看一看。