L’effet VUEM

Nous avons donc décidé d’essayer VUEM sur un de nos environnements, afin d’avoir une idée de l’optimisation utilisateur applicable.

Que fait l’optimisation mémoire de VUEM ?

Pour faire simple, après un certain temps d’inactivité d’un processus VUEM demande à l’OS de décharger la mémoire utilisée par celui-ci sur le swap.

Afin d’étudier cette action, nous avons monitorer les informations WorkingSet et VirtualSize des sessions utilisateurs, pour rappel, la virtualSize est la mémoire alloué à un process (RAM + swap) et le WorkingSet la partie utilisable ( RAM ), en powershell via WMI depuis un serveur dédié Citrix et nous envoyons les mesures dans un RRD.

$sessions = get-xasession -BrowserName MyApp
#(... Some initialization here)
$sessions	| group ServerName |% {
	$servername = ($_.Name.split(':')[0])
	$user_sess = (	$_.group |% {
		$sessionid = $_.SessionId
		$data = gwmi win32_Process -computername $_.ServerName  -Filter "SessionId='$($_.SessionId)'" | 
			select NAme, ProcessID, PAgeFileUsage, @{N='WSKb';E={$_.WorkingSetSize/1Kb}},@{N='VSKB';E={$_.VirtualSize/1Kb}} | 
			measure-object -property PageFileUsage, WSKb, VSKB -sum 
		new-object Psobject -property @{"SessionID"=$sessionID;"PageFileUsage"= $($data |? {$_.property -eq "PageFileUsage"}).Sum;"WSKB"=$($data |? {$_.property -eq "WSKB"}).Sum;"VSKB"=$($data |? {$_.property -eq "VSKB"}).Sum}
	})
	if(test-path "$($ServerName)_session.csv" ){
		$session_DS = @(import-csv "$($ServerName)_sess.csv" -delim ',' |% { 
			if( ($user_sess |% { $_.SessionID}) -notcontains $_.session){
				$_.session = $null
			}
				$_
		})
	}else{
		$session_DS = @()
	}

	$user_sess = ($user_sess |% {  
		$rank = ($session_DS |? {$_.Session -eq $_.Sessionid }).rank
		if(-not($rank )){
			$rank = ($session_DS |? { -not ($_.Session) }).rank
			if(-not( $rank) ){
				$rank = ($session_DS | measure-object -Max Rank).Maximum + 1
				if(-not($rank)){$rank=1 }
				$session_DS +=(new-object PSObject -property @{"Rank"=$rank;"Session"=$_.SessionId} )
			}else{
				$session_DS[$rank-1]=new-object PSObject -property @{"Rank"=$rank;"Session"=$_.SessionId} 
			}
		}
		$_ | add-member -type noteproperty -name Rank -Value $rank -passthru
	} )| sort Rank 
	$value = @($user_sess|% { "$($_.PageFileUsage/1kb):$($_.WSKB/1kb):$($_.VSKB/1kb)"})
	if($value.count -ne 25){
		1..(25-$value.count) |% {
			$value+=("U:U:U")
		}
	}
	$session | select Rank, @{N="Session";E={$_.SessionId}} | export-csv "$($ServerName)_sess.csv" -delim ','
	$filter = "$($ServerName)_session*"	
	Update-RRD -rrd $($rrdsources |? { $_.File -like "$filter"}) -values $value
}	

Comme prévu, VUEM n’a aucun effet sur le virtualsize, par contre le WorkingSet est souvent « vidé »
NoVUEM_session_VirtualSizeVUEM_session_VirtualSize

Le VirtualSize des sessions est équivalent sur les 2 environnements.
NoVUEM_session_WorkingSetVUEM_session_WorkingSet

Le WorkingSet est plus faible sur le serveur avec VUEM. L’effet est plus flagrant si on empile le WorkingSet
NoVUEM_Stacked_WorkingSetVUEM_Stacked_WorkingSet

Qu’est-ce que ça change pour mes serveurs ?

L’effet direct est une augmentation du nombre maximal d’utilisateur hébergeable, le serveur effectuant en quelque sorte un swap pré-emptif, il reste plus de ressource disponible pour les processus actifs. Dans le cadre de notre test, nous pouvons augmenter la capacité d’accueil des serveurs d’au moins 40%.
graph_rdp_session

Sur la journée choisie, la charge en utilisateur sur le serveur avec VUEM a été 40% supérieur.

Voici les différents métriques serveurs _ RAM 12Go, Swap 6Go:
graph_memusage

graph_swap_usage

graph_xaload

graph_CPU_Load

Le serveur avec VUEM a rempli plus rapidement son swap, ce qui lui a permis d’avoir plus de RAM disponible pour les utilisateurs actifs, nous avons pu tasser 40% d’utilisateur de plus sans avoir de retour de lenteur sur les applications. L’Effet VUEM ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *