performance.rst
62 lines
| 2.8 KiB
| text/x-rst
|
RstLexer
r2517 | .. _performance: | |||
================================ | ||||
Bradley M. Kuhn
|
r4192 | Optimizing Kallithea Performance | ||
r2517 | ================================ | |||
Bradley M. Kuhn
|
r4192 | When serving large amount of big repositories Kallithea can start | ||
r2775 | performing slower than expected. Because of demanding nature of handling large | |||
amount of data from version control systems here are some tips how to get | ||||
the best performance. | ||||
Bradley M. Kuhn
|
r4192 | * Kallithea will perform better on machines with faster disks (SSD/SAN). It's | ||
r2775 | more important to have faster disk than faster CPU. | |||
* Slowness on initial page can be easily fixed by grouping repositories, and/or | ||||
r3390 | increasing cache size (see below), that includes using 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 | ||||
r2680 | in the .ini file:: | |||
r3224 | ||||
r2680 | beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number | |||
r2517 | ||||
This option affects the cache expiration time for main page. Having | ||||
few hundreds of repositories on main page can sometimes make the system | ||||
to behave slow when cache expires for all of them. Increasing `expire` | ||||
option to day (86400) or a week (604800) will improve general response | ||||
Bradley M. Kuhn
|
r4192 | times for the main page. Kallithea has an intelligent cache expiration | ||
r2775 | system and it will expire cache for repositories that had been changed. | |||
r2517 | ||||
2. Switch from sqlite to postgres or mysql | ||||
r3224 | ||||
r2517 | sqlite is a good option when having small load on the system. But due to | |||
locking issues with sqlite, it's not recommended to use it for larger | ||||
setup. Switching to mysql or postgres will result in a immediate | ||||
performance increase. | ||||
r3224 | ||||
Bradley M. Kuhn
|
r4192 | 3. Scale Kallithea horizontally | ||
r2517 | ||||
r3390 | Scaling horizontally can give huge performance increase 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 | ||||
r3390 | - each instance needs it's own .ini file and unique `instance_id` set in them | |||
r3413 | - each instance `data` storage needs to be configured to be stored on a | |||
r3390 | shared disk storage, preferably together with repositories. This `data` | |||
dir contains template caches, sessions, whoosh index and it's used for | ||||
tasks locking (so it's safe across multiple instances). Set the | ||||
`cache_dir`, `index_dir`, `beaker.cache.data_dir`, `beaker.cache.lock_dir` | ||||
Bradley M. Kuhn
|
r4192 | variables in each .ini file to shared location across Kallithea instances | ||
r3390 | - if celery is used each instance should run separate celery instance, but | |||
the message broken should be common to all of them (ex one rabbitmq | ||||
r3413 | shared server) | |||
r3390 | - load balance using round robin or ip hash, recommended is writing LB rules | |||
that will separate regular user traffic from automated processes like CI | ||||
servers or build bots. | ||||