2013-03-07 9 views
0

좋은 날,ColdFusion에서 런타임 소스 코드

는 coldfusion.runtime 소스 코드를 해킹// 디버그를 볼 수 있었다 경우 궁금 해서요.

allocLargeObjectOrArray: [C, size 8388624 
java.lang.OutOfMemoryError: allocLargeObjectOrArray: [C, size 8388624 at 
java.util.Arrays.copyOf(Arrays.java:2882) at 
java.io.CharArrayWriter.write(CharArrayWriter.java:105) at 
coldfusion.runtime.CharBuffer.replace(CharBuffer.java:37) at 
coldfusion.runtime.CharBuffer.replace(CharBuffer.java:50) at 
coldfusion.runtime.NeoBodyContent.write(NeoBodyContent.java:254) at 
[My Code] 

내가 CharBuffer를 교체 이유는 무엇 알고 싶습니다, 그것은 복사 이유는 무엇 배열 등 :

특히, 나는 다음과 같이 해당 메모리 부족 오류가 받고 있어요 , 그래서 나는 내 코드를 조정할 수있다.

내 코드 cfloop은 쿼리를 통해 'IIf'문과 'de'함수 호출을 포함하여 해당 필드를 출력합니다.

나는 코드를 고치고 다시 충돌 할 때까지 기다릴 수 있지만, 시행 착오를 사용하지 않고 문제가 무엇인지 정확히 알고 싶다.

감사합니다.

+3

참고 : ColdFusion이 독점 소프트웨어이기 때문에, 이것은 EULA에 대한 _probably_입니다. –

+3

이것이 직접 질문에 답하는 것은 아니지만 iifs를 반복해야하는 경우 3 자 연산자 (9 이상) 또는 junky-looking cfif (8 이하)를 사용하여 코드를 변경하는 것이 좋습니다.)를 사용하여 성능 영향을 줄입니다. –

답변

4

첫 번째 옵션은 HeapDumpOnOutOfMemoryError으로 설정 한 다음 JHAT에서 덤프를 열어 공간을 차지하는 부분을 찾습니다. 오류 코드가 큰 버퍼를 복사하려고하면 이미 메모리에 버퍼가 있어야합니다. 그것을 위해 존재하는 자바 디 컴파일러 중 하나를 설치

  • 이클립스
  • 를 설치 즉, 오류

    당신이하려는 경우하지만 당신은 거의 확실하게, 다음과 같은 작업을 수행 할 수의 방향을 가리 키도록 해야지

  • 읽기 코드
  • 구성 콜드을
  • 프로젝트
  • 에 cfusion.jar 추가 새 프로젝트를 만들고 사용
  • 이클립스에서 원격 디버깅 세션을 설정 중단 점을 설정 (=, = N 어드레스 중단 수송 = dt_socket 서버 = Y 1044 -Xdebug -Xrunjdwp)를 융합 디버깅 포트 듣 위의 포트

그게 오류로 스레드를 중단하고 변수를 검사 할 수있는 능력을 갖춰야합니다. 코드에서 8.3 meg 문자열을 만드는 것으로 보입니다. 기억을 검사 할 수 있다면 아마도 많은 도움이 될 것입니다.

+0

고맙습니다. –

3

무료 Java 디 컴파일러를 얻으십시오 : http://jd.benow.ca/.

ColdFusion 설치 디렉토리에서 cfusion.jar 파일을 검색하십시오.

디 컴파일러로 엽니 다. CharBuffer이 있어야합니다.

1

결국 Coldfusion이 페이지를 어떻게 버퍼링하는지 간단하게 설명합니다.

java.io.CharArrayWriter의 고유 한 구현을 관리하고 전체가 채워질 때마다 char []의 크기를 두 배로 늘리는 88 행을 참조하십시오.

나에게 합리적인 것 같습니다. 그러나 일부 페이지는 매우 크고 8MB * 20 동시 페이지 요청은 많은 RAM 활동을 의미합니다.

난 그냥 우리의 페이지의 크기를 줄이는 작업을해야합니다 ...