Does Gitlab actually need to utilize all those components and when I disable certain things like Prometheus and etc. it seems to only marginally make things better.
What is consumes so much RAM and why?
Does Gitlab actually need to utilize all those components and when I disable certain things like Prometheus and etc. it seems to only marginally make things better.
What is consumes so much RAM and why?
[1]: https://docs.gitlab.com/omnibus/settings/memory_constrained_...
That said, they're doing good job of documenting things required for smaller installations.
At this point, the code base is too big for them to fix the performance and they want to use their time on new features and bug fixes as that's what customers are asking more while customers may solve the performance problem by spending more money on the server.
It's just that the initial technical decisions sucked and it's no longer possible to fix it at this point.
[1]: https://develop.sentry.dev/architecture/ [2]: https://github.com/getsentry/self-hosted
Snuba is one of the services that largely really requires kafka to function though I think theoretically limited functionality is also available by directly talking HTTP to it.
- Gitea
- Woodpecker CI
- Self hosted private Docker registry
- Minio
They are easy to deploy and upgrade (the upgrade procedure is for me the most important because I want to do it easily or at the end you do not do it).That's just a complex rails application for you, at $DAYJOB we have to provision 11gb for just a single container running a single instance of the app
Except for image processing, which uses a ton of ram and readily OOMs.
"Why does the app keep crashing?"
"Because the share price went up again!"
Ruby has a generational GC which already supports compaction, but not in a production ready continuous way, which means most usages have it turned off, and memory pages tend to overcoming and stay fragmented for long running processes. Python has the same issue and node AFAIK.
I ended up heavily tuning the ruby GC parameters, which reduced the final resource usage of the app especially over longer continued use nearly tenfold. There is a lot to gain if you know the actual object and memory limits your app needs for it's core usage rather than letting Ruby allocate more and more memory. Caveat is that was a long time ago with Ruby ~2.3 and things have certainly changed and probably improved by now.
That service has been as stable as one could hope. It just runs in a docker container on a dedicated machine that's also used for other development purposes and consumes a couple of hundred MB of ram. The number of times it was down in the past ~6 years can be counted on one hand.
It's the developer who just doesn't know how things work under the hood and code as they like and memory usage explodes.
I no longer self-host or use GitLab for this precise reason.