Lemmy Release v0.19.20 - Reduced Memory Usage News & Update Threadiverse (join-lemmy.org)
submitted 3 months ago by to c/fediverse@piefed.social
 

What is Lemmy?

Lemmy is a self-hosted social link aggregation and discussion platform. It is completely free and open, and not controlled by any company. This means that there is no advertising, tracking, or secret algorithms. Content is organized into communities, so it is easy to subscribe to topics that you are interested in, and ignore others. Voting is used to bring the most interesting items to the top.

Changes

This release significantly reduces memory usage for the Lemmy backend. Metrics on production instances show a reduction up to 10 times. Here you can see the statistics from a few different instances. Read on for a technical explanation below. Note that the change only affects x86, there is no difference on ARM (e.g. Raspberry Pi), see here for details.

lemmy.ml (overall RAM usage including OS, Docker, PostgreSQL etc):

leminal.space (backend container only)

lemmy.world (backend API containers)

lemmy.world (backend federation and scheduled tasks)

How was such a major improvement possible? Memory usage in languages like Rust or C is managed by a so-called memory allocator. It requests large chunks of RAM from the operating system, and provides smaller chunks when needed in the program. For example, every string (such as post titles or markdown text) require chunks of memory to store them. When processing the data is completed, the memory should be freed and released, or reused.

Until version 0.19.19 Lemmy used the mimalloc memory allocator, which is supposedly better than the default glibc allocator. Yet a recent blog post points out that mimalloc does not play well with the tokio async runtime. It suggests to use jemalloc instead. Changing memory allocators is very simple in Rust, it only requires a single line of code. So we tried that, deployed the change on lemmy.ml and it immediately proved effective.

Upgrade instructions

There are no breaking changes with this release.

Follow the upgrade instructions for ansible or docker.

If you need help with the upgrade, you can ask in our support forum or on the Matrix Chat.

Thanks to everyone

We'd like to thank our many contributors and users of Lemmy for coding, translating, testing, and helping find and fix bugs. We're glad many people find it useful and enjoyable enough to contribute.

Support development

We (@dessalines and @nutomic) have been working full-time on Lemmy for over five years. This is largely thanks to support from NLnet foundation, as well as donations from individual users.

If you like using Lemmy, and want to make sure that we will always be available to work full time building it, consider donating to support its development. A recurring donation is the best way to ensure that open-source software like Lemmy can stay independent and alive, and helps us grow our little developer co-op to support more full-time developers.

other discussions
 

Cross-posted from "Lemmy Release v0.19.20 - Reduced Memory Usage" by @dessalines@lemmy.ml in !announcements@lemmy.ml


I'm planning to upgrade to this version ASAP as we've been having some RAM issues in the DB recently which is causing the "daily hiccups". I can't promise this will fix it, but I can hope. Expect some short downtime in the near future.

EDIT: Done

 

Mudanças

Esta versão reduz significativamente o uso de memória para o backend do Lemmy. Métricas em instâncias de produção mostram uma redução de até 10 vezes. Aqui você pode ver as estatísticas de algumas instâncias diferentes. Leia mais para uma explicação técnica abaixo. Observe que a alteração afeta apenas x86, não há diferença no ARM (ex. Raspberry Pi), veja aqui para detalhes.

lemmy.ml (uso geral da memória RAM, incluindo sistema operacional, Docker, PostgreSQL etc):

leminal.space (apenas recipiente de backend)

lemmy.world (recipientes de API de backend)

lemmy.world (federação de backend e tarefas agendadas)

Como foi possível uma melhoria tão grande? O uso de memória em idiomas como Rust ou C é gerenciado por um chamado alocador de memória. Ele solicita grandes pedaços de RAM do sistema operacional e fornece pedaços menores quando necessário no programa. Por exemplo, cada string (como títulos de postagem ou texto de marcação) requer pedaços de memória para armazená-los. Ao processar os dados são concluídos, a memória deve ser liberada e liberada ou reutilizada.

Até a versão 0.19.19 Lemmy usou o mimalloc alocador de memória, que é supostamente melhor do que o padrão glibc alocador. No entanto, uma postagem recente no blog aponta que mimalloc não joga bem com o tokio tempo de execução do async. sugere usar jemalloc em vez disso. Alterar alocadores de memória é muito simples em Rust, requer apenas uma única linha de código. Então, tentamos isso, implantamos a mudança no lemmy.ml e imediatamente se mostrou eficaz.

Instruções de atualização

Não há mudanças de ruptura com esta versão.

Siga as instruções de atualização para ansible ou docker.

Se você precisar de ajuda com a atualização, você pode perguntar em nosso fórum de suporte ou no Matrix Chat.

Obrigado a todos

Gostaríamos de agradecer aos nossos muitos colaboradores e usuários do Lemmy por codificar, traduzir, testar e ajudar a encontrar e corrigir bugs. Estamos felizes que muitas pessoas acham útil e agradável o suficiente para contribuir.

Apoio desenvolvimento

Nós (@dessalines e @nutomic) trabalhamos em tempo integral no Lemmy há mais de cinco anos. Isso é em grande parte graças ao apoio da NLnet Foundation, bem como doações de usuários individuais.

Se você gosta de usar o Lemmy, e quer ter certeza de que estaremos sempre disponíveis para trabalhar em tempo integral construindo-o, considere doar para apoiar seu desenvolvimento. Uma doação recorrente é a melhor maneira de garantir que softwares de código aberto como o Lemmy possam permanecer independentes e vivos, e nos ajude a aumentar nossa pequena cooperativa de desenvolvedores para oferecer suporte a mais desenvolvedores em tempo integral.