Gitlab: Extrem hoher Speicherverbrauch durch Ruby-Bundle-Prozess

9

Ich habe ein Problem mit meiner Gitlab-Installation, die auf einem kleinen Ubuntu LTS 16.04 ausgeführt wird. Ich muss darauf hinweisen, dass ich nicht viel Erfahrung mit Linux oder Gitlab habe.

Meine Gitlab-Installation mit einigen persönlichen Projekten (nur 4) lief in Ordnung, obwohl das Pushing extrem langsam ist und manchmal fehlschlägt. Auch der Zugriff auf die Weboberfläche ist extrem langsam. Ich habe den Server überprüft und festgestellt, dass bis zu 96% des gesamten Speichers verwendet wurden. Der Schuldige scheint ein Bündelprozess zu sein.

top - 00:15:30 up 59 days, 16:17,  1 user,  load average: 0.00, 0.01, 0.09
Tasks: 160 total,   1 running, 159 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.2 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 72.4/2048272  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||                           ]
KiB Swap:  0.0/0        [                                                                                                    ]

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 8760 git       20   0  648908 412768  14700 S   0.7 20.2   0:30.58 bundle
 8799 git       20   0  513748 302632  14300 S   0.0 14.8   0:20.02 bundle
 8833 git       20   0  513748 293028   4696 S   0.0 14.3   0:00.03 bundle
 8839 git       20   0  513748 292904   4572 S   0.0 14.3   0:00.02 bundle
 8836 git       20   0  513748 292840   4508 S   0.3 14.3   0:00.04 bundle
11792 mysql     20   0 1567168 158296      0 S   0.0  7.7   5:01.31 mysqld
32688 root      20   0 11.279g  99476   1164 S   0.0  4.9   1:21.06 dotnet
 8092 gitlab-+  20   0  576816  39616  39020 S   0.0  1.9   0:00.10 postgres
 8854 gitlab-+  20   0  595572  15004  10524 S   0.0  0.7   0:00.09 postgres
 8075 git       20   0  128348  14896   7680 S   0.0  0.7   0:00.07 gitlab-workhors
 8830 gitlab-+  20   0  592816  12196   9780 S   0.0  0.6   0:00.04 postgres
 9534 gitlab-+  20   0  592824  12060   9668 S   0.0  0.6   0:00.01 postgres
 8781 gitlab-+  20   0  592816  11932   9616 S   0.0  0.6   0:00.02 postgres
32684 root      20   0   61856  11420      0 S   0.0  0.6  23:35.39 supervisord
 8100 gitlab-+  20   0   37552  11112   2868 S   0.3  0.5   0:03.74 redis-server
 8094 gitlab-+  20   0  577068   7944   7324 S   0.0  0.4   0:00.01 postgres
 8087 gitlab-+  20   0   46756   7932   2900 S   0.0  0.4   0:00.01 nginx
 8095 gitlab-+  20   0  577068   7052   6444 S   0.0  0.3   0:00.06 postgres
 8088 gitlab-+  20   0   46412   6752   1992 S   0.0  0.3   0:00.10 nginx
  975 root      20   0   38236   6368   1908 S   0.0  0.3   8:47.56 systemd-journal
 8097 gitlab-+  20   0  578076   5600   4240 S   0.0  0.3   0:00.05 postgres
 8086 root      20   0   42240   5524   4696 S   0.0  0.3   0:00.00 nginx
  974 root      20   0   12204   4720     60 S   0.0  0.2   2:33.12 haveged
    1 root      20   0  185260   4308   2408 S   0.0  0.2   3:23.22 systemd
 7757 root      20   0   25224   4256   2484 S   0.0  0.2   0:00.28 bash
 9857 root      20   0   42468   3708   3076 R   0.0  0.2   0:00.09 top
 8098 gitlab-+  20   0   26956   3296   2608 S   0.0  0.2   0:00.08 postgres
 8089 gitlab-+  20   0   42424   3260   2224 S   0.0  0.2   0:00.01 nginx
 8784 git       20   0   18100   2980   2664 S   0.0  0.1   0:00.38 gitlab-unicorn-
 8096 gitlab-+  20   0  577068   2932   2332 S   0.0  0.1   0:00.03 postgres

Ich habe pstree getroffen und diese Bundle-Prozesse scheinen mit der Ruby-Anwendung in Zusammenhang zu stehen (muss Gitlab sein).

systemd─┬─agetty
        ├─atd
        ├─bundle─┬─3*[bundle───{ruby-timer-thr}]
        │        └─{ruby-timer-thr}
... 

Hat jemand ähnliche Erfahrungen gemacht oder eine Idee, was dies verursachen könnte?

mode777
quelle

Antworten:

3

GitLab CE möchte mindestens 4 GB RAM verwenden. Wenn Sie also 2 GB RAM haben, versucht GitLab, mithilfe von SWAP weitere 2 GB Speicher hinzuzufügen, was zu 2 GB Swap-Speicher führt. Dies macht GitLab sehr langsam, selbst wenn Sie der einzige Benutzer sind.

Die Lösung: Ihr Computer muss mindestens 4 GB RAM oder mehr haben. Verschwenden Sie keine Zeit damit, die Konfigurationsdatei des GitLab zu optimieren. Stellen Sie nur sicher, dass Sie über 4 GB RAM verfügen.

Lesen Sie den Abschnitt "Speicher" in diesem GitLab-Dokument: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/requirements.md

Viel Glück!

AndaluZ
quelle
2

Das werden die Einhornarbeiter und Sidekiq sein. Sie scheinen die richtige Speichermenge zu verwenden. 2 GB sind ungefähr das absolute Minimum an RAM, um gitlab auszuführen. Wenn Ihr System viele Aktivitäten ausführt, benötigen Sie 4 GB oder mehr.

Ich habe auch eine persönliche Gitlab-Instanz mit 2 GB RAM und sie zeigt eine ähnliche Verwendung:

top - 23:30:42 up 5 days,  7:53,  1 user,  load average: 0.04, 0.03, 0.05
Tasks: 172 total,   2 running, 170 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.2 us,  0.2 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2048816 total,    72636 free,  1762504 used,   213676 buff/cache
KiB Swap:  1048572 total,   801180 free,   247392 used.    73972 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
  664 git       20   0  715620 458296   2964 S   3.0 22.4 139:48.55 bundle      
 1623 git       20   0  543608 327472   3044 S   0.0 16.0   3:46.02 bundle      
 1626 git       20   0  543608 324384   3224 S   0.0 15.8   3:51.97 bundle      
 1620 git       20   0  543608 324244   3088 S   0.0 15.8   3:51.68 bundle      
 1556 git       20   0  510840 149736   2616 S   0.0  7.3   0:18.45 bundle    

Beachten Sie, dass topdies nicht zeigt, was die Prozesse wirklich tun, aber Sie können es leicht herausfinden ps. Zum Beispiel:

# ps 664
  PID TTY      STAT   TIME COMMAND
  664 ?        Ssl  139:49 sidekiq 4.2.1 gitlab-rails [0 of 25 busy]
# ps 1556
  PID TTY      STAT   TIME COMMAND
 1556 ?        Sl     0:18 unicorn master -D -E production -c /var/opt/gitlab/gitlab-rails/etc/unicorn.rb /opt/gitlab/embedded/service/gitlab-rails/config.ru
Michael Hampton
quelle
1
Vielen Dank für Ihre Antwort. Ich denke, ich muss nach einer leichteren Lösung suchen. Gogs sieht vielversprechend aus
mode777
Ich habe auch 2 GB RAM und Gitlab läuft am Anfang gut. Es scheint, dass bei Sidekick ein Speicherverlust vorliegt ( gitlab.com/gitlab-org/gitlab-ce/issues/30564 ). Es gibt einige Dinge, die Sie tun können: docs.gitlab.com/ce/administration/operations/… (aber das habe ich selbst nicht getan) oder ab und zu diesen Sidekick-Prozess neu starten (vielleicht ein Cron?).
Josejulio
Einhorn Killer könnte auch nützlich sein über.gitlab.com
2015/
Ich evaluiere gitlab für ein Projekt und bin hier im März 2018 auf ein ähnliches Problem gestoßen. Gitlab ist eine glänzende neue Debian-Installation auf einem 2-GB-Knoten und läuft einwandfrei, aber über einige Tage bundleverbrauchen die Prozesse Speicher und verursachen übermäßigen Austausch. Dies wurde zumindest vorübergehend mit behoben gitlab-ctl restart. "Gitlab hat Speicherlecks", heißt es in der Dokumentation. Ja, es hat Undichtigkeiten ab dem Moment, in dem Sie es installieren, wenn es im Leerlauf läuft.
Roger Halliburton
Sie können oben drücken c, um die tatsächlichen Befehlszeilen anzuzeigen.
Thomas
1

Ich weiß, dass dieser Thread ein bisschen abgestanden ist, aber trifft das noch jemand? Ich bin auf einer physischen Box mit 24 GB und 12 Kernen / 24 Threads und sehe ein Bündel, das wie verrückt gespalten ist, bis es den gesamten Speicher aufnimmt. Ich habe in der gitlab-Konfiguration nachgesehen und festgestellt, dass die Sidekiq-Parallelität standardmäßig auf 25 eingestellt ist - das bedeutet anscheinend, dass bis zu 25 Kopien des Bundles ausgeführt werden? Es werden so viele wie möglich aus dem Speicher erstellt. Verrückt.

BoeroBoy
quelle
Update Ich habe diesen Thread gefunden, der hilft: stackoverflow.com/questions/36122421/…
BoeroBoy
0

Haben Sie versucht, es aus- und wieder einzuschalten?

gitlab-ctl restart

Was auch immer passiert bundle, es scheint ziemlich klar zu sein, dass die * -Killer-Tools diese Probleme nicht lösen. Es sieht so aus, als würden diese Prozesse von Sidekiq aus gestartet.

Roger Halliburton
quelle