대용량 파일 업로드를위한 ColdFusion 설정


8

대용량 파일 업로드를 허용하도록 coldfusion 서버를 설정하려고하는데 한계에 부딪 치고 있습니다. 지금까지 내가 관찰 한 내용은 다음과 같습니다.

업로드 크기를 제한하는 ColdFusion Administrator에는 "게시 데이터의 최대 크기"및 "스로틀 메모리 요청"의 두 가지 설정이 있습니다. 업로드 크기 (HTTP 오버 헤드 포함)가 해당 설정 중 하나보다 큰 경우 업로드가 거부됩니다. 왜이 중 2 개가 필요한지 알 수 없습니다. 더 높은 값을 설정하면 내가 알 수있는 한 아무런 영향을 미치지 않습니다. 낮은 쪽이 이깁니다.

누군가 너무 큰 파일을 업로드하려고하면 멋진 오류 메시지가 표시되지 않습니다. 약 1 개의 TCP 창에 해당하는 데이터를 보낸 후 업로드가 영원히 중단됩니다. 그리고 그것은 정말로 나쁜 방식으로 매달려 있습니다. 클라이언트가 포기하고 연결을 끊은 후에도 관련 아파치 스레드가 여전히 묶여 있습니다 (mod_status를 사용하여 볼 수 있음). 중단 된 스레드는 새 요청을 수행 할 서버가없고 서버를 다시 시작해야 할 때까지 계속 빌드됩니다.

"요청 스로틀"은 내가 정말로 이해하지 못하는 것입니다. 그것에 관한 모든 문서는 메모리 영역의 크기라고 말합니다. 그것이 그것이 그렇다면 파일 크기와 어떻게 관련이 있는지 볼 수 없습니다. ColdFusion은 업로드 된 전체 파일을 디스크에 쓰기 전에 메모리에 넣습니다. 업로드 루프 (중간 크기의 블록을 읽고 디스크에 쓰고, 끝날 때까지 반복)가 너무 쉬운 경우에는 그렇게 할 수 없습니다. (HTTP multipart / form-data post의 구조는 조금 더 어려워 지지만 웹 개발 제품을 갖춘 Adobe와 같은 대기업은 이것을 올바르게 얻을 수 있습니다 ... 그렇지 않습니까?)

전체 파일 슬러 핑이 실제로 진행 중이라면 어떻게 처리 가능한 크기 제한을 선택할 것으로 예상합니까? 기가 바이트를 허용하면 몇 명의 동시 사용자가 시도하지 않고도 서버를 메모리에서 실행할 수 있습니다. 기가 바이트 업로드를 허용 하지 않으면 어떻게해야 합니까? 사람들은 게시 할 동영상이 있으며 편집 할 시간이 없습니다!

추가 정보

다음은 일부 버전 번호입니다.

웹 서버:

Server: Apache/2.2.24 (Win64) mod_jk/1.2.32

ColdFusion :

Server Product           ColdFusion
Version                  ColdFusion 10,285437
Tomcat Version           7.0.23.0
Edition                  Enterprise
Operating System         Windows Server 2008 R2
OS Version               6.1
Update Level             /E:/ColdFusion10/cfusion/lib/updates/chf10000011.jar
Adobe Driver Version     4.1 (Build 0001)

추가 정보 # 2

제한 필드에 어떤 값을 입력했는지 알고 싶은 이유는 모르겠지만 둘 다 200MB로 설정되었습니다. "포스트 데이터의 최대 크기"를 2000MB로 늘 렸는데 효과가 없었습니다. "Request Throttle Memory"를 2000MB로 늘리면 더 큰 업로드가 가능하다는 것을 이미 알았습니다. 내가 여기서 찾고있는 것은 "더 큰 숫자가있는 것"이 ​​아닙니다. 이 설정이 실제로 의미하는 것과 서버 메모리 사용에 미치는 영향에 대한 자세한 설명.

한계를 초과했을 때 오류 메시지를 반환하는 대신 서버 스레드가 영구적으로 중단되는 이유는 별도의 질문 일 수 있습니다. 나는 이것이 잘 알려진 문제라고 생각했다. 다른 사람이 그것을 재생할 수 있는지 먼저 물어봐야 할 것입니다. ColdFusion에서 "파일이 너무 큽니다"오류 메시지가 클라이언트에 반환 된 적이 없습니다. 이되어 가정 을 가지고?

추가 정보 # 3 일부 실험을 통해 부분적인 답변을 얻었습니다. 내가 놓친 첫 번째는 "RTM (Request Throttle Memory)" 이 "MSOPD (Maximum size of post data)"보다 높게 설정된 경우 유용한 기능을 수행한다는 것 입니다. 테스트의 첫 라운드에서, 그들 사이의 관계에 대한 실마리는 없었지만, 나는 다른 방법으로 테스트했습니다. 새로운 이해로, RTM / MSOPD 비율이 모두 최대 크기에 가까울 경우 허용되는 동시 업로드 수임을 알 수 있습니다.

"스로틀 메모리 요청"이 실제로는 임시 파일이 아니라 메모리 버퍼라고 가정하면 최악의 두려움이 맞았 음을 의미합니다. 모든 파일은 전체 업로드 기간 동안 완전히 메모리에 보관됩니다. 아무도 내가 믿지 않게 할 말을 한 적이 없다. (그러나 나는 "그렇다.이 바보 같은 짓을했다"

또한이 새로운 이해로, 정지 된 업로드는 의미가 있습니다. 서버에 업로드를 허용하는 데 사용할 수있는 메모리가 없으므로 소켓에서 읽지 않습니다. TCP 버퍼가 채워지고 창 크기가 0이되고 클라이언트가 다시 열리기를 기다립니다. 이는 서버가 요청을 읽기 시작하자마자 발생합니다. 그러나 내 경우에는 어떤 이유로 든 결코 일어나지 않습니다. 서버는 요청을 완전히 잊어 버려서 계속 남아 있습니다.

"최대 데이터 크기의 포스트 데이터"가 발생하는 경우 여전히 미스터리입니다. 하드 한계에 도달 한 요청은 대기하지 말고 거부해야합니다. 그리고에 거부 메시지 ( "게시물 크기가 최대 한도 인 200MB를 초과합니다.")가 표시됩니다 server.log. 그러나이 경우에도 서버는 클라이언트에게 오류를 보내지 않고 요청을 잊어 버린 것 같습니다.


두 가지 질문 : 1. 웹 서버 자체가 아니라 Cold Fusion이라고 확신하십니까? 2. 요청 시간 초과를 보셨습니까?
Katherine Villyard

1
확실해. 시간 초과가 없습니다 (업로드는 하나의 TCP 창을 채우고 정지합니다. wireshark로 입증되었습니다. 파일 끝에서 몇 바이트를 잘라 13 초 후에 보냅니다.) 그리고 정적 HTML 페이지에 업로드를 게시 할 수 있습니다. 괜찮습니다 (양식 데이터를 처리하는 것이 없기 때문에 어디에도 저장되지 않지만 요점은

답변:


1

또한 튜닝 설정을 설명하려고합니다.

  • 최대 POST 요청 매개 변수 수 -특정 요청을 통해 전송 된 최대 속성 / 매개 변수 수를 나타냅니다. 양식에 데이터를 게시하는 동안 특히 사용됩니다.
  • 게시 데이터의 최대 크기 -서버에 게시 할 수있는 최대 데이터입니다. 이것은 POST 요청 중 특정 형식의 모든 데이터의 합계입니다.
  • 요청 조절 임계 값 -ColdFusion은 필요한 경우 수신 요청을 조절할 수 있습니다 (강제적으로 느리게 할 수 있음). 그러나 스로틀 상태에 관계없이 실제로 작은 요청 (작은 페이로드가있는 요청)을 허용 할 수 있습니다. 작은 요청을 처리하려면 허용되는 최대 크기를 지정하십시오 (기본값은 최대 4MB).
  • 요청 스로틀 메모리 - 요청을 스로틀 하려면 스로틀에 할당 된 최대 메모리 양을 지정하십시오. 사용 가능한 총 메모리가 충분하지 않으면 ColdFusion은 충분한 메모리가 확보 될 때까지 요청을 대기열에 넣습니다 (기본값은 200MB). 임계 값보다 낮은 Req1에 대한 메모리를 예약하지 않습니다.

Req1 (3MB), Req2 (6MB) 및 Req3 (9MB)의 동시 요청이 3 개 있다고 가정합니다. 기본 설정 인 Request Throttle Threshold가 4MB로 설정되면 ColdFusion은 스로틀 메모리에 (6 + 9 = 15MB)를 예약합니다. 마찬가지로 모든 동시 요청에 대해 요청 스로틀 메모리를 계속 추가하고 제한은 요청 스로틀 메모리에 대해 설정 한 것입니다 (기본값은 200MB).

도움이 되었기를 바랍니다.


이것은 Google을 통해 찾은 다른 모든 설명과 유사합니다. 그들 모두는 내가 알아야 할 한 가지를 생략합니다. 요청 스로틀 메모리는 최대 포스트 데이터 크기보다 커야 합니다. 또한 요청 스로틀 메모리가 JVM 힙 크기보다 작아야 만 서버의 RAM보다 크거나 큰 실제 파일을 병렬로 업로드 할 수 없습니다. 그럼에도 불구하고 이것은 지금까지 가장 좋은 대답이므로, 나는 그것을

1

cftry-catch를 사용하여 오류를 캡처하고 사용자에게 사용자 정의 메시지를 표시 할 수 있습니다. 이미 말했지만, 최대 POST 요청 매개 변수 수, 최대 포스트 데이터 크기, 요청 스로틀 임계 값 및 요청 스로틀 메모리에 설정된 값은 무엇입니까 ? CF Std 또는 Ent를 사용하고 있으며 ColdFusion 버전은 무엇입니까?


cftry로 오류를 잡을 수 없습니다. cfm의 첫 번째 행을 실행하지 않고 연결이 정지됩니다. (cflog를 거기에 넣었는지 알 수 없었습니다.) 질문에 버전 정보를 추가하겠습니다.

"파일이 너무 큼"오류 메시지는 일반적으로 ColdFusion이 아니라 웹 서버에서 발생합니다. CF 로그에서 아무것도 찾지 못하면 이벤트 뷰어 로그를 확인하십시오. 분명히 오류에 대한 참조가있을 것입니다. 당신은에서 "LimitRequestBody"시도해 봤어 아파치 . 웹 서버 끝에서도 파일 크기를 지정할 수 있습니다.
Anit Kumar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.