性能调优

为了增强iTop服务器的性能,必须首先找到瓶颈。是页面的PHP执行速度太慢,还是MySQL?

应用的性能的真实调整需要深入研究iTop实例的实际使用模式,但是要检查的通用点很少:

安装APCu

如果系统上提供了该功能,请安装并启用APCu(备用PHP缓存)。 APC通过将PHP解析的结果作为操作码缓存在共享内存中,从而提高了PHP应用程序的速度。此外,iTop使用APC在内存中缓存其许多内部结构,而不是在每次页面加载时对其进行重建。

安装APCu将使应用的整体响应成为改进,这对于“小”页面尤为重要。如果不可用,iTop将基于文件实现简单的缓存机制。

php.ini
 
  [apcu]
  apc.shm_size=128M
  apc.ttl=7200

安装FPM

对于改进性能,您可以将php-fpm与fastcgi一起使用。

FIXME通过ProxyTimeout指令在Apache + FPM上进行超时观察。 Apache utilisera la指令TimeOut(参数60秒)。 ·请求ajax renvoie bien une erreur 504(超时)。 ·法语国家的术语和术语集,请重新命名。 ·安装过程最可靠的产品,洛斯(Lorque)升级de la estlancé,il va terminer,马尔加里(Malgréle)Timeout apache。在自由职业者中,新移民要求者,财务要求者。 ·重新安装mysql挂件:mysql回退和离开表,临时代理,临时代理。警告要点:·在安装过程中,必须先终止安装程序超时。解决方案,适用于Mysql的流程的验证者,以及未参加培训的人员。 ·注意àl'espace Disque。取消对表格的排序后,在表空间中无效。 7Godéavoirraau moins的示例性表附件7go d'espace disque disponible(备份d'iToplui-même,si casecochéeàl'升级)·模式维护:请在“小”服务器上使用SQL von Prendre Tellment资源,并仅可利用血清区分。

配置Apache模块:标头和到期

激活apache的模块:

 a2enmod expires
 a2enmod headers

配置它们:

apache2.conf
 
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif  A172800
  ExpiresByType image/jpeg A172800
  ExpiresByType image/png  A172800
  ExpiresByType text/css   A172800
  ExpiresByType text/javascript A172800
  ExpiresByType application/x-javascript A172800
</IfModule>
 
<IfModule mod_headers.c>
  <FilesMatch "\.(gif|jpe?g|png|css|swf|js)$">
     set Cache-Control "max-age=2592000, public"
  </FilesMatch>
</IfModule>

升级至PHP 7

我们已经注意到,PHP7在iTop上带来了很多性能改进点。

检查MySQL的密钥缓存

确保MySQL有足够的内存来将其所有索引缓存在内存中。重要的状况变量是:key_read_requests和key_reads。

key_reads key_read_requests的实际比率应尽可能低(通常小于0.1%)。如果此比率太高,则意味着您应该增加分配的内存量以缓存MySQL的索引(在my.cnf中调整变量key_buffer_size并重新启动MySQL服务器)。

这是PhpMyAdmin中的统计信息:

https://www.itophub.io/wiki/media?media=2_7_0%3Aadmin%3Amysql-keyreads-stats.png

检查查询缓存

检查MySQL查询缓存是否已启用,并具有足够的内存来缓存最常见查询的结果。

这是在PhpMyAdmin中查询缓存状况的外观:

MySQL Key reads in PhpMyAdmin

检查查询缓存

检查MySQL查询缓存是否已启用,并具有足够的内存来缓存最常见查询的结果。

这是在PhpMyAdmin中查询缓存状况的外观:

MySQL query cache in PhpMyAdmin

删除不需要的字典文件

从iTop版本2.3.1开始,不再需要

在您的语言中使用iTop很棒,但是系统是否真的需要土耳其语,西班牙语,俄语和中文?如果答案是否定的,那么您可以释放大量的内存,这些内存将用于提高生产效率。此外,如果您的系统上未安装APC,则所有这些字典都将在每个页面请求中加载。要删除不需要的字典,最简单的方法是从datamodels目录中删除文件(它们称为XX.dictionary.YYYY.php,其中XX是语言代码),然后再次运行安装程序。

删除词典的另一种方法是编辑iTop配置文件并注释掉(或删除)与词典相对应的行。但是请注意,下次运行安装程序时,将重新计算包含词典的列表。

例如,仅保留英语,法语和意大利语翻译:

       'dictionaries' =>  (
                //'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',
                ...

原贴链接:https://www.itophub.io/wiki/page?id=2_7_0%3Aadmin%3Aperformance


Tuning iTop Performance

In order to enhance the performance of your iTop server, you must first find the bottleneck. Is it the PHP execution of the pages which is too slow, or is it MySQL?

The real tuning 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 APCu

If it is available on your system, install and enable APCu (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 APCu will improve the overall responsiveness of the application, which is especially important for “small” pages. If not available, iTop implements a simple caching mechanism based on files.

php.ini
 
  [apcu]
  apc.shm_size=128M
  apc.ttl=7200

Install FPM

To improve performance you can use php-fpm with fastcgi.

FIXME Observations du timeout avec Apache + FPM · Le Timeout vient d’apache, via la directive ProxyTimeout. Si cette valeur n’est pas renseignée, Apache utilisera la directive TimeOut (par défaut 60secs). · La requête ajax renvoie bien une erreur 504 (Timeout). · Les séquences ajax suivantes ne sont pas lancées, il faut deviner quand c'est terminé et re-lancer l'install. · Le processus d’installation est robuste, lorsque l’upgrade de la base est lancé, il va se terminer, malgré le Timeout apache. Si on relance un setup, il ne lancera pas de nouvelles requêtes, mais attendra la fin des requêtes en cours. · Si redémarrage de mysql pendant le setup: mysql rollback et repart sur la table d'avant, pas de lenteur, pas de pertes de données.Points de warning :· On ne sait pas quand le processus de setup va se terminer après avoir eu le timeout. Solution actuelle, aller vérifier les process en cours de Mysql, attendre la fin et relancer un setup. · Attention à l’espace disque. Un alter table nécessite d’avoir la taille de la table en espace disque disponible. Exemple une table attachement de 7Go nécessitera d’avoir au moins 7Go d’espace disque disponible (prendre aussi en compte dans l’espace disponible le backup d’iTop lui-même, si case cochée à l’upgrade) · Mode Maintenance et ReadOnly : Sur un « petit » serveur, les requêtes SQL vont prendre tellement de ressources que la visu d’iTop en ReadOnly sera difficilement exploitable.

Configure Apache Modules: Headers & Expires

Activate apache's modules:

  a2enmod expires
  a2enmod headers

Configure them:

apache2.conf
 
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/gif  A172800
  ExpiresByType image/jpeg A172800
  ExpiresByType image/png  A172800
  ExpiresByType text/css   A172800
  ExpiresByType text/javascript A172800
  ExpiresByType application/x-javascript A172800
</IfModule>
 
<IfModule mod_headers.c>
  <FilesMatch "\.(gif|jpe?g|png|css|swf|js)$">
     set Cache-Control "max-age=2592000, public"
  </FilesMatch>
</IfModule>

Upgrade to PHP 7

We have noticed that PHP7 brings a lot of performance improvement on iTop.

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).

Here is what the statistics look like in PhpMyAdmin:MySQL Key reads in PhpMyAdmin

Check the Query Cache

Check if the MySQL Query Cache is enabled, with enough memory to cache the results of the most common queries.

Here is what the Query Cache status looks like in PhpMyAdmin:

MySQL query cache in PhpMyAdmin

Remove un-needed dictionary files

编辑

No more needed since iTop version 2.3.1

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 you 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' =>  (
                //'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',
                ...
标签:
由 superadmin 在 2020/08/25, 16:37 创建
    

需要帮助?

如果您需要有关XWiki的帮助,可以联系:

深圳市艾拓先锋企业管理咨询有限公司