2013-04-19 1 views
2

Adobe ColdFusion 9 Standard Edition에서 실행중인 요청 목록을 얻는 방법이 있는지 알고 있습니까? 어쩌면 coldfusion.server.ServiceFactory 같은 CF Java 객체 중 하나에서 메소드를 호출 할까?ColdFusion 9 Standard Edition에서 실행중인 요청 목록 얻기

엔터프라이즈에서는 서버 모니터를 사용할 수 있지만 표준 버전을 사용할 때 서버 모니터를 사용할 수 없음을 알고 있습니다.

감사합니다.

+0

http://www.seefusion.com/index.cfm?do=c_guide.configure – Travis

+0

감사 트래비스. 이것은 합리적으로 저렴한 옵션이지만 현재 실행중인 스크립트 이름 목록을 보는 기능 만 필요합니다. 그러나 199 달러의 가치가있을 수도 있습니다. – andrewdixon

답변

4

@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> 
+0

빙고! 월요일에 CF를 가져갈 때의 예를 쓸 예정 이었지만, 당신은 저를 때렸습니다. 이것은 제가 작성한 것입니다. 명확성을 위해 위의 출력에서 ​​각 스레드를 다음 스레드와 분리 할 수 ​​있습니다. 또한 스레드의 이름 인 thisThread.getName()을 표시하면 모니터링 페이지를 다시로드 할 때마다 동일한 스레드 이름이 동일한 코드를 실행하므로 스레드가 멈추거나 반복되는시기를 쉽게 볼 수 있습니다. – barnyr

0

스크립트 이름을보고 약간의 수작업을해도 괜찮다면 무료로 사용해도됩니다. 스택 추적을 시작하기 만하면됩니다. 이이 일을 몇 가지 방법은,하지만 나를 위해, 그들은 다음과 같이 분해 :

  • 실행 ColdFusion은 몸과 같이 (중 명령 줄에서 CF를 시작하거나 Windows 서비스가 자신으로 실행하도록 변경하여) 다음, 스택이

  • 휴가 CF는 기존의 사용자로 실행 덤프를 얻을 수 jStack를 사용하지만 configure it to allow remote JMX connections, 다음 VisualVM과 연결하는 데 사용하고 use that to collect a stack dump

  • 는, 프로그램 스레드를 사용하여 스레드의 목록을 가져옵니다. getAllStackTraces(). 그러면 데이터로 원하는 모든 작업을 수행 할 수 있습니다. ColdFusion의 모든 요청 스레드 WEB-을 시작하는

처음 두 옵션을 사용하는 경우와 같은 또는 (IIS 또는 아파치를 통해 처리 사람들을 위해) jrpp- 그래서 당신은 필터링 할 수 있습니다 다른 스레드 (웹 서버 내장 용) 스택 덤프를 얻으려면 Samurai을 사용하여 검사하는 것이 좋습니다. 10 초 간격으로 여러 덤프를 수행하고 어떤 요청이 장기 실행인지 빠르게 확인할 수 있습니다.

+0

제안을 주셔서 감사합니다. 세 번째를 시도했지만 Java 프로그래머가 아니기 때문에 나는 의미가있는 것을 얻기 위해 조금 노력하고 있습니다. 나는 '이 스레드 ID를 포함하지만 스크립트에 대한 내용이없는 출력물을 제공하는 것 같습니다. 더 이상의 조언? – andrewdixon