IIS Application Pool RAM Management

Bu makalemizde IIS üzerindeki uygulama havuzlarına tüketeceği max. Ram miktarı tanımlayacağız ve ram tüketimini aşan uygulama havuzlarının bildirimini kendimize mail olarak gönderteceğiz.

Öncelikle IIS açarak ram miktarını tanımlayalım.

Sağ tarafta bulunan Set Application Pool Defaults tıklıyoruz ve açılacak sayfada REcycling altındaki Private Memory Limit seçeneğine gelerek buraya vereceğimiz ram limitini KB cinsinden giriyoruz.

İşlemi tamamladıktan sonra OK tıklayacak pencereyi kapatıyoruz.

Artık tüm uygulama havuzlarında girmiş olduğunuz limitleme tanımlanmış durumda.

Yalnız dikkat etmeniz gereken bir nokta var. Ram limiti tanımladıktan sonra Ram limitini aşan uygulama havuzları otomatikman recycling olacak ve sunucuda darboğaz oluşmasını engelleyeceğiz ancak uygulama havuzunun recycle olması demek mevcut sessionların sonlanması demektir. Bu sebeple uygulama havuzu her recycle olduğunda sessionlar sonlanacak ve yeni sessionlar açılacaktır. Bu sebeple session sonlanma problemini göz önüne alarak bazı uygulama havuzlarında bu limitlemenin oluşmamasını isteyebilirsiniz. Örneğin; bir paneliniz var ve panel uygulama havuzunun recycle olmasını istemiyorsunuz o zaman bu uygulama havuzunu bu kuralın dışına çıkarmanız lazım. Bu şekilde birden fazla uygulama havuzunuz var ise oturup tek tek uygulama havuzunu açıp advanced settings girip bu limiti 0 yapmak ile uğraşmamanız adına aşağıdaki powershell scriptini kendinize göre düzenleyip kullanabilirsiniz.

Import-Module WebAdministration

Set-ItemProperty -Path “IIS:\AppPools\DefaultAppPool” -Name Recycling.periodicRestart.privateMemory -Value 0

Set-ItemProperty -Path “IIS:\AppPools\ASP.NET 2.0 (Classic)” -Name Recycling.periodicRestart.privateMemory -Value 0

Set-ItemProperty -Path “IIS:\AppPools\WebsitePanel Portal Pool” -Name Recycling.periodicRestart.privateMemory -Value 0

Set-ItemProperty -Path “IIS:\AppPools\WebsitePanel Server Pool” -Name Recycling.periodicRestart.privateMemory -Value 0

 

Limit tanımlama işlemini yaptıktan sonra şimdi sıra geldi limit aşımı yapan uygulama havuzlarının bildirimini almaya. Yapınızda bir SCCM yok ise bu işi event viewer ve zamanlanmış görev yardımı ile yapacağız.

Aşağıdaki kodları bir xml içerisine kayıt ediyoruz. Ben XML dosyasına IIS-Limit.xml ismini verdim.

<ViewerConfig><QueryConfig><QueryParams><UserQuery /></QueryParams><QueryNode><Name>IIS-Limit</Name><QueryList><Query Id=”0″ Path=”System”><Select Path=”System”>

        *[System[(EventID=5117) or  (EventID=5077)]]

      </Select></Query></QueryList></QueryNode></QueryConfig><ResultsConfig><Columns><Column Name=”Level” Type=”System.String” Path=”Event/System/Level” Visible=””>189</Column><Column Name=”Keywords” Type=”System.String” Path=”Event/System/Keywords”>70</Column><Column Name=”Date and Time” Type=”System.DateTime” Path=”Event/System/TimeCreated/@SystemTime” Visible=””>239</Column><Column Name=”Source” Type=”System.String” Path=”Event/System/Provider/@Name” Visible=””>149</Column><Column Name=”Event ID” Type=”System.UInt32″ Path=”Event/System/EventID” Visible=””>149</Column><Column Name=”Task Category” Type=”System.String” Path=”Event/System/Task” Visible=””>152</Column><Column Name=”User” Type=”System.String” Path=”Event/System/Security/@UserID”>50</Column><Column Name=”Operational Code” Type=”System.String” Path=”Event/System/Opcode”>110</Column><Column Name=”Log” Type=”System.String” Path=”Event/System/Channel”>80</Column><Column Name=”Computer” Type=”System.String” Path=”Event/System/Computer”>170</Column><Column Name=”Process ID” Type=”System.UInt32″ Path=”Event/System/Execution/@ProcessID”>70</Column><Column Name=”Thread ID” Type=”System.UInt32″ Path=”Event/System/Execution/@ThreadID”>70</Column><Column Name=”Processor ID” Type=”System.UInt32″ Path=”Event/System/Execution/@ProcessorID”>90</Column><Column Name=”Session ID” Type=”System.UInt32″ Path=”Event/System/Execution/@SessionID”>70</Column><Column Name=”Kernel Time” Type=”System.UInt32″ Path=”Event/System/Execution/@KernelTime”>80</Column><Column Name=”User Time” Type=”System.UInt32″ Path=”Event/System/Execution/@UserTime”>70</Column><Column Name=”Processor Time” Type=”System.UInt32″ Path=”Event/System/Execution/@ProcessorTime”>100</Column><Column Name=”Correlation Id” Type=”System.Guid” Path=”Event/System/Correlation/@ActivityID”>85</Column><Column Name=”Relative Correlation Id” Type=”System.Guid” Path=”Event/System/Correlation/@RelatedActivityID”>140</Column><Column Name=”Event Source Name” Type=”System.String” Path=”Event/System/Provider/@EventSourceName”>140</Column></Columns></ResultsConfig></ViewerConfig>

Xml kayıt ettikten sonra bu dosyayı Event Viewer içerisine Custom views olarak ekleyeceğiz. Event Vieweri açıyoruz ve import Custom View seçeneğine tıklıyoruz. IIS-Limit.xml dosyasını gösterip open tıklıyoruz. Karşımıza gelece menüde bir işlem yapmayıp Ok tıklayarak devam ediyoruz.

Custom views altında IIS-Limit event logları geliyor.  Limit aşımı yapan kullanıcıları bu şekilde rahatlıkla takip edebilirsiniz.

Şimdi bu logları event loga düştükçe mail olarak bize gönderelim ki hangi uygulama havuzunun ne kadar kaynak tükettiğini görebilelim.

Aşağıda ki powershell dosyasını kendimize göre düzenleyip kayıt ediyoruz.

$SMTPServer = “smtp-server-adresiniz”

$SMTPPort = “25”

$Username = “mail-hesabınız”

$Password = “Şifreniz”

 

$to = “info@okanozbey.com”

#$cc = “destek@okanozbey.com”

$subject = “Website Kaynak Yetersizligi”

$body = get-winevent -FilterHashtable @{Logname=’System’;ID=5117}  -MaxEvents 1| select message, TimeCreated | format-list | Out-String

$message = New-Object System.Net.Mail.MailMessage

$message.subject = $subject

$message.body = $body

$message.to.add($to)

#$message.cc.add($cc)

$message.from = $username

 

$smtp = New-Object System.Net.Mail.SmtpClient($SMTPServer, $SMTPPort);

$smtp.EnableSSL = $false

$smtp.Credentials = New-Object System.Net.NetworkCredential($Username, $Password);

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { return $true }

$smtp.send($message)

write-host “Mail Sent”

bu dosyayı kendinize göre düzenleyip IIS-Limit-Sendmail.ps1 ismi ile kayıt edin ve Event loglarda IIS-Limit sağ tıklayıp Attach task to This Custom View tıklayın açılacak pencerede Next diyerek devam edin.

Burada Start a Program diyerek devam ediyoruz.

 

Program/Script bölümüne powershell yazıyoruz. Add Arguments bölümüne ise aşağıda ki yazıyı kendinize göre düzenleyip yazıyoruz.

-file “C:\Program Files\IIS-Limit\IIS-Limit-Sendmail.ps1”

Ben IIS-Limit-Sendmail dosyasını Program files altında bir dizine attığım için bu yolu yazdım. Kendinize göre düzenleyebilirsiniz.

Yazdıktan sonra Next ve fnish diyerek işlemi tamamlıyoruz.

Artık Event loga her düşecek olan 5117 Id’li yani ram limiti aşan uygulama havuzu logu için size mail gelecektir.

Bu şekilde web sunucu üzerindeki uygulama havuzlarının kullanacağı kaynakları limitlendirip takip ederek sunucu optimizasyonunu bir adım ileri taşımış oluyoruz.

Başka bir makalede görüşmek üzere.

Exit mobile version