##// 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 4 Optimizing Kallithea performance
5 5 ================================
6 6
7 When serving a large amount of big repositories, Kallithea can start
8 performing slower than expected. Because of the demanding nature of handling large
9 amounts of data from version control systems, here are some tips on how to get
10 the best performance.
7 When serving a large amount of big repositories, Kallithea can start performing
8 slower than expected. Because of the demanding nature of handling large amounts
9 of data from version control systems, here are some tips on how to get the best
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
15 usually more important than a fast CPU.
16 Kallithea is often I/O bound, and hence a fast disk (SSD/SAN) and plenty of RAM
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
20 is questionable.
23 Tweak beaker cache settings in the ini file. The actual effect of that is
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
25 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
27 performance increase. A tool like SQLAlchemyGrate_ can be used for
28 migrating to another database platform.
30 SQLite is a good option when having a small load on the system. But due to
31 locking issues with SQLite, it is not recommended to use it for larger
32 deployments.
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
33 large amounts of traffic (many users, CI servers, etc.). Kallithea can be
34 scaled horizontally on one (recommended) or multiple machines.
39 Horizontal scaling
40 ------------------
35 41
36 It is generally possible to run WSGI applications multithreaded, so that
37 several HTTP requests are served from the same Python process at once. That
38 can in principle give better utilization of internal caches and less
39 process overhead.
42 Scaling horizontally means running several Kallithea instances and let them
43 share the load. That can give huge performance benefits when dealing with large
44 amounts of traffic (many users, CI servers, etc.). Kallithea can be scaled
45 horizontally on one (recommended) or multiple machines.
40 46
41 One danger of running multithreaded is that program execution becomes much
42 more complex; programs must be written to consider all combinations of
43 events and problems might depend on timing and be impossible to reproduce.
47 It is generally possible to run WSGI applications multithreaded, so that
48 several HTTP requests are served from the same Python process at once. That can
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
46 backend doesn't make any strong promises when used as Kallithea uses it.
47 Instead, we recommend scaling by using multiple server processes.
56 Kallithea can't promise to be thread-safe, just like the embedded Mercurial
57 backend doesn't make any strong promises when used as Kallithea uses it.
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
50 ``WSGIDaemonProcess`` ``processes`` parameter) will work out of the box.
60 Web servers with multiple worker processes (such as ``mod_wsgi`` with the
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
53 following:
63 In order to scale horizontally on multiple machines, you need to do the
64 following:
54 65
55 66 - Each instance's ``data`` storage needs to be configured to be stored on a
56 67 shared disk storage, preferably together with repositories. This ``data``
@@ -65,7 +76,9 b' 4. Scale Kallithea horizontally'
65 76 that will separate regular user traffic from automated processes like CI
66 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 83 With the default ``static_files`` ini setting, the Kallithea WSGI application
71 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