debug=true in web.config = 나쁜 것?
가상 메모리 조각화 및 메모리 부족 오류가 많이 발생하여 3GB 한도에 도달했습니다.
컴파일 디버깅은 web.config에서 true로 설정되어 있지만 제가 묻는 모든 사람들로부터 다른 답변을 받았습니다. debug가 true로 설정되어 있으면 각 aspx가 RAM의 임의 영역으로 컴파일되어 해당 RAM이 단편화되고 결국 메모리 부족 문제가 발생합니까?
Scott Guthrie(ASP.NET 개발 팀의 매니저)는 이에 대한 흥미로운 게시물을 가지고 있습니다.
떠나지 말아야 하는 가장 중요한 점debug="true"
다음과 같습니다.
- ASP.NET 페이지를 컴파일하는 데 시간이 더 오래 걸립니다(일부 배치 최적화가 실행 중지됨).
- 일부 추가 디버그 경로가 활성화되어 있기 때문에 코드 실행 속도가 느려질 수 있습니다.
- 런타임에 애플리케이션 내에서 훨씬 더 많은 메모리가 사용됩니다.
- 웹 리소스에서 다운로드한 스크립트 및 이미지입니다.axd 핸들러가 브라우저에 의해 캐시되지 않아 클라이언트와 서버 간에 더 많은 요청이 발생합니다.
그는 또한 그 깃발을 언급합니다.<deployment retail=”true”/
machine.config에서 >. 이를 통해 시스템(예: 프로덕션 서버)에서 실행되는 모든 응용 프로그램의 debug="true" 플래그를 전역적으로 재정의할 수 있습니다.
업데이트: 웹 앱 배포debug="true"
Scott Hanselman의 최근 블로그 게시물에서 읽을 수 있듯이 여전히 좋지 않습니다.
debug="true"가 나쁜 이유가 여기에 있습니다.진심으로, 우리는 농담이 아닙니다.
- 요청 실행 시간 초과를 재정의하여 사실상 무한 확장
- 페이지 및 JIT 컴파일러 최적화를 모두 비활성화합니다.
- 1.1에서는 CLR이 디버그 정보 추적을 위해 메모리를 과도하게 사용합니다.
- 1.1에서는 동적 페이지의 배치 컴파일을 해제하여 페이지당 하나의 어셈블리를 생성합니다.
- VB.NET 코드의 경우 WakReferences(편집 및 계속 지원에 사용)가 과도하게 사용됩니다.
중요한 참고 사항:때때로 믿어지는 것과는 반대로, 요소에서 retail="true"를 설정하는 것은 debug="true"를 갖는 것에 대한 직접적인 해독제가 아닙니다!
실제로 응용 프로그램을 디버그해야 하는 경우를 제외하고 web.config에서 디버그 플래그를 false로 설정해야 합니다.
디버그 모드에서 실행하면 메모리 사용량이 다소 증가할 수 있지만, 말씀하신 것처럼 심각한 문제는 아닐 것입니다.그러나 이 값을 false로 설정하여 효과를 제거하고 개선 사항이 있는지 확인해야 합니다.
디버그 모드에서 실행하면 가비지 수집이 다르게 작동합니다.변수의 수명은 실제 사용에서 변수의 범위로 확장됩니다(디버거에서 값을 표시할 수 있음).이를 통해 일부 개체는 가비지 수집 전에 수명이 더 길어집니다.
할 때 를 최적화하지 약간의 여분의 파일을 사용합니다.nop
명령어가 추가되어 각 코드 라인에는 중단점을 배치할 수 있는 명령어가 하나 이상 있습니다.
디버그 모드에서는 예외를 던지는 데 시간이 상당히 오래 걸립니다.(그러나 일반적으로 코드는 예외를 자주 던지지 않아야 합니다.)
AFAIK "filename = true"는 당신이 언급한 상황을 야기하지 않습니다.
저는 ASP.NET 애플리케이션에서 즉시 이미지를 생성하는 것과 같은 문제에 직면했습니다.
그래서 당신은 자원을 처분하지 않는 것에 문제가 있다고 생각합니다.
코드 뒤에 있는 파일이 있는 aspx 파일을 서버에 배포하는 경우요청이 aspx로 오면 한 번 컴파일된 다음 파일이 변경될 때까지 캐시에 저장됩니다.
메모리에 영향을 미칠 수 있습니다. 몇 가지 Perfmon 카운터를 살펴보고 두 구성을 비교해 보십시오.
만약 당신의 사이트에 많은 파일이 있다면, 저는 asp.net temp 폴더의 diskio에 더 관심이 있을 것입니다.
몇 가지 질문...
- 당신의 앱_코드에 많은 파일이 있습니까?
- 사이트를 업데이트할 수 있도록 허용하시겠습니까, 아니면 게시하시겠습니까?
- 그렇다면 사이트가 자주 업데이트되고 있습니까, 아니면 배포 프로세스가 있습니까?
- 하드웨어 구성은 무엇입니까?
여러 구성을 활용하는 것이 어떻습니까?
웹.디버그.구성 - 웹에서 디버깅을 설정합니다.UAT.Config - 원하는 웹을 선택합니다.풀어주다.구성 - 디버깅을 해제합니다.
이렇게 하면 개발자가 debug="true"로 web.configin을 확인하는 것과 같은 회귀 구성 오류를 최소화할 수 있습니다.
프로덕션 시스템에서는 항상 Debug=false를 설정합니다.플래그에서 알 수 있듯이 개발 시스템을 디버깅할 때만 true로 설정해야 합니다.
이 플래그는 메모리 조각화 문제와 관련이 없습니다.
언급URL : https://stackoverflow.com/questions/621572/debug-true-in-web-config-bad-thing
'source' 카테고리의 다른 글
Django 사용자 지정 양식 매개 변수를 양식 세트로 전달 (0) | 2023.06.15 |
---|---|
이 MySQL/MariaDB 구문은 무엇입니까? (0) | 2023.06.10 |
asp.net 회원 자격 이전 비밀번호를 모르고 비밀번호 변경 (0) | 2023.06.10 |
어떻게 UBSan 보고서 gdb를 중단하고 계속할 수 있습니까? (0) | 2023.06.10 |
앱 스토어 링크: "이 앱 등급/검토" (0) | 2023.06.10 |