近期自建了Mastodon单用户实例,使用默认配置且不添加扩展功能的情况下一个实例需要2G RAM,本文主要讨论如何降低内存开销以及一些其他方面的优化。
Jemalloc
Mastodon的服务端是用Ruby开发的,其本身对内存的消耗就很大,所以首先便可以考虑对Ruby本身做一下优化; Jemalloc是一款通用的内存分配器,支持对多种语言进行内存使用的优化,其中便包含Ruby。
apt install libjemalloc-dev
su - mastodon
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 2.6.1
rbenv global 2.5.1
exit
systemctl restart mastodon-sidekiq
systemctl restart mastodon-streaming
systemctl restart mastodon-web
优化之后的效果非常显著,内存占用直接掉了一半;
搜索功能及其他
通过Jemalloc已经可以将Mastodon实例的占用降至1G以下,但如果想要再增加搜索功能,1G依然有些捉襟见肘,甚至直接打开ElasticSeach时,2G内存也会被占满;
Mastodon实例本身依然还有一些优化的空间,官方也给出了相关文档。
对于使用Java开发的ElasticSearch,很容易想到其实可以通过减少JVM分配来降低它的内存占用,相关的配置文件在/etc/elasticsearch/jvm.options;
TBC.