Performance tuning Citrix Storefront

This is something I wanted to write about for some time now, after the release of XenDesktop 7 but there are only 24 hours in one day so therefore I didn’t have the time before now Smilefjes

But the purpose of this post is to really say that Storefront is slow…..
Don’t get me wrong it not about Citrix but the combination of Storefront and IIS that makes it a bit complex and therefore this makes it a bit slow.

Now there are a couple of tricks that can tune the perfomance.

Socket Pooling
In Web Interface you could enable it from the console, but in StoreFront we have to change it in the store config. By enabling socket pooling, Storefront maintaines a pool of sockets instead of creating a socket each time a new user connects, this will give a better performance for SSL based traffic.

You can enable this by opening the web.config file under C:\inetpub\wwwroot\Citrix\storename\


And Change this to “on” after that you have to do an IIS reset.

Application Initialization

(NOTE: Make sure you backup the config files before making alterations)

With Windows Server 2012 we have a new feature in IIS called always running on the application pools, this allowed for IIS to make everything ready after an application pool has restarted, before this the previous IIS was set to start loading after the first user tried to login after a restart. This caused the first user to login after an application pool has restarted to take loooong time to login. With Server 2012 IIS we can change the application pool to always running.

With 2008 R2 not so easy. But we can make it happen Smilefjes
First we need to download the application initialization feature from Microsoft

After that is done and installed do a restart on the storefront server.

Then we have to make som changes to the config. First we need to change the application pool to always running (we cannot do this via the gui in 2008 R2)

Open the C:\Windows\System32\inetsrv\config\applicationHost.config on the storefront server. Locate the following setting /configuration/system.applicationHost/applicationPools

Then we have to add the always running paramter on each application pool for instance the authentication pane we need to add the startMode=”AlwaysRunning” on each ofthem.

<add name=»Citrix Delivery Services Authentication»
autoStart=»true» managedRuntimeVersion=»v2.0″
managedPipelineMode=»Integrated» startMode=»AlwaysRunning»>

And you might have the following application pools in the config that needs to have this paramter.

  • Citrix Delivery Services Authentication
  • Citrix Delivery Services Resources
  • Citrix Receiver for Web
  • Citrix Delivery Services

Now after we have done that in the same document we have to change under the /configuration/system.applicationHost/sites we need to add the preloadEnabled=”true” paramter. So for instance for the authentication application

<application path=»/Citrix/Authentication»
applicationPool=»Citrix Delivery Services Authentication»

This paramter needs to be added for all the Citrix Applications (Depending for instance if AG is setup)

  • /AGServices
  • /Citrix/Authentication
  • /Citrix/Roaming
  • /Citrix/<StoreName>
  • /Citrix/<StoreName>Web

After this is done save the config, do an IISreset and test the login to make sure that is it operational and that you don’t get any errors (check also under the web server event log)

Next we need to make changes to the following config files

  • C:\inetpub\wwwroot\AGServices\web.config
  • C:\inetpub\wwwroot\Citrix\Authentication\web.config
  • C:\inetpub\wwwroot\Citrix\Roaming\web.config
  • C:\inetpub\wwwroot\Citrix\<StoreName>\web.config

Under the section /configuration/system.webServer we need to add

<applicationInitialization skipManagedModules=»true»>
<add initializationPage=»/endpoints/v1″ />

On each of the following config files.

After this is done we need to change the Store config file which is located under C:\inetpub\wwwroot\Citrix\<StoreName>Web\web.config
Under the same section as those above we need to add the following parameters.

<applicationInitialization skipManagedModules=»true»>
<add initializationPage=»/Home/Index» />

After that is done save the config, and do an IIS reset.

Now if you are having trouble with Storefront, it generates its own events in Event Viewer under Citrix Delivery Services.
Also it is important to note that if you are having to much issues with a slow StoreFront you should go with 2012 since it is out-of-the box optimized ASP/IIS setup.

And it is also important to remember that Storefront should be on a dedicated server with atleast 2 GB of ram and 2 cores.

If you are having trouble with Storefront you can enable trace logging *This requires alot more CPU on the server”

Add-PSSnapin Citrix.DeliveryServices.Framework.Commands

Set-DSTraceLevel -All -TraceLevel Verbose

To disable you just need to set –TraceLevel off.
All the information will ge placed in C:\Program Files\Citrix\Receiver StoreFront\admin\trace folder on the storefront server.

#storefront, #xendesktop-7