Optimizing your Funkwhale instance

Depending on your requirements, you may want to reduce as much as possible Funkwhale’s memory footprint.

Reduce workers concurrency

Asynchronous tasks are handled by a celery worker, which will by default spawn a worker process per CPU available. This can lead to a higher memory usage.

You can control this behavior using the --concurrency flag. For instance, setting --concurrency=1 will spawn only one worker.

This flag should be appended after the celery -A funkwhale_api.taskapp worker command in your docker-compose.yml file if your using Docker, or in your /etc/systemd/system/funkwhale-worker.service otherwise.

Note

Reducing concurrency comes at a cost: asynchronous tasks will be processed more slowly. However, on small instances, this should not be an issue.

Switch from prefork to solo pool

Using a different pool implementation for Celery tasks may also help.

Using the solo pool type should reduce your memory consumption. You can control this behavior using the --pool=solo flag.

This flag should be appended after the celery -A funkwhale_api.taskapp worker command in your docker-compose.yml file if you’re using Docker, or in your /etc/systemd/system/funkwhale-worker.service otherwise.