Tuning iTop Performance
In order to enhance the performance of your iTop server, the first point to undestand where the bottleneck is. Is it the PHP execution of the pages which is too slow, or is MySQL?
The real tuuning of the application's performance requires deep-dive into the actual usage pattern of your iTop instance, however there are few generic points to check:
Install APC
If it is available on your system, install and enable APC (Alternative PHP Cache). APC speeds-up PHP applications by caching the result of the PHP parsing as opcodes in shared memory. Moreover, iTop uses APC for caching a lot of its internal structures in memory instead of rebuilding them at each page load.
Installing APC will improve the overall responsiveness of the application, which is especially important for “small” pages.
Remove un-needed dictionary files
Using iTop in your language is great, but do you really need Turkish, Spanish, Russian and Chinese on your system? If the answer is no, then ou can free a good amount of memory that will be used for more productive purposes. Moreover, if you don't have APC installed on your system, all these dictionaries are loaded on each page request. To remove the non-needed dictionaries, the easiest way is to remove the files (they are called XX.dictionary.YYYY.php, where XX is the language code) from the datamodels directory and to run the setup again.
Another way to remove the dictionaries is to edit the iTop configuration file and to comment out (or remove) the lines corresponding to the dictionaries. Be aware however that the list of included dictionaries will be recomputed the next time you run the setup.
For example, keeping just the English, French and Italian translations:
'dictionaries' => array ( //'dictionaries/ru.dictionary.itop.ui.php', 'dictionaries/fr.dictionary.itop.core.php', 'dictionaries/it.dictionary.itop.core.php', // 'dictionaries/zh.dictionary.itop.core.php', // 'dictionaries/zh.dictionary.itop.ui.php', // 'dictionaries/es_cr.dictionary.itop.core.php', // 'dictionaries/ja.dictionary.itop.ui.php', // 'dictionaries/es_cr.dictionary.itop.ui.php', // 'dictionaries/hu.dictionary.itop.ui.php', // 'dictionaries/ru.dictionary.itop.core.php', // 'dictionaries/ja.dictionary.itop.core.php', 'dictionaries/dictionary.itop.core.php', 'dictionaries/dictionary.itop.ui.php', // 'dictionaries/tr.dictionary.itop.ui.php', // 'dictionaries/de.dictionary.itop.ui.php', // 'dictionaries/de.dictionary.itop.core.php', // 'dictionaries/pt_br.dictionary.itop.core.php', // 'dictionaries/pt_br.dictionary.itop.ui.php', // 'dictionaries/tr.dictionary.itop.core.php', 'dictionaries/fr.dictionary.itop.ui.php', 'dictionaries/it.dictionary.itop.ui.php', 'dictionaries/hu.dictionary.itop.core.php', 'env-production/authent-ldap/fr.dict.authent-ldap.php', 'env-production/authent-ldap/it.dict.authent-ldap.php', 'env-production/authent-ldap/en.dict.authent-ldap.php', // 'env-production/authent-ldap/pt_br.dict.authent-ldap.php', // 'env-production/authent-ldap/de.dict.authent-ldap.php', // 'env-production/authent-ldap/es_cr.dict.authent-ldap.php', ...
Check MySQL's Key cache
Make sure that MySQL has enough memory for caching all
its indexes in memory. The important status variables are:
key_read_requests
and key_reads
.
The actual ratio of key_reads / key_read_requests
should be as low as possible (typically less than 0.1 %). If this
ratio is too high, this means that you should increase the amount
of memory allocated to cache MySQL's indexes (adjust the variable
key_buffer_size
in my.cnf
and restart the
MySQL server).