# Optimize memory usage Funkwhale has a reasonable memory footprint. If you're running Funkwhale on a limited device, you can use these tweaks to reduce the footprint. ## Reduce workers concurrency Funkwhale uses Celery to handle asynchronous tasks. By default, Celery spawns a worker per CPU core. This can lead to higher memory usage. You can set the number of workers using the `CELERYD_CONCURRENCY` variable in your `.env` file. For example, a value of `CELERYD_CONCURRENCY=1` spawns a single worker. ```{note} Reducing the number of celery workers slows down the handling of asynchronous tasks. On larger instances, this can cause performance problems. ``` ## Switch to solo pool execution Celery uses a `prefork` pool by default. This enables the server to process many tasks at the same time. You can switch to a `solo` pool which handles tasks one at a time. This reduces memory overhead but removes the ability to process tasks concurrently. ::::{tab-set} :::{tab-item} Debian :sync: debian 1. Open your `funkwhale-worker` unit file in an editor. ```{code-block} sh sudo nano /etc/systemd/system/funkwhale-worker.service ``` 2. Add the `--pool=solo` flag to the `ExecStart` line of your unit file. ```{code-block} text ExecStart=/srv/funkwhale/venv/bin/celery \ --app funkwhale_api.taskapp \ --pool solo \ worker \ --loglevel INFO \ --concurrency=${CELERYD_CONCURRENCY} ``` 3. Restart the Celery service. ```{code-block} sh sudo systemctl restart funkwhale-worker.service ``` ::: :::{tab-item} Docker :sync: docker 1. Add the `--pool=solo` flag to the `celerybeat` command in `docker-compose.yml`. ```{code-block} yaml celerybeat: … command: celery -A --pool=solo funkwhale_api.taskapp beat --pidfile= -l INFO ``` 2. Restart Celery. ```{code-block} sh docker-compose restart celerybeat ``` ::: ::::