2010-05-16 8 views
16

어떤 종류의 세션 크기 제한이나 초과하지 않는 것이 좋습니다?ASP.NET 세션 크기 제한

웹 응용 프로그램에서 사용자가 선택을 승인 할 때까지 세션에 저장되는 사용자 선택을 저장하기 위해 몇 가지 DataTable을 만들어 데이터베이스에 추가합니다.

문제는 세션이 몇 가지 객체를 유지할만큼 충분히 안정적인지 여부를 모르겠다는 것입니다.

감사합니다.

대한 추가 정보를 원하시면

세션의 크기는 약 10-20킬로바이트 최대입니다.

+2

In-proc 또는 out of proc? – Liam

답변

7

예, 신뢰할 수있는입니다. 은 확장 가능이 아니므로 미리 계획을 세우십시오. 이것은 하나 이상의 서버에서 실행할 때 완전히 중단됩니다.
그리고 제한의 종류가있다 : 수의 동시 사용자 * 인 SizeOf-세션 < 가능한-의 Mem

그것은 몇 킬로바이트를 저장하는 테이블의 크기에 당연히 따라

은 일반적으로 허용 (고하지만 소통량 위치는 그것을 더 작게 유지하는 것을 시도 할 것이다).

사용자가 테이블을 공유 할 수 있으면 해당 데이터를 Application 개체에 넣을 수있어 큰 도움이됩니다.

세션 개체는 TimeOut 설정으로 제한되며, 기본값은 20 분입니다. 메모리 소비를 최적화하는 한 가지 방법은이를 줄이는 것이지만 사용자 편의성과의 ​​절충입니다.

+1

감사합니다. 따라서 특별한 크기 제한이 없습니까? 거기에 사용자 당 몇 kbs를 저장해야합니다. 작은 테이블이 너무 적습니다 ... 세션이 Proc에서 벗어나 시간 초과가 꽤 큽니다. 사용자가 양식을 마칠 때까지 데이터가 저장됩니다 ... 시간이 오래 걸릴 필요가 없습니다. – eugeneK

+0

대신 ViewState를 사용하려고 생각했지만 뷰 상태가 이미 충분히 크기 때문에 적어도 일부 데이터는 서버에서 가져오고 일부는 페이지 데이터에서 가져옵니다. – eugeneK

+8

32 비트 응용 프로그램 풀에 대한 명백한 제한은 총 가상 메모리 사용량이 1.3GB이므로 세션이 너무 많이 소비하지 않도록해야합니다. –

1

세션은 항상 매우 가치있는 저장소이며 매우 제한적이라고 가정해야합니다. 응용 프로그램을 얼마나 많은 사용자가 지원할 지 알 수 없으므로 소비는 가능한 한 적어야합니다.

DataTable은 너무 작게 유지하지 않으면 세션에 저장할 수 있습니다.

+2

고마워요.하지만 그걸 압니다. 크기가 필요합니다. 적어도 몇 가지 기본 규칙이 있습니다. 가능한 한 작지는 않습니다. – eugeneK

2

세션을 "inProc"모드로 저장한다고 가정합니다. 이 모드에서는 ASP.NET 응용 프로그램의 세션, 캐시 등이 웹 서버의 RAM에 저장됩니다 (aspnet_wp.exe 프로세스를 통해). .NET은 모든 것을 사용하지 않습니다. 임계 값 한도 (기본적으로 60 %)를 알려주는 설정이 machine.config에 있습니다. 이 임계 값에 도달하면 IIS는 작업자 프로세스를 재활용하고 모든 세션 정보가 손실됩니다.

서버가 둘 이상의 asp.net 응용 프로그램을 호스팅하는 경우 메모리의 60 %가 모든 응용 프로그램에서 공유됩니다. 따라서 누적 메모리 사용량이 임계 값에 도달하면 작업자 프로세스는 여전히 재활용됩니다.

세션을 아껴서 사용하도록 응용 프로그램을 최적화하는 것 외에도, 프로세스가 아닌 모드에서 세션을 사용하도록 응용 프로그램을 설정하는 것 (세션 정보를 저장하는 데 stateserver 또는 sqlserver 사용)이 있습니다.

Out of process 모드는 시스템 성능을 저하시킬 수 있습니다.

세션 상태 관리에 대한 자세한 내용은 this 문서를 참조하십시오.

10

다음은 세션 상태에 대한 몇 가지주의 사항을이다 :

  • 에서 InProc (mode="InProc") 세션 상태는 작업자 프로세스에 사용할 수있는 메모리의 양을 제한됩니다. 객체 참조 만 저장되며 객체 자체는 저장되지 않습니다. 프로세스 상태 관리의 아웃

이를 지속하기 전에 객체를 serialises : 세션 상태 서버 (mode="StateServer")를 사용하여 프로세스 상태 관리의 아웃

  • 이 상태 서비스에 사용할 수있는 메모리의 양에 제한

    .

  • SQL Server를 사용하는 상태 관리 (mode="SQLServer")는 SQL image 데이터 형식 또는 데이터베이스의 최대 허용 크기의 최대 크기로만 바인딩됩니다.

은 물론 여전히 HTTP 요청이 지속되는 동안 메모리에 다시 재 수화물로 세션 객체의 아웃 당길 수있을 작업자 프로세스에 사용할 수있는 충분한 메모리이 있어야한다. 공정 상태 관리 serialises을 지속하기 전에 객체 중

내가 앞서 언급 한 바와 같이, .

이 객체가 serialisable해야한다는 의미 제외, 예를 들어, XmlDocument 또는 MarshalByRef에서 상속 아무것도.

다음과 같은 예외가 발생합니다 이런 종류의 객체에는 직렬화하려고 :

수 없습니다

는 세션 상태를 직렬화. 'StateServer'및 'SQLServer'모드에서 ASP.NET은 세션 상태 개체 인 을 직렬화하므로 직렬화 할 수없는 개체 또는 MarshalByRef 개체는 이 허용되지 않습니다. 유사한 직렬화 이 '사용자 지정'모드의 사용자 지정 세션 상태 저장소에서 수행되는 경우에도 동일한 제한이 적용됩니다.

+2

이 질문에 어떻게 대답합니까? – Liam

+1

상태 서비스 *에서 사용할 수있는 메모리의 양은 * 무엇을 의미합니까? – Liam

+0

@Liam - OP는 세션 상태 관리에서 분명히 읽지 않았습니다. 내가 사용할 수있는 옵션을 설명하고 있는데, 그런 나쁜 것, 관련 주제 정보가있는 OPs 지식을 확장하는 것입니까? 초당 질문. 상태 서비스는 out-of-process 서비스이며 세션 상태를 디스크 나 SQL 데이터베이스가 아닌 메모리에 유지하므로 프로세스로 사용할 수있는 메모리 양에 의해 제한됩니다. 잠재적으로 다른 메모리 압력이있는 시스템에서 32 비트 상태 서비스를 실행합니다. – Kev