내 asp.net 앱을 항상 "살아"유지하는 방법, 나쁜 생각이라면 왜 그렇게하지 않아야합니까?

StackOverflow https://stackoverflow.com/questions/817655

  •  03-07-2019
  •  | 
  •  

문제

최근에 ASP.NET 애플리케이션을 반짝이는 새로운 VPS에 배치했으며 VPS가 공유 호스팅 솔루션을 제공 할 수있는 일반적인 성능 증가에 만족하지만 응용 프로그램의 시작 시간에 불만이 있습니다.

내 웹 애플리케이션은 고객이 처음 쳤을 때 시작하는 데 상당한 시간이 걸립니다. 디버그 모드에서 실행되지 않고 (내 웹에서 비활성화 된 비활성화) 스타트 업에서해야 할 실제 작업이 없습니다. 응용 프로그램 시작 이벤트 핸들러에 코드가 없습니다. 시작하지 않습니다. 여분의 스레드, 아무것도. 내 클라이언트가 처음으로 내 응용 프로그램에 도달하면 응답하는 데 15-20 초가 걸립니다. 내 신청서가 종료 될 때까지 몇 분을 기다리지 않는 한 후속 통화는 1-2 초가 걸립니다. 그런 다음 15-20 초 시작 시간으로 돌아갑니다.

(타이밍 벤치 마크가 매우 비과학적이라는 것을 알고 있습니다. 그 숫자는 내 앱의 시작시 성능을 느끼게되어야합니다).

ASP.NET에 대한 나의 이해는 IIS (7.0,이 경우)가 처음 실행될 때 웹 애플리케이션을 컴파일 한 다음 웹 응용 프로그램이 변경 될 때까지 바이너리를 캐시한다는 것입니다. 내 이해가 잘못 되었습니까?

그래서, 그 책 크기의 서문 후에는 다음과 같은 질문이 있습니다.

  • ASP.NET의 컴파일에 대한 이해가 잘못 되었습니까? 실제로 어떻게 작동합니까?
  • IIS를 강제로 바이너리를 캐시하거나 응용 프로그램을 무기한으로 유지하도록 할 수있는 방법이 있습니까?
  • 이전 질문에서 일을하는 것이 나쁜 생각이라면, 왜 나쁜 생각입니까, 대신 시작 성능을 향상시키기 위해 무엇을 할 수 있습니까?

감사!

편집하다: 내 질문이 약간의 복제 인 것 같습니다 이 질문 (나는 여기에서 이것에 대한 답을 찾는 데 더 나은 일을했다고 생각했다. 그러나 나는 내 질문이 더 포괄적이라고 생각하며, 여기에 이것을 다루는 이미 이미 사용 된 질문이 더 좋지 않으면 복제본으로 닫히지 않았다면 감사합니다.

도움이 되었습니까?

해결책

IIS는 또한 구성에 따라 주어진 기간 후에 웹 앱을 종료합니다. 나는 IIS7에 익숙하지 않고 이것을 구성 할 곳이 있으므로이를 구성하는 방법에 대한 약간의 조사를 수행 할 수 있습니다 (출발점?).

나쁘니? 코드가 얼마나 좋은지에 따라 다릅니다. 메모리 나 자원이 새지 않는다면 아마 그렇지 않을 것입니다.

다른 해결책은 다음과 같습니다 웹 사이트를 사전 컴파일하십시오. 이것은 당신에게 더 나은 옵션 일 수 있습니다. 그러나 웹 사이트와 상호 작용하는 방법에 따라 단점이있을 수 있으므로 확인하고 확인해야합니다.

다른 팁

ASP.NET에 대한 나의 이해는 IIS (7.0,이 경우)가 처음 실행될 때 웹 애플리케이션을 컴파일 한 다음 웹 응용 프로그램이 변경 될 때까지 바이너리를 캐시한다는 것입니다. 내 이해가 잘못 되었습니까?

맞아요. 구체적으로, 어셈블리는 그림자 사본으로 제작되었습니다 (볼륨 스냅 샷 서비스 / 그림자 사본 기능과 혼동하지 않음). 이를 통해 기존 실행 세션에 영향을 미치지 않으면 서 폴더의 코드를 즉시 교체 할 수 있습니다. ASP.NET은 변경 사항을 감지하고 새 버전을 대상 디렉토리로 컴파일합니다 (일반적으로 Temporary ASP.NET Files). 그 과정에 대한 자세한 내용 : ASP.NET 동적 컴파일 이해

순전히 편집 시간이라면 종종 가장 효율적인 접근 방식은 재활용 후 웹 사이트를 직접 치는 것입니다. 정기적으로 전화를 걸어 고객이 아닌 15 초 지연을받는 사람이되도록하십시오.

그러나 그것이 모든 컴파일 시간이라면 (하드웨어에 따라) 고정 된 클래스 인스턴스가 많이 있습니까? 그들은 스타트 업에서 많은 일을합니까?

추적 또는 프로파일 링을 사용하면 시작 시간이 소비 된 곳을 아주 빨리 해결할 수 있습니다.

프로세스를 유지하는 것이 왜 나쁜 생각인지에 관해서는, 나는 그것이 정리 되었기 때문이라고 생각합니다. 우리가 데이터를 얼마나 잘 돌보거나 GC가 얼마나 잘 작동하든, 프로세스를 다시 시작함으로써 좋은 정리가 수행됩니다. 조각화와 같은 것들이 사라질 수 있으며 시간이 지남에 따라 쌓이는 다른 자원 문제가 해결됩니다. 따라서 서버 프로세스를 무기한으로 유지하는 것은 상당히 나쁜 생각입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top