Performance tuning the IBM Notes client is a topic we at panagenda are rather passionate about. So passionate, in fact, that we’ve presented about this topic no less than 30 times! Now it’s time for a slightly different angle – virtualization of the Notes client on Citrix XenApp!

All the below tips are written for the IBM Notes MULTI-USER CONFIGURATION client on Citrix on IBM Notes releases 8.x to 8.5.3FP2. While it’s possible to use some of the below tips with other versions, it’s not recommended, or at least not until you’ve thoroughly tested them. And you are going to test these anyway, before using, RIIIGHT?

Shared Cache File for all Users

In your %NOTES_PROGRAM%\framework\rcp\deploy\jvm.properties file, search for
jvm.shareclasses.loc=

As of release 8.5, this is configured as
jvm.shareclasses.loc=${rcp.data}/.config/org.eclipse.osgi

which you want to change to
jvm.shareclasses.loc=c:/temp/xpdplat

to allow all users to share ONE cache file, rather than build one each in their data directory.

Also add the following line, if missing:
vmarg.Xnolinenumbers=-Xnolinenumbers

Shared Java Classes

see also: http://www-01.ibm.com/support/docview.wss?uid=swg21330177

In your %NOTES_PROGRAM%\framework\rcp\eclipse\plugins\com.ibm.rcp.j2se.win32.x86_1.6.0.20080416-200806200100 file, REMOVE:
<singleJVM>

So the line should look something like this:
vmarg.Dshare=-Xshareclasses:name=xpdplat,controlDir=${prop.jvm.shareclasses.loc},groupAccess,keep,nonfatal

Remove config.system.* entries

In your %NOTES_PROGRAM%\framework\rcp\rcplauncher.properties file, REMOVE:
config.system.2=${rcp.home}/rcp/systemdata
config.system.1=-data

Please note that the line:
rcp.install.id=133154848636

MUST be the same across all Citrix servers in order to not have Notes clients re-run provisioning at each launch. The value 133154848636 above is not meant to be copied and pasted, however, but be sure to choose a value from your own environment and duplicate it across your Citrix servers.

Set/Increase Eclipse memory

In your %NOTES_PROGRAM%\framework\rcp\deploy\jvm.properties file, ensure that the following default parameters are set:
vmarg.Xmx=-Xmx256m
vmarg.Xms=-Xms64m

This is one entry that has often been recommended to increase to 1024 and 128 respectively, however with  Citrix more than user will be using a client on the same machine – think number of concurrent user sessions multiplied with possible memory requirements for the JVM.

Remove arg * values to fix installer errors

In your %NOTES_PROGRAM%\framework\rcp\systemdata\.config\args.properties file, REMOVE:
arg4=-config
arg5=system

Note: depending on Notes release, it might be the arg2 and arg3 lines you need to remove.

In order to prevent registry error due to insufficient end user permissions, do the following

In your %NOTES_PROGRAM%\framework\rcp\eclipse\features\com.ibm.rcp.portal.feature_6.2.3.20110915-1350\handler.properties file, COMMENT OUT:

exec.command.win32x86=”${plugin.dir}\\${plugin.dir.com.ibm.rcp.ca.utils}\\register_ca.bat” “${rcp.home}” “${plugin.dir}\\${plugin.dir.com.ibm.rcp.ca.utils}\\register_ca.reg”

Then go to your %NOTES_PROGRAM%\framework\rcp\eclipse\features\com.ibm.portal.feature_6.2.3.20110915-1350\handler.properties and COMMENT OUT:

#exec.command.win32x86=”${plugin.dir}\\${plugin.dir.com.ibm.portal}\\register_cai_url.bat” “${rcp.home}” “${plugin.dir}\\${plugin.dir.com.ibm.portal}\\cai_register.reg” “${product.install.dir}” “${plugin.dir.com.ibm.portal}”

Edit the shared Notes.ini

In your [IBM Notes Shared Data Directory]\notes.ini file, ADD:
Ports=TCPIP

TCPIP=TCP,0,15,0 -> Note that this sets port encryption to OFF, which is appropriate for Citrix; Port compression adds 5% CPU overhead and with 60 concurrent sessions this would result in needing 3 dedicated CPUs for just port compression

DISABLE_CLIENTRECORD=1 -> This disables logging of client information back into the public address book as all Citrix users share the same machine.
log=,1,0,7,40000 -> This disables logging, which is optional but gains a slight performance improvement
CREATE_R85_DATABASES=1 – make sure that the shared notes.ini does NOT contain CREATE_R8_DATABASES=1

Edit the Registry

In your end user registry, make sure that the following entries are set:
HKLM\Software\Lotus\Notes\MultiUser=0x000001
HKLM\Software\Lotus\Notes\9.0\MultiUser=0x000001

Templates in IBM Notes shared data directory

Compact all templates in the shared data directory as follows:

  • TEMPORARILY copy the root notes.ini (as changed in above steps!) from the shared data directory to the notes program files directory
  • open cmd.exe
  • run %NOTES_PROGRAM%\ncompact.exe -ODS -* [IBM Notes Shared Data Directory] MPORTANT: Notes.ini must first contain a notes.ini with CREATE_R85_DATABASES=1
  • DELETE the notes.ini copied in step a.) (=the one in the program dir, NOT in the shared location)
  • When done, you can copy all templates over to other Citrix servers.

Bonus Tip

Last but not least, we strongly advise you to investigate the following CLIENT/DATA DIRECTORY housecleaning options from time to time on clients – naturally, panagenda MarvelClient makes this easy:

  • clean out ($Policies) views in (client) names.nsf once (only do this upon analysis of startup times; contact panagenda support for details)
  • compact desktop
  • compact names.nsf
  • compact desktop8.ndk
  • compact bookmark.nsf
  • compact log.nsf

A special thanks goes to Christian Henseler, who has contributed to much of the above. And for those of you who really want to dig in, check out this fantastic IBM White Paper!

Happy optimizing!