124 lines
4.1 KiB
ReStructuredText
124 lines
4.1 KiB
ReStructuredText
.. _increase-gunicorn:
|
|
|
|
Increase Gunicorn Workers
|
|
-------------------------
|
|
|
|
|
|
|RCE| comes with `Gunicorn`_ packaged in its Nix environment.
|
|
Gunicorn is a Python WSGI HTTP Server for UNIX.
|
|
|
|
To improve |RCE| performance you can increase the number of `Gunicorn`_ workers.
|
|
This allows to handle more connections concurently, and provide better
|
|
responsiveness and performance.
|
|
|
|
By default during installation |RCC| tries to detect how many CPUs are
|
|
available in the system, and set the number workers based on that information.
|
|
However sometimes it's better to manually set the number of workers.
|
|
|
|
To do this, use the following steps:
|
|
|
|
1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
|
|
2. In the ``[server:main]`` section, increase the number of Gunicorn
|
|
``workers`` using the following formula :math:`(2 * Cores) + 1`.
|
|
|
|
.. code-block:: ini
|
|
|
|
use = egg:gunicorn#main
|
|
## Sets the number of process workers. You must set `instance_id = *`
|
|
## when this option is set to more than one worker, recommended
|
|
## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
|
|
## The `instance_id = *` must be set in the [app:main] section below
|
|
workers = 4
|
|
## process name
|
|
proc_name = rhodecode
|
|
## type of worker class, one of sync, gevent
|
|
## recommended for bigger setup is using of of other than sync one
|
|
worker_class = sync
|
|
## The maximum number of simultaneous clients. Valid only for Gevent
|
|
#worker_connections = 10
|
|
## max number of requests that worker will handle before being gracefully
|
|
## restarted, could prevent memory leaks
|
|
max_requests = 1000
|
|
max_requests_jitter = 30
|
|
## amount of time a worker can spend with handling a request before it
|
|
## gets killed and restarted. Set to 6hrs
|
|
timeout = 21600
|
|
|
|
3. In the ``[app:main]`` section, set the ``instance_id`` property to ``*``.
|
|
|
|
.. code-block:: ini
|
|
|
|
# In the [app:main] section
|
|
[app:main]
|
|
# You must set `instance_id = *`
|
|
instance_id = *
|
|
|
|
4. Change the VCSServer workers too. Open the
|
|
:file:`home/{user}/.rccontrol/{instance-id}/vcsserver.ini` file.
|
|
|
|
5. In the ``[server:main]`` section, increase the number of Gunicorn
|
|
``workers`` using the following formula :math:`(2 * Cores) + 1`.
|
|
|
|
.. code-block:: ini
|
|
|
|
## run with gunicorn --log-config vcsserver.ini --paste vcsserver.ini
|
|
use = egg:gunicorn#main
|
|
## Sets the number of process workers. Recommended
|
|
## value is (2 * NUMBER_OF_CPUS + 1), eg 2CPU = 5 workers
|
|
workers = 4
|
|
## process name
|
|
proc_name = rhodecode_vcsserver
|
|
## type of worker class, currently `sync` is the only option allowed.
|
|
worker_class = sync
|
|
## The maximum number of simultaneous clients. Valid only for Gevent
|
|
#worker_connections = 10
|
|
## max number of requests that worker will handle before being gracefully
|
|
## restarted, could prevent memory leaks
|
|
max_requests = 1000
|
|
max_requests_jitter = 30
|
|
## amount of time a worker can spend with handling a request before it
|
|
## gets killed and restarted. Set to 6hrs
|
|
timeout = 21600
|
|
|
|
6. Save your changes.
|
|
7. Restart your |RCE| instances, using the following command:
|
|
|
|
.. code-block:: bash
|
|
|
|
$ rccontrol restart '*'
|
|
|
|
|
|
Gunicorn Gevent Backend
|
|
-----------------------
|
|
|
|
Gevent is an asynchronous worker type for Gunicorn. It allows accepting multiple
|
|
connections on a single `Gunicorn`_ worker. This means you can handle 100s
|
|
of concurrent clones, or API calls using just few workers. A setting called
|
|
`worker_connections` defines on how many connections each worker can
|
|
handle using `Gevent`.
|
|
|
|
|
|
To enable `Gevent` on |RCE| do the following:
|
|
|
|
|
|
1. Open the :file:`home/{user}/.rccontrol/{instance-id}/rhodecode.ini` file.
|
|
2. In the ``[server:main]`` section, change `worker_class` for Gunicorn.
|
|
|
|
|
|
.. code-block:: ini
|
|
|
|
## type of worker class, one of sync, gevent
|
|
## recommended for bigger setup is using of of other than sync one
|
|
worker_class = gevent
|
|
## The maximum number of simultaneous clients. Valid only for Gevent
|
|
worker_connections = 30
|
|
|
|
|
|
.. note::
|
|
|
|
`Gevent` is currently only supported for Enterprise/Community instances.
|
|
VCSServer doesn't yet support gevent.
|
|
|
|
|
|
|
|
.. _Gunicorn: http://gunicorn.org/
|