有谁知道 Adobe ColdFusion 9 标准版中是否有办法获取正在运行的请求列表?也许通过从一个 CF Java 对象调用一个方法,比如coldfusion.server.ServiceFactory???
我知道在企业中您可以为此使用服务器监视器,但由于我们使用的是标准版,因此我们没有可用的服务器监视器。
谢谢。
有谁知道 Adobe ColdFusion 9 标准版中是否有办法获取正在运行的请求列表?也许通过从一个 CF Java 对象调用一个方法,比如coldfusion.server.ServiceFactory???
我知道在企业中您可以为此使用服务器监视器,但由于我们使用的是标准版,因此我们没有可用的服务器监视器。
谢谢。
感谢@barnyr 的指导,我设法获得了一些代码,这些代码将输出当前正在运行的脚本名称列表,这正是我所需要的。这里适合任何有兴趣的人。
<!--- Create the thread object --->
<cfobject type="JAVA" action="Create" name="thread" class="java.lang.Thread">
<!--- Get all stack traces from the thread object --->
<cfset stackTrace = thread.getAllStackTraces()>
<!--- Convert the entrySet into an array --->
<cfset stackArray = stackTrace.entrySet().toArray()>
<cfoutput>
<!--- Loop over the entrySet array --->
<cfloop from="1" to="#ArrayLen(stackArray)#" index="sIndex">
<!--- Get the current thread values --->
<cfset thisThread = stackArray[sIndex].getValue()>
<!--- Loop over current thread values --->
<cfloop from="1" to="#ArrayLen(thisThread)#" index="tIndex">
<!--- Get the filename for this thread --->
<cfset thisThreadFile = thisThread[tIndex].getFileName()>
<!--- If the file name contains .cfm output it --->
<cfif isDefined("thisThreadFile") AND thisThreadFile CONTAINS ".cfm">
#thisThreadFile#<br>
</cfif>
</cfloop>
</cfloop>
</cfoutput>
如果您只看到脚本名称并且不介意做一些手动工作,您可以免费获得它。您需要做的是启动堆栈跟踪。有几种方法可以做到这一点,但对我来说,它们分解如下:
以自己的身份运行 ColdFusion(通过从命令行启动 CF 或将 Windows 服务更改为以自己的身份运行),然后使用jStack获取堆栈转储
让 CF 以现有用户身份运行,但将其配置为允许远程 JMX 连接,然后使用 VisualVM 进行连接并使用它来收集堆栈转储
使用 Thread 以编程方式获取线程列表。获取所有堆栈跟踪()。然后,您可以对数据做任何您想做的事情。所有 ColdFusion 请求线程都启动 web-(对于内置 web 服务器)或 jrpp-(对于那些通过 IIS 或 apache 处理的线程),因此您可以过滤掉类似的其他线程
如果您使用前两个选项来获取堆栈转储,那么我强烈建议您使用Samurai来检查它们。您可以间隔 10 秒进行多次转储,并快速确定哪些请求是长时间运行的
试试 cftracker,它可能会满足你的需求 https://github.com/misterdai/cfTrackercfTracker