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