performance.rst
66 lines
| 3.0 KiB
| text/x-rst
|
RstLexer
r2517 | .. _performance: | |||
================================ | ||||
Bradley M. Kuhn
|
r4192 | Optimizing Kallithea Performance | ||
r2517 | ================================ | |||
Michael V. DePalatis
|
r4955 | When serving a large amount of big repositories, Kallithea can start | ||
performing slower than expected. Because of the demanding nature of handling large | ||||
amounts of data from version control systems, here are some tips on how to get | ||||
r2775 | the best performance. | |||
Bradley M. Kuhn
|
r4192 | * Kallithea will perform better on machines with faster disks (SSD/SAN). It's | ||
Michael V. DePalatis
|
r4955 | more important to have a faster disk than a faster CPU. | ||
r2775 | ||||
* Slowness on initial page can be easily fixed by grouping repositories, and/or | ||||
Michael V. DePalatis
|
r4955 | increasing cache size (see below). This includes using the lightweight dashboard | ||
option and ``vcs_full_cache`` setting in .ini file | ||||
r2775 | ||||
r2517 | ||||
Bradley M. Kuhn
|
r4192 | Follow these few steps to improve performance of Kallithea system. | ||
r2517 | ||||
r2680 | 1. Increase cache | |||
r2517 | ||||
Michael V. DePalatis
|
r4955 | In the .ini file:: | ||
r3224 | ||||
r2680 | beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number | |||
r2517 | ||||
Michael V. DePalatis
|
r4955 | This option affects the cache expiration time for the main | ||
page. Having several hundreds of repositories on main page can | ||||
sometimes make the system behave slowly when the cache expires for | ||||
all of them. Increasing the ``expire`` option to a day (86400) or a | ||||
week (604800) will improve general response times for the main | ||||
page. Kallithea has an intelligent cache expiration system and it | ||||
will expire the cache for repositories that have been changed. | ||||
r2517 | ||||
2. Switch from sqlite to postgres or mysql | ||||
r3224 | ||||
Michael V. DePalatis
|
r4955 | sqlite is a good option when having a small load on the system. But due to | ||
locking issues with sqlite, it is not recommended to use it for larger | ||||
deployments. Switching to mysql or postgres will result in an immediate | ||||
Anatoly Bubenkov
|
r5060 | performance increase. A tool like SQLAlchemyGrate_ can be used for | ||
migrating to another database platform. | ||||
r3224 | ||||
Bradley M. Kuhn
|
r4192 | 3. Scale Kallithea horizontally | ||
r2517 | ||||
Michael V. DePalatis
|
r4955 | Scaling horizontally can give huge performance increases when dealing with | ||
Bradley M. Kuhn
|
r4192 | large traffic (large amount of users, CI servers etc). Kallithea can be | ||
r3390 | scaled horizontally on one (recommended) or multiple machines. In order | |||
to scale horizontally you need to do the following: | ||||
r3413 | ||||
Michael V. DePalatis
|
r4955 | - Each instance needs its own .ini file and unique ``instance_id`` set. | ||
- Each instance's ``data`` storage needs to be configured to be stored on a | ||||
shared disk storage, preferably together with repositories. This ``data`` | ||||
dir contains template caches, sessions, whoosh index and is used for | ||||
task locking (so it is safe across multiple instances). Set the | ||||
``cache_dir``, ``index_dir``, ``beaker.cache.data_dir``, ``beaker.cache.lock_dir`` | ||||
variables in each .ini file to a shared location across Kallithea instances | ||||
- If celery is used each instance should run a separate Celery instance, but | ||||
the message broker should be common to all of them (e.g., one | ||||
shared RabbitMQ server) | ||||
- Load balance using round robin or IP hash, recommended is writing LB rules | ||||
r3390 | that will separate regular user traffic from automated processes like CI | |||
servers or build bots. | ||||
Anatoly Bubenkov
|
r5060 | |||
.. _SQLAlchemyGrate: https://github.com/shazow/sqlalchemygrate | ||||