Problème d’incrementation de Session ID

Récemment on nous a remonté un problème d’incrémentation de Session Id au sein d’une ferme XenApp 6.5 R04 Us. L’effet de bord de ce problème d’incrémentation de Session Id était que les ID de session fermés (ces sessions n’étaient plus présentes sur les serveurs et aucun process n’était visible via un procmon ou autre) n’étaient jamais recyclés ce qui engendrait des Session ID avec des valeurs excessives.

SessionId_CountOn constate bien dans l’App Center des Sessions Id élevés au vu du nombre de CCU sur ce silo 🙂

En lançant un process explorer nous avons constaté que seule les process des utilisateurs en cour étaient visibles (avec ceux du system) par contre en passant par un RamMap on constate des process csrss.exe “zombies” avec des Sessions ID associés (ce qui explique pourquoi les nouvelles sessions ne reprenaient pas d’ancien Session Id).

SessionId_Count1Il ne reste plus qu’a trouver la cause 😉

 En googlelant nous sommes rapidement tombés sur la  KB75462 de chez McAfee décrivant exactement notre problématique.

Problem

CSRSS.exe sessions have open session objects even after the active user session is closed.
The session ID is not recycled when one user logs out and another person logs in. This can cause performance issues over time.
This issue is seen only on Windows Server 2008 with Service Pack 1.

Cause

McAfee has determined that this issue is a result of Microsoft Registry Filtering API not freeing 80 bytes of ObjectContexts. These 80 bytes include references to operating system resources (a process object that inherits a session object). The open session constitutes a resource leak that has a disproportionate impact on the operating system. If user sessions are spawned and terminated in excess, it causes in an equally large number of sessions that are not closed. This number increases until it impacts the operating system.As part of its Access Protection feature, VSE 8.8 must use the Registry Filtering API to protect the registry. When the Access Protection feature is enabled, bad behavior is exposed in Microsoft Registry Filtering API.

La  KB75462 préconise la mise à jour du VSE en 8.8 patch 4, le passage du  VSE en 8.8 patch 4 a bien corrigé le problème dans notre cas.

Post to Twitter

XenApp_Usr : mise à jour 1.3

Dans cette mise à jour, nous avons corrigé quelques bugs mineurs et rajouté les fonctionnalités ci-dessous :

  • Une section “Gpo Applied” qui affiche toutes les Gpos appliquées (avec les Gpos bloquées) sur l’utilisateur et le serveur hébergeant la session (avec un compteur total du nombre de Gpos appliquées)
  • Possibilité d’exporter la Gpo sélectionnée au format HTML (il faut comme pré-requis que le  Module GroupPolicy soit installé sur même le serveur que XenApp_Usr)
  • Possibilité d’exporter toutes informations de la session courante dans un fichier texte

 

XenApp_usr1_3
Nos collègues ont bien apprécié la partie Gpos applied 😉

Pour télécharger XenaApp_Usr c’est par ici

Post to Twitter

XenApp_Usr

————————————————————————————————————
MAJ : 23/03/2015
V1.4

  • Rajout du refresh des sessions lors d’un logoff
  • La progressBar change de couleur en fonction de la charge du serveur hébergeant la session (vert de 0 à 5999, orange de 6000 à 8499 et rouge à partir de 8500)
  • Le champ username accepte la validation via la touche Entrée (Enter)
  • Refresh des process lorsqu’un process est tué via le bouton Stop
  • Correction de divers bug mineurs

————————————————————————————————————

MAJ : 22/12/2014
V1.3

  • Correction de bugs mineurs
  • Ajout de la section “Gpo Applied”
  • Possibilité d’exporter la Gpo sélectionnée au format HTML (il faut comme pré-requis que le  Module GroupPolicy soit installé sur même le serveur que XenApp_Usr)
  • Possibilité d’exporter toutes informations de la session courante dans un fichier texte

————————————————————————————————————

C’est quoi XenApp_Usr  ? 🙂

C’est un script PowerShell que nous avons mis en place et qui permet via une GUI de retrouver la ou les session(s) d’un utilisateur au sein d’une ferme XenApp.

Un fois la ou les sessions retrouvée(s), il suffit de sélectionner une session afin que les informations ci-dessous s’affichent dans la GUI :

  • Nom et version de la ferme XenApp
  • Application publiée
  • Serveur sur lequel la session est connectée
  • Etat de la session
  • Version du client ICA
  • Type de client
  • Nom du client
  •  IP du client
  • Date et heure de la connexion
  • Imprimantes de la session
  • Processus  lancés dans la session
  • Afficher la bande passante de la session ICA
  • Afficher la latence de la session ICA

A cela nous avons ajouté la possibilité d’effectuer les actions ci-dessous :

  • Fermer la session
  • Lancer un remote assistance sur la session
  • Stopper un process de la session

 

XenApp_UsrV1 Ok la GUI fait un peu année 90 🙂

 

XenApp_Usr a été validé sur des fermes XenApp 6.5 R01, R03 et R04 (us et fr), la consommation mémoire est d’environ 60 Mo ( 🙁 faudra qu’on regarde pour diminuer ça).

Vos remarques et suggestions sont les bienvenues (au passage nous avons volontairement éviter les Splash Screen et Progress Bar).

Pour l’instant (et vu que le code n’est pas encore présentable) on ne livre que le ps1 compilé en binaire, la version ps1 arrive asap .

Au passage la GUI a été réalisée avec Powershell Studio de Sapien.

 

Download_2XenApp_Usr.rar

 

———————————————————
MAJ : 24/11/2014
V1.1
Correction de bugs mineurs
Ajout de la charge serveur (Load server)
———————————————————

Post to Twitter

Problème de reconnexion sur une application limitée à une instance

Au sein d’une ferme XenApp 6.5 R03 US, nous avions des utilisateurs qui ne pouvaient plus se connecter sur une application limitée à une instance par utilisateur.

 

Reco01

 

En regardant les sessions des utilisateurs rencontrant ce type de problème nous avons constaté que les sessions étaient actives, en effet les sessions déconnectées passaient en active après un délai de 30 mn, les 30 mn correspondant à la “fin d’une session déconnectée” dans une GPO du silo applicatif.

Dans notre cas les sessions n’étaient pas fermées mais repassaient en active du fait que le process “splwow64.exe” (permet l’impression à partir d’application 32 bits sur des pilotes 64 bits) ne se fermait pas correctement (merci procmon, mais on aurait pu faire plus simple via un gestionnaire de tâche 🙂 ).

Un google plus loin nous tombons sur la CTX138940 qui dans le point 11 indique que dans pareil cas il faut créer (sauf si vous jouez avec la persistance de session) la clé de registre (REG_DWORD) “AllowLogoffSysModules” et lui donnez la valeur 1.

 

Reco02

Post to Twitter

Simuler une latence dans une session ICA

Pour visualiser une latence dans une session ICA on a EdgeSight et pour les plus pauvres d’entre nous perfmon (et aussi HDX Monitor)  avec les compteurs “Latence – Dernière enregistrée”, “Latence – écart de session”, “Latence – moyenne de session”, mais que donnent les valeurs de latence remontées visuellement dans une application publiée  ?

Ctx_Latency_escarqui a dit que ça ramait ?

 

TMnetsim (ça fait deux ans qu’on s’en sert et on fait le billet seulement maintenant 🙁 ) permet de simuler une latence (en jouant le rôle de proxy) pour se connecter à une application publiée (par exemple), outre que TMnetsim est gratuit, il est portable et très simple d’utilisation.

 

  • Télécharger TMnetsim et déziper dans un dossier son contenu
  • Créer un fichier ica custom permettant de lancer une application publiée (avec Citrix Quick Launch par exemple)
  • Modifier le fichier ica afin de faire pointer la partie adresse sur le serveur hébergeant TMnetsim et ajouter un port TCP comme par exemple 1495

Ctx_Latency_IcaFile

  • Lancer TMnetsim.exe et renseigner le l’IP du serveur XenApp et les ports Inbound (dans notre cas 1495) et le port Outbound (1494), rentrez la latence que vous souhaitez dans le champ Delay Base (MS) puis cliquez sur le bouton Start (vous pouvez aussi choissir le type de Delay).

Ctx_Latency_TMnetsim

  • Double cliquez sur le fichier ICA précédemment crée et modifié

Ctx_Latency_TMnetsim01On constate bien que la connection ICA passe par TMnetsim

 Il ne vous reste plus qu’a constater par vous même les effets de la latence au sein de votre application publiée 😉 .

Quelques liens sur TMnetsim :

http://www.tmurgent.com/appv/index.php/87-tools/performance-tools/177-tmnetsim-quick-and-easy-network-simulation-tool
https://4sysops.com/archives/free-tmnetsim-network-simulator-simulate-network-latency-and-packet-loss/

Post to Twitter

Crash Online Plug-in 12.3

Il y a quelques jours nous avons rencontré un problème qui jusqu’à présent ne s’était jamais posé de cette façon, cinq utilisateurs rencontraient un crash WFICA32.exe lorsqu’ils lançaient une application publiée spécifique (les autres applications publiées se lançaient sans problème), lors du lancement de l’application en question un crash WFICA32.exe se produisait systématiquement avec un event 1002.

 

Nom du journal :Application
Source :       Application Hang
ID de l’événement :1002
Catégorie de la tâche :(101)
Niveau :       Erreur
Description :
Le programme WFICA32.exe version 12.3.0.8 a cessé d’interagir avec Windows et a été fermé. Pour déterminer si des informations supplémentaires sont disponibles, consultez l’historique du problème dans le Centre de maintenance.

 

Les postes clients étaient en Seven Sp1 fr (on ne sait pas si c’était du 64 ou 32 bits) avec un Online Plug-in 12.3.

Au détour de quelques questions on apprend que nos utilisateurs ont déménagé récemment et qu’ils impriment désormais sur une nouvelle imprimante, après un arrêt du spooler sur l’un des postes  la fameuse application se lançait. Nos collègues de poste de travail on dû changer le pilote afin que tout rentre dans l’ordre (par contre on n’a pas le nom du pilote qui causait problème 🙁  ).

 

CLUEDO
Une partie ? 🙂

 

 

Post to Twitter

Mise à jour de XenApp_Check : 2.5

MAJ :19/09/2014

La version XA5 passe en 2.5

 


 

Déjà plus d’un an depuis la dernière mise à jour de XenApp_Check (436 jours exactement), on ne vous fera pas le coup du “comme le temps passe vite” mais pas loin 😉 .

Dans cette mise à jour  nous avons ajouté une section “UPM version” qui permet de vérifier si les agents UPM sont UpToDate (par rapport à la version que vous avez validée ) au sein de vos fermes et une section “Section statut” affichant les sections désactivées”.

La version UPM de référence dans XenApp_Check est la “5.0.0.111” (modifiable via la variable $UPMVer)
Nous avons aussi corrigé divers bugs mineurs et amélioré le temps d’exécution du script (réduction d’environ 15 % du temps d’exécution) en changeant le check WMI  (on passe par un socket.TcpClient sur le port 135).

 

XenApp_Check_2_5

 

Seule la version XA6 passe en version 2.5, la version XA5 sera très prochainement mise à jour.

Désormais les fichiers XenApp_CheckXA6.ps1 et le fichier Ctx_FunctionXa6.ps1 sont regroupés au sein d’un fichier rar.

Comme d’habitude vos remarques et suggestions sont les bienvenues.

 

XenApp_Check_GraphMerci pour les DL 😉


Le billet sur XenApp_Check

Post to Twitter

Recreation du compte de service Ctx_SmaUser

Ce billet juste pour mettre à dispo CtxSma20.exe (vu qu’on a lutté pour le retrouver 😉 ). En effet récemment nous avons dû recréer dans l’urgence le compte de service Ctx_SmaUser (sur un serveur membre d’une bonne vielle PS 4.0 R03 Fr) et bien sûr aucun moyen de mettre la main sur CtxSma20.exe (si vous avez un link up on le rajoutera dans ce billet), du coup direction la CTX106393 qui est la seconde solution pour récréer le Ctx_SmaUser (à la mano), son seul inconvénient est d’être un poil plus long ;).

 

Pub_DDA la question, “mais vous n’aviez pas sur vous un SSD rempli des tools indispensables”  ? He bien non… pas ce jour là 🙂

 

Download_2
CtxSma20.exe

Post to Twitter

Vérifier la version UPM des serveurs membres d’une ferme XenApp

Toujours dans l’idée d’avoir des serveurs XenApp les plus ISO possible, cette fois-ci nous nous sommes penchés sur la/les version(s)s d’UPM (Universal Profil Manager) installée(s) au sein de nos différentes fermes XenApp.

 

SepagoHé oui à la base UPM  c’était SepagoProfile (écrit en C++ et multithreadé s’il vous plait 😉  ),  Citrix ayant racheté SepagoProfile  à SEPAGO en Mai 2008)

Le script disponible dans ce billet permet donc de vérifier la version UPM (via WMI, il faut donc que le port TCP 135 soit ouvert sur les serveurs)  installée sur tous les serveurs membres d’une ferme XenApp.
Afin de vérifier la version UPM installée sur chaque serveur, le script va rechercher dans  toutes les subkeys de “SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\” si l’une des valeurs “DisplayName” contient la chaîne de caractère  “Citrix Profile Management” si c’est la cas, le script va lire la valeur “DisplayVersion” afin de déterminer la version UPM installée et vérifier si cette dernière correspond ou pas à la version recherchée et validée dans votre environnement, dans notre cas la 5.0.0.111 (Variable $UPMVer en ligne 17 du script).

 

UPM_CheckOn n’est pas si mal sur cette ferme, juste un serveur sans UPM et un avec une ancienne version, reste à faire un check de la DMZ 😉 .

 

Bien sur on va rajouter le check de la version UPM dans XenAppCheck  (ça fait un bail qu’on ne l’a pas mis à jour d’ailleurs 🙂 .

 

Download_2CheckVer_UPM.ps1

 

Vous avez aussi la possibilité de lancer le script en mode verbose en rajouter l’argument -Verbose ( CheckVer_UPM.ps1 -Verbose)

Post to Twitter

Le EdgeSight du pauvre

———————–
MAJ 05/04/2016
———————–
Ajout du “ClientVersion” afin d’obtenir la version du receiver de chaque utilisateur

———————-

Suite à des BSOD provoqués par nos agents EdgeSight, nous avons dû en urgence désinstaller les clients EdgeSight d’un silo d’une ferme XenApp 6.5 R03 us (les dumps sont en cours d’analyse et pour l’instant le coupable est rskcore.sys).

Nous avons certes rétabli le service, mais nous avons perdu des informations utiles comme “qui lance les applications publiées” (informations disponibles en mode avancé) 🙁 .

Du coup nous avons mis en place un script PowerShell qui récupère les applications publiées lancées au sein de notre ferme, puis écrit tout ça dans un fichier à plat (on va rapidement passer ça dans une base sql).

 

Edg_du_Pauvre011Et voila ce que ça donne sous excel (on vous l’avais dit c’est le EdgeSight du pauvre 🙂 mais ça rend le service

Comment fonctionne le script ? Tout d’abord nous ne souhaitions pas installer d’agent sur chaque serveur membre de la ferme ou passer par un login script (bien que GETPUBAPP de chez Ctrl-Alt-Del aurait parfaitement fait l’affaire), une solution est donc d’interroger le ZDC via un serveur d’administration par exemple (et là on entend certains crier HOULA).

Le script en lui-même est on ne peut plus simple, en gros on fait un “Get-Xasession|?{$_.LogOnTime -gt $Date3}” ($Date3 étant égal à l’heure du jour moins une minute) toutes les minutes et on ne récupère que les sessions ouvertes la dernière minute.

Concernant la mise en place du script, plusieurs solutions sont possibles comme une tache planifiée, un service ou bien un login script computer. Nous avons opté pour un service afin que ce dernier puisse se relancer en cas de d’arrêt du script.

Pour la création du service on passe par un bon vieux SC  (au préalable nous avions compiler notre script via PowerGui, le binaire sera lancé via SRVAny avec un compte admin de la ferme XenApp ) :

SC CREATE “ServiceName” binPath= “YourPath” DisplayName= “DisplayName” start= auto

 

Edg_du_Pauvre012Un tableau dynamique plus loin 😉

Download_2UsrApp.ps1


—————–

06/08/2014
—————–
Le script crée désormais un fichier de log par mois (NomDeLaFerme_Année-Mois_UsrApp.txt)

Post to Twitter