我们的CF服务器偶尔会停止处理邮件.这是有问题的,因为我们的许多客户都依赖它.
我们在网上发现了在无法投递的文件夹中提到零字节文件的建议,因此我创建了一个每三分钟删除一次的任务.但是,再次发生了停工.
我正在寻找诊断和解决此问题的建议.
添加:
新增2:
补充3:
我有以下两个文件,并希望第二个扩展第一个:
但是,当我为第二个文件声明组件时,我不确定要在extends属性中放入什么. 我的问题是几个开发站点(有一个共享的SVN存储库)正在运行ColdFusion的同一个实例,所以我不能像这样在CF管理员中创建一个映射:
<cfcomponent extends="site.application">
Run Code Online (Sandbox Code Playgroud)
但是,ColdFusion不喜欢:
<cfcomponent extends="..application">
Run Code Online (Sandbox Code Playgroud)
或任何动态输入,如:
<cfcomponent extends="#expandpath('..').#application">
Run Code Online (Sandbox Code Playgroud)
创建运行时映射(如此处)似乎也不可行.在基础application.cfc中创建它是没用的,因为在声明继承cfc时该代码尚未执行; 并且我无法在定义继承组件之前创建映射,因为还没有应用程序将其附加到.
有什么方法可以引用父目录来完成我的扩展吗?
编辑以澄清:由于上面的粗体文本,ApplicationProxy解决方案不起作用.现在,作为一种解决方法,我们只是不将\ dir\application.cfc检查到SVN,以便每个开发人员都可以保留一个扩展他/她自己的根application.cfc的版本.显然,这并不理想.
如何处理CFML中的时区?到目前为止,我编写的所有应用程序都只使用CF服务器和/或SQL服务器的默认时区.
你们通常做什么?您是否使用GetTimezineInfo()和DateAdd()将所有日期存储在GMT中,并根据登录用户的偏好将所有时间转换为正确的时区?
或者你们使用任何java方法?
我在ColdFusion中有一个半大(数百个记录)的1维数组.数组中的每个项都是具有多个属性的结构.我想在数组中搜索具有特定"name"属性的结构.我知道对于一个字符串值数组,我可以使用Java方法,如下所示:
<cfset arrayIndex = myArray.indexOf("WhatImLookingFor") + 1>
Run Code Online (Sandbox Code Playgroud)
...但这对结构数组不起作用.我也知道我可以这样蛮力:
<cfset arrayIndex = 0>
<cfloop from="1" to="#ArrayLen(myArray)#" index="counter">
<cfif myArray[counter].name IS "WhatImLookingFor">
<cfset arrayIndex = counter>
</cfif>
</cfloop>
Run Code Online (Sandbox Code Playgroud)
......但我觉得必须有一种更有效的方法.有人有比这更好的解决方案吗?您可以假设每个结构中都存在"name"属性,并且数组中没有间隙或其他对象.
从恶意用户那里获取coldfusion网页的最佳做法是什么?(包括但不限于sql注入攻击)
cfqueryparam足够吗?
这里有简单的请求(希望如此).
我有一个字符串,虽然它的长度不同,但总是需要删除最后6个字符.
使用第三方Web服务,因此在输出之前我无法编辑XML中的响应.
如果有人能建议快速修剪它们,我真的很感激!
这是我要使用的字符串:
#daysEvent[iItem].XmlChildren[iEvent].XmlChildren[16].XmlText#
Run Code Online (Sandbox Code Playgroud)
谢谢!
我确信我完全搞砸了,但是在Stack Overflow用户的帮助下我得到了这么多,所以非常感谢到目前为止.
我需要将JSON数据POST到远程API.显然,由于SOP问题,我无法使用jQuery,而且远程API不支持JSONP.
我也不想使用任何类型的代理来解决SOP限制.
根据API文档(http://myemma.com/api-docs/),这是他们期望的数据格式(请求和响应数据作为JSON传输):
POST https://api.e2ma.net//123/members/add
{
"fields": {
"first_name": "myFirstName"
},
"email": "email@domain.com"
}
Run Code Online (Sandbox Code Playgroud)
这是我迄今为止构建的,但继续从远程API接收"无法解析JSON"错误:
<cfset fields[name_first]="#SerializeJSON( "myFirstName" )#" />
<cfset form.email="#SerializeJSON( "email@domain.com" )#" />
<cfhttp
url="https://api.e2ma.net/123/members/add"
method="POST"
username="username"
password="pssword"
useragent="#CGI.http_user_agent#"
result="objGet">
<!--- add email --->
<cfhttpparam
type="formfield"
name="email"
value='#form.email#'
/>
<!--- add field: name_first --->
<cfhttpparam
type="formfield"
name="fields"
value='#fields[name_first]#'
/>
</cfhttp>
<cfoutput>#objGet.FileContent#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
同样,我肯定会以某种方式破坏我的数据结构,但我不确定我做错了什么,特别是关于正确设置"fields":{"first_name":"myFirstName"}结构/数组.
我有ColdFusion 9.0.1与最新的修补程序(4).我需要ColdFusion来返回所有带有引号的JSON数据(作为字符串).我有以下问题:
<cfset test = StructNew()>
<cfset test.name = "1234.100">
<cfoutput>#SerializeJSON(test)#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
输出的文字是:
{"name":1234.100}
Run Code Online (Sandbox Code Playgroud)
每个javascript JSON解析器都将其转换为1234.1并且不保留尾随0.我需要ColdFusion输出为字符串或javascript解析器以保持尾随0.有任何想法吗?
这是一个简化的例子.我从数据库中获取这些数据.
我已经在开发盒上运行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)
我的环境:
问题出现在多个版本的JVM上 - 此版本目前用于使监控可用.
我的java设置:
最大堆大小:1024mb
-server -XX:MaxPermSize参数=512米-XX:+ UseParallelGC -Xbatch -Dcoldfusion.home …
以下用于查找素数的代码在Adobe ColdFusion(10)和Lucee(4.5)之间的性能差异很大.在同一台机器上测试(6C i7 3930k @ 4 GHz,Windows 10 64 Bit,两个CFML引擎上的JVM内存设置相同:JDK7 -Xms512m -Xmx2048m -XX:MaxPermSize=512m):
<cfscript>
ticks = getTickCount();
stopIndex = 10000;
primes = [];
divisions = 0;
primes.add(2);
primes.add(3);
n = 5;
for (n; n < stopIndex; n += 2) {
isPrime = true;
d = 3;
for (d; d < n; d++) {
divisions++;
if (n % d == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
primes.add(n);
}
}
ticks = (getTickCount() - ticks);
</cfscript> …Run Code Online (Sandbox Code Playgroud) coldfusion ×10
cfml ×2
json ×2
algorithm ×1
arrays ×1
cfc ×1
cfhttp ×1
coldfusion-8 ×1
coldfusion-9 ×1
cpu-usage ×1
datetime ×1
javascript ×1
jvm ×1
lucee ×1
performance ×1
railo ×1
search ×1
security ×1
struct ×1
timezone ×1
tomcat7 ×1