Engineering Manager: https://boards.greenhouse.io/gitlab/jobs/4201458002
Senior Product Manager: https://boards.greenhouse.io/gitlab/jobs/4192657002
I used to use gitlab at work daily and releases would mention how performance is being tackled consistently. However, I have not seen any large improvements at all, suggesting that there is an impenetrable wall made of the underlying technologies.
Gitlab is based primarily on Ruby-on-Rails, which doesn't particularly shine with neither memory usage nor performance. What sort of effort would even reduce the use of resources significantly, short of a rewrite?
As to memory usage, I will concede it is often somewhat high with rails, but there are solutions, such as jemalloc that have helped me in the past.
I will say I've never had a problem with performance on self hosted Gitlab because of the smaller scale.
* 11.8: https://gitlab.com/groups/gitlab-org/-/merge_requests?scope=...
* 11.7: https://gitlab.com/groups/gitlab-org/-/merge_requests?scope=...
* 11.6: https://gitlab.com/groups/gitlab-org/-/merge_requests?scope=...
With regard to memory usage, we've made some progress there as well. For example:
1. We cut 80-100 MB/per Unicorn process by removing a dependency: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/21008
2. A change in our merge request processing in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22725 lowered gigabytes of runtime memory from our worst and most commonly-used Sidekiq background job.
3. In the second-worst performing Sidekiq job, switching to a faster XML processor in https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/23136 also dropped large spikes of runtime memory.
That being said, we still have a long way to go. I recently did an analysis to figure out, "Why does each Unicorn process take 400-500 MB RAM?" The note in https://gitlab.com/gitlab-org/omnibus-gitlab/issues/4118#not... explains why. In short, there is truth that we're paying a price for Ruby overhead.
What can we do about it? I have several ideas:
1. Upgrade to Ruby 2.6 (significant memory improvements for free; see https://youtu.be/ZfgxvNUfQdU)
2. Replace many Unicorn processes with a multi-threaded Puma server
3. Continue profiling and optimizing inefficient code paths
4. Make the Ruby interpreter more efficient (e.g. with a compacting garbage collector, see https://gitlab.com/gitlab-org/gitlab-ce/issues/54555)
5. Make Rails more efficient (e.g. https://github.com/rails/rails/pull/34711).
Lastly, there may be significant parts of the code base that will need to be rewritten to improve memory and/or performance. Gitaly is a prime example of this: many Git-related calls have been abstracted into a Go process.
I originally started using gitlab because it provided a VCS with a really nice built-in CI system. Really, I wanted github + travis-ci, but selfhosted.
My experience with gitlab has been and still is really great, but I'm losing my grasp on what's going on on my own server. Every time I install a patch, I discover my gitlab instance has grown kuberentes support or serverless features or whatever auto-devops is.
I don't want, use or need all that, I'm the only person who logs into my gitlab instance. I'm pretty sure I've got it all turned off, but only pretty sure. If gitlab grows any more features I'll be moving away simply to ensure confidence that I understand my own infrastructure in the limited time I have to maintain it.
It's the weirdest kind of success problem to have, but the truth is if it wasn't such a pain to make the move, I'd have transitioned away from gitlab 6 months ago.
I created an issue to document your feedback, and I'll follow up with the product team to share your concerns. I really, really appreciate your candor, and I hope your comment sparks serious conversation and helps guide the new Memory team.
I'll also completely understand if the decision is that I'm too much in the minority to support on this front. There are always trade-offs to be made as a product grows, the important thing is that those tradeoffs been actively considered rather than randomly selected. As long as you guys have thought about the cost of expanding features so fast and have decided how you want to handle the situation, I'll be happy.
Personally I switched over to Gitea.
One of the more tangible differences between the two is that Gitea bundles all the web assets into the executable used to run the service, so you just have a single exe replace on upgrades. It's been a while since I've used Gogs, but looking at their latest info you still need to remove some folders and not others when updating Gogs, because some of them are template and static files used by the web server.
I suspect those downvoting you didn't take time to read your comment properly either.
Replying that, to someone who literally said they switched from GitLab to Gogs for self-hosted repositories, also made me parse it as implying one word: > Yes, but Gogs is self-hosted, whereas GitLab offers [only] hosting solutions.
but the author probably meant something like: > Yes, but Gogs is [exclusively] self-hosted, whereas GitLab [also] offers hosting solutions [so switching is not always an option].