##// END OF EJS Templates
docs: tweak formatting of the performance page - replace the odd numbered list with sections
Mads Kiilerich -
r6337:d02c715e default
parent child Browse files
Show More
@@ -4,53 +4,64 b''
4 Optimizing Kallithea performance
4 Optimizing Kallithea performance
5 ================================
5 ================================
6
6
7 When serving a large amount of big repositories, Kallithea can start
7 When serving a large amount of big repositories, Kallithea can start performing
8 performing slower than expected. Because of the demanding nature of handling large
8 slower than expected. Because of the demanding nature of handling large amounts
9 amounts of data from version control systems, here are some tips on how to get
9 of data from version control systems, here are some tips on how to get the best
10 the best performance.
10 performance.
11
11
12
12 Follow these few steps to improve performance of Kallithea system.
13 Fast storage
14 ------------
13
15
14 1. Kallithea is often I/O bound, and hence a fast disk (SSD/SAN) is
16 Kallithea is often I/O bound, and hence a fast disk (SSD/SAN) and plenty of RAM
15 usually more important than a fast CPU.
17 is usually more important than a fast CPU.
18
16
19
17 2. Increase cache
20 Caching
21 -------
18
22
19 Tweak beaker cache settings in the ini file. The actual effect of that
23 Tweak beaker cache settings in the ini file. The actual effect of that is
20 is questionable.
24 questionable.
25
21
26
22 3. Switch from SQLite to PostgreSQL or MySQL
27 Database
28 --------
23
29
24 SQLite is a good option when having a small load on the system. But due to
30 SQLite is a good option when having a small load on the system. But due to
25 locking issues with SQLite, it is not recommended to use it for larger
31 locking issues with SQLite, it is not recommended to use it for larger
26 deployments. Switching to MySQL or PostgreSQL will result in an immediate
32 deployments.
27 performance increase. A tool like SQLAlchemyGrate_ can be used for
28 migrating to another database platform.
29
33
30 4. Scale Kallithea horizontally
34 Switching to MySQL or PostgreSQL will result in an immediate performance
35 increase. A tool like SQLAlchemyGrate_ can be used for migrating to another
36 database platform.
37
31
38
32 Scaling horizontally can give huge performance benefits when dealing with
39 Horizontal scaling
33 large amounts of traffic (many users, CI servers, etc.). Kallithea can be
40 ------------------
34 scaled horizontally on one (recommended) or multiple machines.
35
41
36 It is generally possible to run WSGI applications multithreaded, so that
42 Scaling horizontally means running several Kallithea instances and let them
37 several HTTP requests are served from the same Python process at once. That
43 share the load. That can give huge performance benefits when dealing with large
38 can in principle give better utilization of internal caches and less
44 amounts of traffic (many users, CI servers, etc.). Kallithea can be scaled
39 process overhead.
45 horizontally on one (recommended) or multiple machines.
40
46
41 One danger of running multithreaded is that program execution becomes much
47 It is generally possible to run WSGI applications multithreaded, so that
42 more complex; programs must be written to consider all combinations of
48 several HTTP requests are served from the same Python process at once. That can
43 events and problems might depend on timing and be impossible to reproduce.
49 in principle give better utilization of internal caches and less process
50 overhead.
51
52 One danger of running multithreaded is that program execution becomes much more
53 complex; programs must be written to consider all combinations of events and
54 problems might depend on timing and be impossible to reproduce.
44
55
45 Kallithea can't promise to be thread-safe, just like the embedded Mercurial
56 Kallithea can't promise to be thread-safe, just like the embedded Mercurial
46 backend doesn't make any strong promises when used as Kallithea uses it.
57 backend doesn't make any strong promises when used as Kallithea uses it.
47 Instead, we recommend scaling by using multiple server processes.
58 Instead, we recommend scaling by using multiple server processes.
48
59
49 Web servers with multiple worker processes (such as ``mod_wsgi`` with the
60 Web servers with multiple worker processes (such as ``mod_wsgi`` with the
50 ``WSGIDaemonProcess`` ``processes`` parameter) will work out of the box.
61 ``WSGIDaemonProcess`` ``processes`` parameter) will work out of the box.
51
62
52 In order to scale horizontally on multiple machines, you need to do the
63 In order to scale horizontally on multiple machines, you need to do the
53 following:
64 following:
54
65
55 - Each instance's ``data`` storage needs to be configured to be stored on a
66 - Each instance's ``data`` storage needs to be configured to be stored on a
56 shared disk storage, preferably together with repositories. This ``data``
67 shared disk storage, preferably together with repositories. This ``data``
@@ -65,7 +76,9 b' 4. Scale Kallithea horizontally'
65 that will separate regular user traffic from automated processes like CI
76 that will separate regular user traffic from automated processes like CI
66 servers or build bots.
77 servers or build bots.
67
78
68 5. Serve static files directly from the web server
79
80 Serve static files directly from the web server
81 -----------------------------------------------
69
82
70 With the default ``static_files`` ini setting, the Kallithea WSGI application
83 With the default ``static_files`` ini setting, the Kallithea WSGI application
71 will take care of serving the static files found in ``kallithea/public`` from
84 will take care of serving the static files found in ``kallithea/public`` from
General Comments 0
You need to be logged in to leave comments. Login now