웹사이트 접속한 사용자에 대한 정보를 기록 유지하는 방법으로 세션과 쿠키가 많이 이용한다. 세션은 접속정보를 서버측 메모리에 저장하는 것으로 기본값으로 20분 동안 유지하게 된다.
서버측에 메모리양이 충분하거나, 허용되는 적정 접속자 서버의 경우는 세션이용은 아주 훌륭한 도구임에는 틀림없으나, 대량 접속의 경우는 다르다. 대량의 세션정보를 기록유지를 해야 함과 동시에 생성 및 삭제등의 작업도 이루어져야 한다.
이에 따라 대량접속 웹사이트에의 세션이용은 많은 메모리 점유와 추가적인 리소스를 소비함으로써 성능저하를 유발할수 있는등 절적치 못한 방법이 될수 있다.
 <화면> 응용프로그램의 세션구성
직접 변경이 가능한 메타베이스 값으로 다음과 같은 값이 있으므로 서버 운영환경에 따라 특정값을 변경하거나, 전체 값을 변경하는 것도 고려해 보는 것도 좋다.
물론, 웹프로그래밍 쪽에서 세션이용이 불필요한 페이지는 세션이용안함 설정을 하거나, 세션이 필요한 경우는 필요가 없는 경우는 즉시 해제를 하는 것도 좋은 방법이다.
-AspAllowSessionState : <화면>에서 설정이 가능한 값으로, ASP 응용 프로그램의 세션 상태를 유지 옵션으로 이 속성을 true로 설정하면 서버에 연결될 때마다 Session 개체가 새로 만들어지고, Session_OnStart 및 Session_OnEnd가 발생하며, ASPSessionID 쿠키가 클라이언트로 보내진다. 이 속성을 false로 설정하면 세션 상태를 보거나 저장할 수 없고, 이벤트가 처리되지 않으며, 쿠키가 클라이언트로 보내지지 않는다.
-AspSessionMax: IIS에서 허용하는 최대 동시 세션 수를 지정하는 것으로. 이 제한에 도달한 후에 클라이언트가 IIS와 새로운 세션을 구축하려고 하면 클라이언트에 오류("HTTP 500 웹 서버 사용량이 너무 많습니다.") 메시지가 나타나게 된다. 기본값으로는 제한이 없다.
-AspSessionTimeOut: <화면>에서 설정할수 있는 값으로, Session 개체에 대한 마지막 요청이 이루어진 후 이 개체가 유지되는 기본 시간(분)을 지정한다. Session 개체가 메모리 리소스를 소모하므로 이 속성을 사용하여 개별 Session의 수명을 제한하면 응용 프로그램의 확장성이 향상될 수 있으나 세션에 저장해 놓은 정보를 보관할수 있는 시간은 짧아지게 된다.
Adsutil.vbs set W3SVC/AspAllowSessionState "1"
Adsutil.vbs set W3SVC/AspSessionMax "500"
Adsutil.vbs set W3SVC/AspSessionTimeOut "20"
| IIS튜닝 - 연결 시간 제한을 통한 네트워크 연결세션 확보 |
연결 시간 제한을 사용하면 유휴 연결에 소모되는 리소스 처리 손실을 줄일 수 있다. 물론 연결이 적은 서버의 경우 연결이 가능한 자원이 넉넉하므로 효과를 체감하기는 어렵다.
대량 접속 서버에서 연결 시간 제한을 설정하면 네트워크 자원 활용도를 상당히 높일수 있다. IIS는 연결 수준에서 다음 유형의 연결 시간 제한이 적용된다.
| 연결 시간 제한 |
클라이언트가 서버에 실제로 데이터를 보냈지만 현재 유휴 상태인 경우 |
| 서버 수신 시간 제한 |
서버에 대한 연결이 설정되었지만 클라이언트가 데이터를 전송하지 않은 경우 |
| 응답 시간 제한 |
구성 가능한 초당 최소 바이트 값을 기준으로 함 |
| 요청 시간 제한 |
클라이언트가 서버에 이유 없는 느린 요청(예: 1비트/초)을 발행하지 못하도록 함 | 120초로 설정할경우 최초 연결후 어떠한 서버와 클라이언트간 작업이 없더라도 120초동안 CLOSE_WAIT 상태로 연결을 유지하고 있다. 이 상태는 서버쪽 포트를 점유하고 있는 상태이다.
이 연결시간이 짧게 설정한다고해서 좋은 것은 아니다. 짧은 연결시간 제한은 연결이 끊긴후 재연결에 따는 추가적인 리소스 소모가 유휴상태에서의 재연결보다 많기 때문이다.

웹 전용서버의 경우 성능모니터 카운터값에서 Web Service\Currnet Connections의 연결수와, TCP\Connections Established 비슷한 값을 가지고 있으며 연결시간제한을 낮출경우 카운터 값도 같이 낮아져 실제 서버에 연결하는 네트워크 세션수를 줄여 추가적인 연결을 위한 자원을 확보할수 있다.

Adsutil.vbs set W3SVC/ConnectionTimeout "120"
|
| IIS튜닝 - Http 압축을 통한 트래픽 확장 |
네트워크 대역폭에 제한이 있거나, 낮은 대역폭을 확보한 클라이언트 컴퓨터의 경우에 Http압축은 훌륭한 대안이 될수 있다. Http 압축은 내용이 계속 변경되는 동적파일보다는 내용변경이 거의 없는 정적파일에 훨씬 유효하다.
IIS는 클라이언트에서 요청된 파일중 압축대상에 해당되는 파일인지 확인후에 임시압축 디렉토리에서 압축파일 존재여부를 확인후 이미 압축된 파일이 존재하면 압축된 파일을 클라이언트에 보내고, 없다면 압축을 새로 한다.
동적파일의 경우 컨텐츠 내용이 자주 변경이 되므로 압축을 할 경우 CPU리소스를 자주 소모하게 되므로 성능비용이 높아 그다지 실익은 없다. 물론 CPU 자원이 넉넉하다면 상관없지만...
|
TCP Connection |
180 (approx.) |
|
GET Rquest |
256 (approx.) |
|
5-KB File |
5,120 |
|
Protocol overhead |
1,364 (approx.) |
|
Total |
6,920
| 5KB 크기를 요청시 유발되는 트래픽량이다. 이것은 실제 데이터외에 매 요청마다 추가적인 오버헤드가 발생한다.

Http 압축은 운영중인 서버에 적용시에는 그 효과를 필히 측정해야 한다.
압축으로 인한 네트워크 트래픽 감소와 압축과정에서 소모되는 CPU 소모비용을 측정하여, CPU 점유율이 상당히 높아질경우는 압축에 따른 실익 여부를 판단해야 한다.
Http 압축모듈은 %windir%\system32\inetsrv\gzip.dll 을 이용하며, 메타베이스 경로 에서 파일 확장자는 수정이 가능하다.
다음은 test.html (1,073바이트) 이 $^_gzip_C^^INETPUB^WWWROOT^TEST^TEST.HTML(508 바이트) 로 압축된 경우다. 압축률을 계산해 보면 약 50% 정도로 높다. 압축률 만큼 네트워크 대역폭을 줄일수 있음을 알수 있다.

압축 파일 확장자 수정은 Adsutil.vbs 및 Metaedit, MetabaseExplorer를 이용하여 변경하면 된다. 물론 IIS6의 경우는 \Windows\System32\inetsrv\MetaBase.xml 에서 직접 수정이 가능하다.
|
HcDoDynamicCompression |
응용프로그램파일 압축 여부 |
|
HcDoStaticCompression |
정적파일 압축여부 |
|
HcDynamicCompressionLevel |
압축레벨 (1~10) |
|
HcFileExtensions |
정적파일 확장자 |
|
HcScriptFileExtensions |
동적파일 확장자 |
Adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcFileExtensions "htm" "html" "txt" "ppt" "xls" "xml" "pdf" "xslt" "doc" "xsl" "htc" "js" "css"
Adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcFileExtensions "htm" "html" "txt" "ppt" "xls" "xml" "pdf" "xslt" "doc" "xsl" "htc" "js" "css"
Adsutil.vbs set W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "dll" "exe" "aspx" "asmx" "ashx"
Adsutil.vbs set W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "dll" "exe" "aspx" "asmx"
|
출처웹사이트: 서버주무르기[Serverinfo.pe.kr], http://www.serverinfo.pe.kr/ |