小编Gar*_*ton的帖子

ColdFusion调度程序线程吃CPU

我已经在开发盒上运行CF10,Windows 7,64位.每隔一分钟左右,CF10的CPU使用率将在大约20秒内上升到100%并再次下降.这很规律.

我发现很难诊断出这个问题.我已经看到了关于客户端变量清除,日志记录,监控和各种方式的讨论 - 但我已经把这些全部转为无济于事.

使用VisualVM,我设法将问题跟踪到"调度程序"线程.我有5个处于等待状态.每个都会定期运行,从而大大提高CPU的性能.采取线程转储,似乎所有这些线程都在调用java.io.WinNTFileSystem.getBooleanAttributes- 我已经看过几次提到的可能存在问题.

更新:最近我一直在onSessionEnd上玩另一个应用程序,并发现scheduler-x线程似乎是ColdFusion的内部 - 我的onSessionEnd任务似乎总是在其中一个线程中运行.

查看temp文件夹,我可以看到已经创建了许多EH Cache文件夹,我认为这些文件夹与查询缓存有关.我运行的应用程序相当广泛地使用它.我认为清除临时文件夹可能会提高性能,但它没有任何效果.

值得注意的是,如果我在没有实际调用任何应用程序的情况下启动CF服务,则不会出现问题.这可能表明问题出在应用程序本身,但它们不会在生产中造成任何问题 - 仅限于此框.也没有设置任何计划任务.

下面是导致高CPU的一个线程的示例.我很感激任何帮助来诊断这个线程正在做什么和为什么,以及如何可能阻止它使用这么多资源.

"scheduler-2" - Thread t@84
   java.lang.Thread.State: RUNNABLE
    at java.io.WinNTFileSystem.getBooleanAttributes(Native Method)
    at java.io.File.isDirectory(File.java:849)
    at coldfusion.watch.Watcher.accept(Watcher.java:352)
    at java.io.File.listFiles(File.java:1252)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:386)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.getFiles(Watcher.java:397)
    at coldfusion.watch.Watcher.checkWatchedDirectories(Watcher.java:166)
    at coldfusion.watch.Watcher.run(Watcher.java:216)
    at coldfusion.scheduling.ThreadPool.run(ThreadPool.java:211)
    at coldfusion.scheduling.WorkerThread.run(WorkerThread.java:71)
Run Code Online (Sandbox Code Playgroud)

我的环境:

  • 赢7位64位
  • CF10更新12
  • JDK 1.8.0_11

问题出现在多个版本的JVM上 - 此版本目前用于使监控可用.

我的java设置:

  • 最小堆大小:512mb
  • 最大堆大小:1024mb

    -server -XX:MaxPermSize参数=512米-XX:+ UseParallelGC -Xbatch -Dcoldfusion.home …

coldfusion jvm cpu-usage tomcat7

13
推荐指数
1
解决办法
657
查看次数

使用应用程序范围的UDF扩展ColdFusion

我一直在探索构建我的ColdFusion应用程序的不同方法,并且我正在寻找关于提供应用程序范围UDF的最佳方法的一些意见.

对于我的每个应用程序,我通常使用一些并不真正属于任何特定对象的额外函数.主要是数据操作.我希望这些功能在我的应用程序中可用,既可用于CFM模板,也可用于应用程序实例化的CFC.

我看到它的方式有各种方法来实现这一点,但它们都有自己的局限性:

  1. 在应用程序范围中实例化基本Utils CFC.这是我经常使用的方法.所有的功能都可以在应用程序范围内使用,但如果我从多个应用程序实例化相同的CFC,那么它们每个都有自己的应用程序范围 - 这意味着每个都必须实例化自己的基础Utils CFC.这没有什么不对,但感觉我没有足够好地封装CFC.我并不热衷于从CFC中引用应用程序范围.

  2. 创建一个基础Utils CFC并使其他所有CFC扩展它.这样可以正常工作,这意味着CFC可以直接从CFC的THIS范围引用Utils功能 - 但这意味着Utils功能保存在每个CFC的内存中.它在概念上也不合适,因为我的其他CFC与Utils CFC没有任何关系.

  3. 将我的基础Utils CFC注入我的其他CFC.我一直在玩的另一种方法是在Application范围中实例化我的基础Utils CFC,然后将其作为对象传递给我的其他CFC中的参数.这在概念上和我的封装中都适用.与我在init方法中设置数据源的方式相同,我可以对UDF执行相同的操作.这与UDF包含在每个CFC中的问题相同.当我转储所有的CFC时,我多次得到每个UDF - 但是当我传递一个实例化的对象时,我假设它没有占用任何额外的内存空间.如果有人能证实这一点,那会很有帮助 - 我只是假设!我对这种方法唯一真正的问题是它似乎有点复杂.

  4. 让我的应用程序CFC扩展我的Utils CFC.这就是许多框架似乎要做的事情.我没有使用过这种方法,但我确信它有利有弊.

  5. CF直接在Application.cfc中从单独的模板中包含我的UDF这在功能上类似于在Application范围中实例化.

  6. 将我的UDF添加到服务器中Components.cfc 这是一个理论上的好主意 - 我可以维护基本Utils的一个副本,并确保服务器上的所有内容都可以访问它们 - 但是,如果我想在多个服务器上运行应用程序,那么它们都将全部需要那些功能.此外,对服务器的任何更新都可能会覆盖组件.它只是感觉像黑客核心 - 我敢肯定我们可以从苦涩的经历中得到所有,这很糟糕.

所以 - 我的问题是:以优雅和可重用的方式扩展CF与UDF的最佳实践是什么?以上任何选项或我没想过的东西?

coldfusion cfc railo cfml

11
推荐指数
1
解决办法
458
查看次数

调用组件函数与内联代码时的开销 - ColdFusion

我一直在诊断生成包含大约50,000行的CSV的性能问题,并且我将其缩小为每行使用一次的单个函数.

经过大量的讨论之后,我发现使用该函数会产生开销,而不是直接将逻辑放在循环中 - 我的问题是:为什么?!

有问题的函数非常简单,它接受一个字符串参数并将其传递给包含大约15个选项的switch/case块 - 返回结果字符串.我已经把一堆定时器放到了这个地方,发现这个函数调用需要花费很多时间(不是全部)才能运行0到200毫秒......但是如果我把完全相同的代码内联,它就坐每次迭代时为0.

所有这些都指向了我对对象实例化的理解中的一个基本问题,我很欣赏一些澄清.

我一直认为,如果我在页面顶部实例化一个组件,或者实际上如果我在一个持久范围内实例化它,如应用程序或会话,那么它将被放入内存并随后调用该组件中的函数将快闪电 然而,似乎调用这些函数有一个开销,而我们只谈了几毫秒,当你必须这样做50,000次时,它会很快加起来.

此外,似乎这样做会消耗资源.我对JVM使用内存的方式并不是特别精通,我已经阅读了它并使用了设置等等,但这是一个压倒性的主题 - 特别是对于那些没有Java开发经验的人.似乎在通过内联代码调用方法时,有时ColdFusion服务只会崩溃而请求永远不会结束.其他时候它确实完成了,虽然方式太慢了.这表明只有当服务器具有处理它的资源时才能完成请求 - 因此方法调用本身正在消耗内存......(?)

如果确实调用方法有附加费用,那么我就有一个大问题.将所有这些代码内联移动并不是真的可行(虽然有问题的函数很简单,但我还需要使用其他许多函数)并且这样做违背了我认为的开发人员的一切!

所以,任何帮助将不胜感激.

为了清楚起见,因为我确信有人会要求它,这里是有问题的代码:

编辑:正如所建议的,我已经将代码更改为使用结构查找而不是CFSwitch - 下面是修改后的代码供参考,但是底部的pastebin链接中还有一个测试应用程序.

在init方法中:

    <cfset  Variables.VehicleCategories = {
            'T1'    : 'Beetle'
        ,   'T1C'   : 'Beetle Cabrio'
        ,   'T2'    : 'Type 2 Split'
        ,   'T2B'   : 'Type 2 Bay'
        ,   'T25'   : 'Type 25'
        ,   'Ghia'  : 'Karmann Ghia'
        ,   'T3'    : 'Type 3'
        ,   'G1'    : 'MK1 Golf'
        ,   'G1C'   : 'MK1 Golf Cabriolet'
        ,   'CADDY' : 'MK1 Caddy'
        ,   'G2' …
Run Code Online (Sandbox Code Playgroud)

coldfusion performance components jvm overhead

9
推荐指数
1
解决办法
899
查看次数

使用ColdFusion重定向到UTF-8 URL

我正在开发一个在URL的文件夹名称中使用UTF-8字符的系统.导航到这些URL没有问题,一切都按预期工作 - 除非在网站上发布重定向到另一个页面; 因此浏览器似乎编码扩展字符.

举个例子,我试图重定向到以下相对URL:

/geschäft/käfer/ 
Run Code Online (Sandbox Code Playgroud)

如果我直接在地址栏中访问该URL,则没有问题.但是,如果我更改位置标题以将浏览器重定向到此URL,则最终会:

/gesch%E4ft/k%E4fer/
Run Code Online (Sandbox Code Playgroud)

如果我查看原始页面的响应标题(它是301重定向到翻译的内容),我可以看到这个条目:

Location:/geschäft/käfer/
Run Code Online (Sandbox Code Playgroud)

似乎正确的细节在标题中结束,但浏览器的地址栏显示上面详述的%E4的编码值.我尝试了各种方法将URL输入到位置标题中,但所有方法都得到了相同的结果.

我在Chrome 37.0.2062.120 m和Firefox 32.0.2上看到了这种行为.

这是在一个开发盒上运行,Windows 7 Home with IIS7.5

编辑: 似乎这个问题可能与ColdFusion直接相关.如果我使用Javascript重定向到网址,这可行......但需要注意的是文件必须与BOM一起保存.如果我使用cflocation,或者如果我使用pagecontext手动插入标题,则无论是否存在BOM,问题都会持续存在.

我还注意到使用的类似问题,cfinclude除非使用BOM保存调用模板,否则这些扩展字符显示不正确.

coldfusion redirect header utf-8 cflocation

6
推荐指数
1
解决办法
404
查看次数

Jquery插件,从其他方法调用函数

像这里的许多其他类似问题一样,我正在编写我的第一个jQuery插件.它旨在获取一个select元素,并将选项替换为可单击的列表元素,以用作样本.我的主要功能运行良好,但我需要添加调用另一个方法的功能,这将禁用某些选项.我的问题是,当这样做时,我需要绑定一些点击元素并取消绑定其他元素.

目前我的原始绑定包含在我的'init'方法中的函数中.我需要能够从另一个'禁用'方法调用该函数.所以这里是一些代码:

(function($){

var methods = {

    // Init method
        init    : function(options) {
            // Set options
            var
                defaults = {
                        clickCallback:  function(){} // Define empty function for click callback
                  }
            ,   settings = $.extend({}, defaults, options)


            // Function to bind options
            function fnBindOptions(var1, var2, var3) {
                // Stuff to bind elements

                    // Hit the click callback
                    settings.clickCallback.call(this); 

            }   

            return this.each(function() {

                // Check that we're dealing with a select element
                if(element.is('select')) {

                    // Loop through the select options and …
Run Code Online (Sandbox Code Playgroud)

javascript methods jquery jquery-plugins

5
推荐指数
1
解决办法
5344
查看次数

jQuery - 在新图像上运行函数

我是一个jQuery新手,所以答案可能很简单:

我有一个图像,我想用它做几件事.当用户点击"缩放"图标时,我正在运行"imagetool"插件(http://code.google.com/p/jquery-imagetool/)来加载更大版本的图片.该插件在图像周围创建一个新div,允许用户平移.

当用户点击替代图像时,我将删除旧图像并加载新图像.

问题出现在用户单击替代图像,然后单击缩放按钮时 - imagetool插件创建新div,但图像出现在...之后...

代码如下:

// Product Zoom (jQuery)
$(document).ready(function(){
$("#productZoom").click(function() {

    // Set new image src
    var imageSrc = $("#productZoom").attr("href");
    $("#productImage").attr('src', imageSrc);   

    // Run the imagetool plugin on the image
    $(function() {
        $("#productImage").imagetool({
            viewportWidth: 300,
            viewportHeight: 300,
            topX: 150,
            topY: 150,
            bottomX: 450,
            bottomY: 450
        });
    });
    return false;
});
});


// Alternative product photos (jQuery)
$(document).ready(function(){
$(".altPhoto").click(function() {

    $('#productImageDiv div.viewport').remove();
    $('#productImage').remove();

    // Set new image src
    var altImageSrc = $(this).attr("href");

    $("#productZoom").attr('href', altImageSrc);

    var img …
Run Code Online (Sandbox Code Playgroud)

javascript jquery zoom

4
推荐指数
1
解决办法
9158
查看次数

Colorbox无法显示动态生成的图像

我有一个图库系统,可以生成不同大小的图像,并将它们缓存在webroot之外.然后,我在ColdFusion中有一个包装器模板,它根据ID和大小参数显示图像.例如,URL可能是'/dspImage.cfm?imageID=123&w=600'.这将返回123宽度为的图像编号的内容600px.

这一切都很完美,但是当尝试使用Colorbox jquery插件时,似乎无法显示以这种方式提供的图像,而是返回一大堆文本和控制字符,就好像无法识别JPG文件的mime类型一样.

浏览器显示图像没有问题,我已经使用这种技术近十年没有问题,但Colorbox似乎无法处理它.如果我直接链接到JPG,它在Colorbox中工作正常.

我有其他灯箱插件可以使用这种图像服务技术,但我喜欢colorbox而且我不愿意使用另一个灯箱,如果我可以帮助它.

有没有人有什么建议?

作为参考,从图像服务脚本发回的标头是:

Content-Length  178856
Content-Type    image/jpeg;charset=UTF-8
Date    Sun, 12 Aug 2012 15:07:54 GMT
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET
Run Code Online (Sandbox Code Playgroud)

我注意到,当通过colorbox请求标头直接点击图像包含:

Accept  image/png,image/*;q=0.8,*/*;q=0.5
Run Code Online (Sandbox Code Playgroud)

但是,如果我通过colourbox点击图像服务脚本,则会变为:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)

我认为这可能表明问题,直到我通过浏览器直接尝试了服务脚本和图像,它也显示:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)

希望有足够的信息,对某人有意义!

coldfusion jquery colorbox mime-types

3
推荐指数
1
解决办法
2069
查看次数

某些网页上的ga("发送","网页浏览")中的Google Analytics错误

实施增强型电子商务后,我发现Google Analytics中显示的一小部分网页没有 Google Analytics代码.

在检查源时,那些失败的页面上的代码与正确验证的页面上的代码之间没有区别.

我安装了GA Debug Google Chrome扩展程序,我可以看到在几个页面上有一个错误从ga("send", "pageview")呼叫中回来.

但是,我无法在任何文档或在线任何地方找到描述可能出现的错误的ga("send", "pageview")信息,也不会提供任何可能有助于诊断任何可能问题的信息.

重要的是,页面上没有javascript错误,我可以看到任何内容的唯一方法是使用GA Debug插件 - 有些人声称它并没有真正起作用!然而谷歌显示这个小部分页面的未知问题.

以下是其中一个页面上的代码示例:

<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1 *new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-500228-1', 'auto');
ga('require', 'ec');   // Load the advanced ecommerce plug-in.
ga('require', 'displayfeatures');   // Load display advertising.
ga('set', '&cu', 'GBP'); // Set currency

// Add generated analytics elements from the request container
ga('ec:addImpression', {
        'id':           '021109021CB'
    ,   'name':         'Cam shaft, Type 4 Mechanical Std. (No Cam Wheel)'
    ,   'category':     'Bay Bus …
Run Code Online (Sandbox Code Playgroud)

javascript google-analytics universal-analytics

2
推荐指数
1
解决办法
1657
查看次数

带有电子邮件地址的CFMail

我不敢相信我以前从未注意到这一点,但似乎CFMail不会发送到未在目标邮件服务器上明确设置的电子邮件地址.

这意味着如果我使用'info@somedomainorother.com'并设置了捕获域中的所有电子邮件,CFMail将不会发送到'test@somedomainorother.com'.

这给我带来了大量问题,因为我正在使用CFMail发送订单确认,成员激活以及其他各种各样的点点滴滴.

无论您对使用捕获地址的看法如何,都不能否认人们使用它们因此,无论用户在我的某个网站中输入化妆地址,他们都不会收到他们的电子邮件.

必须,只需要解决这个问题 - 任何人都可以帮忙吗?

对于refernece,发送到catchall地址时日志中显示的消息是"Invalid Addresses".

编辑:这是我正在使用的CFMail语法 -

<cfmail to="#Arguments.sEmailAddress#" from="#Application.sAppEmailAddress#" subject="Stock reminder confirmation: #Local.qGetProductDetails.sProductName# - #Application.sCompanyName#" type="HTML" server="#Application.sAppEmailServer#" username="#Application.sAppEmailAddress#" password="#Application.sAppEmailPassword#">
Run Code Online (Sandbox Code Playgroud)

翻译成:

<cfmail to="thisisatest@somedomainorother.com" from="application@mydomainname.com" subject="Stock reminder confirmation: Some product - My Company" type="HTML" server="mail.mydomainname.com" username="application@mydomainname.com" password="XXXXXX">
Run Code Online (Sandbox Code Playgroud)

所有工作都适用于info@somedomainorother.com但不适用于randombunchofcharacters@somedomainorother.com.

当然要注意的是,在所有其他方面,catch-all工作正常,来自邮件客户端的测试电子邮件工作正常.

coldfusion cfmail

-1
推荐指数
1
解决办法
912
查看次数