Show More
@@ -1,54 +1,54 b'' | |||
|
1 | 1 | .c { color: #999988; font-style: italic } /* Comment */ |
|
2 | 2 | .k { font-weight: bold } /* Keyword */ |
|
3 | 3 | .o { font-weight: bold } /* Operator */ |
|
4 | 4 | .cm { color: #999988; font-style: italic } /* Comment.Multiline */ |
|
5 | 5 | .cp { color: #999999; font-weight: bold } /* Comment.preproc */ |
|
6 | 6 | .c1 { color: #999988; font-style: italic } /* Comment.Single */ |
|
7 | 7 | .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ |
|
8 | 8 | .ge { font-style: italic } /* Generic.Emph */ |
|
9 | 9 | .gr { color: #aa0000 } /* Generic.Error */ |
|
10 | 10 | .gh { color: #999999 } /* Generic.Heading */ |
|
11 | 11 | .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ |
|
12 | 12 | .go { color: #111 } /* Generic.Output */ |
|
13 | 13 | .gp { color: #555555 } /* Generic.Prompt */ |
|
14 | 14 | .gs { font-weight: bold } /* Generic.Strong */ |
|
15 | 15 | .gu { color: #aaaaaa } /* Generic.Subheading */ |
|
16 | 16 | .gt { color: #aa0000 } /* Generic.Traceback */ |
|
17 | 17 | .kc { font-weight: bold } /* Keyword.Constant */ |
|
18 | 18 | .kd { font-weight: bold } /* Keyword.Declaration */ |
|
19 | 19 | .kp { font-weight: bold } /* Keyword.Pseudo */ |
|
20 | 20 | .kr { font-weight: bold } /* Keyword.Reserved */ |
|
21 | 21 | .kt { color: #445588; font-weight: bold } /* Keyword.Type */ |
|
22 | 22 | .m { color: #009999 } /* Literal.Number */ |
|
23 | 23 | .s { color: #bb8844 } /* Literal.String */ |
|
24 | 24 | .na { color: #008080 } /* Name.Attribute */ |
|
25 | 25 | .nb { color: #999999 } /* Name.Builtin */ |
|
26 | 26 | .nc { color: #445588; font-weight: bold } /* Name.Class */ |
|
27 | 27 | .no { color: #ff99ff } /* Name.Constant */ |
|
28 | 28 | .ni { color: #800080 } /* Name.Entity */ |
|
29 | 29 | .ne { color: #990000; font-weight: bold } /* Name.Exception */ |
|
30 | 30 | .nf { color: #990000; font-weight: bold } /* Name.Function */ |
|
31 | 31 | .nn { color: #555555 } /* Name.Namespace */ |
|
32 | 32 | .nt { color: #000080 } /* Name.Tag */ |
|
33 | 33 | .nv { color: purple } /* Name.Variable */ |
|
34 | 34 | .ow { font-weight: bold } /* Operator.Word */ |
|
35 | 35 | .mf { color: #009999 } /* Literal.Number.Float */ |
|
36 | 36 | .mh { color: #009999 } /* Literal.Number.Hex */ |
|
37 | 37 | .mi { color: #009999 } /* Literal.Number.Integer */ |
|
38 | 38 | .mo { color: #009999 } /* Literal.Number.Oct */ |
|
39 | 39 | .sb { color: #bb8844 } /* Literal.String.Backtick */ |
|
40 | 40 | .sc { color: #bb8844 } /* Literal.String.Char */ |
|
41 | 41 | .sd { color: #bb8844 } /* Literal.String.Doc */ |
|
42 | 42 | .s2 { color: #bb8844 } /* Literal.String.Double */ |
|
43 | 43 | .se { color: #bb8844 } /* Literal.String.Escape */ |
|
44 | 44 | .sh { color: #bb8844 } /* Literal.String.Heredoc */ |
|
45 | 45 | .si { color: #bb8844 } /* Literal.String.Interpol */ |
|
46 | 46 | .sx { color: #bb8844 } /* Literal.String.Other */ |
|
47 | 47 | .sr { color: #808000 } /* Literal.String.Regex */ |
|
48 | 48 | .s1 { color: #bb8844 } /* Literal.String.Single */ |
|
49 | 49 | .ss { color: #bb8844 } /* Literal.String.Symbol */ |
|
50 | 50 | .bp { color: #999999 } /* Name.Builtin.Pseudo */ |
|
51 | 51 | .vc { color: #ff99ff } /* Name.Variable.Class */ |
|
52 | 52 | .vg { color: #ff99ff } /* Name.Variable.Global */ |
|
53 | 53 | .vi { color: #ff99ff } /* Name.Variable.Instance */ |
|
54 | .il { color: #009999 } /* Literal.Number.Integer.Long */ No newline at end of file | |
|
54 | .il { color: #009999 } /* Literal.Number.Integer.Long */ |
@@ -1,64 +1,62 b'' | |||
|
1 | 1 | .. _performance: |
|
2 | 2 | |
|
3 | 3 | ================================ |
|
4 | 4 | Optimizing RhodeCode Performance |
|
5 | 5 | ================================ |
|
6 | 6 | |
|
7 | 7 | When serving large amount of big repositories RhodeCode can start |
|
8 | 8 | performing slower than expected. Because of demanding nature of handling large |
|
9 | 9 | amount of data from version control systems here are some tips how to get |
|
10 | 10 | the best performance. |
|
11 | 11 | |
|
12 | 12 | * RhodeCode will perform better on machines with faster disks (SSD/SAN). It's |
|
13 | 13 | more important to have faster disk than faster CPU. |
|
14 | 14 | |
|
15 | 15 | * Slowness on initial page can be easily fixed by grouping repositories, and/or |
|
16 | 16 | increasing cache size (see below), that includes using lightweight dashboard |
|
17 | 17 | option and vcs_full_cache setting in .ini file |
|
18 | 18 | |
|
19 | 19 | |
|
20 | 20 | Follow these few steps to improve performance of RhodeCode system. |
|
21 | 21 | |
|
22 | 22 | |
|
23 | 23 | 1. Increase cache |
|
24 | 24 | |
|
25 | 25 | in the .ini file:: |
|
26 | 26 | |
|
27 | 27 | beaker.cache.sql_cache_long.expire=3600 <-- set this to higher number |
|
28 | 28 | |
|
29 | 29 | This option affects the cache expiration time for main page. Having |
|
30 | 30 | few hundreds of repositories on main page can sometimes make the system |
|
31 | 31 | to behave slow when cache expires for all of them. Increasing `expire` |
|
32 | 32 | option to day (86400) or a week (604800) will improve general response |
|
33 | 33 | times for the main page. RhodeCode has an intelligent cache expiration |
|
34 | 34 | system and it will expire cache for repositories that had been changed. |
|
35 | 35 | |
|
36 | 36 | 2. Switch from sqlite to postgres or mysql |
|
37 | 37 | |
|
38 | 38 | sqlite is a good option when having small load on the system. But due to |
|
39 | 39 | locking issues with sqlite, it's not recommended to use it for larger |
|
40 | 40 | setup. Switching to mysql or postgres will result in a immediate |
|
41 | 41 | performance increase. |
|
42 | 42 | |
|
43 | 43 | 3. Scale RhodeCode horizontally |
|
44 | 44 | |
|
45 | 45 | Scaling horizontally can give huge performance increase when dealing with |
|
46 | 46 | large traffic (large amount of users, CI servers etc). RhodeCode can be |
|
47 | 47 | scaled horizontally on one (recommended) or multiple machines. In order |
|
48 | 48 | to scale horizontally you need to do the following: |
|
49 | 49 | |
|
50 | 50 | - each instance needs it's own .ini file and unique `instance_id` set in them |
|
51 | 51 |
- each instance `data` storage needs to be configured to be stored on a |
|
52 | 52 | shared disk storage, preferably together with repositories. This `data` |
|
53 | 53 | dir contains template caches, sessions, whoosh index and it's used for |
|
54 | 54 | tasks locking (so it's safe across multiple instances). Set the |
|
55 | 55 | `cache_dir`, `index_dir`, `beaker.cache.data_dir`, `beaker.cache.lock_dir` |
|
56 | 56 |
variables in each .ini file to shared location across RhodeCode instances |
|
57 | 57 | - if celery is used each instance should run separate celery instance, but |
|
58 | 58 | the message broken should be common to all of them (ex one rabbitmq |
|
59 | 59 |
shared server) |
|
60 | 60 | - load balance using round robin or ip hash, recommended is writing LB rules |
|
61 | 61 | that will separate regular user traffic from automated processes like CI |
|
62 | 62 | servers or build bots. |
|
63 | ||
|
64 |
@@ -1,20 +1,20 b'' | |||
|
1 | 1 | waitress==0.8.1 |
|
2 | 2 | webob==1.0.8 |
|
3 | 3 | Pylons==1.0.0 |
|
4 | 4 | Beaker==1.6.4 |
|
5 | 5 | WebHelpers==1.3 |
|
6 | 6 | formencode==1.2.4 |
|
7 | 7 | SQLAlchemy==0.7.8 |
|
8 | 8 | Mako==0.7.2 |
|
9 | 9 | pygments>=1.5 |
|
10 | 10 | whoosh>=2.4.0,<2.5 |
|
11 | 11 | celery>=2.2.5,<2.3 |
|
12 | 12 | babel |
|
13 | 13 | python-dateutil>=1.5.0,<2.0.0 |
|
14 | 14 | dulwich>=0.8.5,<0.9.0 |
|
15 | 15 | markdown==2.1.1 |
|
16 | 16 | docutils==0.8.1 |
|
17 | 17 | simplejson==2.5.2 |
|
18 | 18 | mock |
|
19 | 19 | py-bcrypt |
|
20 | mercurial==2.3.0 No newline at end of file | |
|
20 | mercurial==2.3.0 |
General Comments 0
You need to be logged in to leave comments.
Login now