Gitlab: consommation de mémoire extrêmement élevée grâce au processus de «bundle» rubis

9

J'ai un problème avec mon installation de Gitlab fonctionnant sur un petit Ubuntu LTS 16.04. Je dois souligner que je n'ai pas beaucoup d'expérience avec Linux ou Gitlab.

Mon installation Gitlab avec quelques projets personnels (seulement 4) fonctionnait bien, bien que la poussée soit extrêmement lente et échoue parfois. L'accès à l'interface Web est également extrêmement lent. J'ai vérifié le serveur et j'ai remarqué que jusqu'à 96% de la mémoire totale étaient utilisés. Le coupable semble être un processus groupé.

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

J'ai frappé pstree et ces processus de bundle semblent être liés à l'application ruby ​​(doit être gitlab).

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

Quelqu'un at-il eu des expériences similaires ou une idée de ce qui pourrait provoquer cela?

mode777
la source

Réponses:

3

GitLab CE souhaite utiliser au moins 4 Go de RAM. Donc, si vous avez 2 Go de RAM, GitLab essaie d'ajouter 2 Go de mémoire en utilisant SWAP, ce qui se traduit par 2 Go de mémoire d'échange. Cela rend GitLab très lent, même si vous êtes le seul utilisateur.

La solution: votre machine doit avoir au moins 4 Go de RAM ou plus. Ne perdez pas votre temps à peaufiner le fichier de configuration de GitLab, assurez-vous simplement que vous disposez de 4 Go de RAM.

Lisez la section «Mémoire» du document de ce GitLab: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/requirements.md

Bonne chance!

AndaluZ
la source
2

Ce seront les ouvriers licornes et sidekiq. Ils semblent utiliser la bonne quantité de mémoire. 2 Go représentent le strict minimum de RAM pour exécuter gitlab; si votre système a beaucoup d'activité, vous aurez besoin de 4 Go ou plus.

J'ai également une instance gitlab personnelle sur 2 Go de RAM, et elle montre une utilisation similaire:

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    

Notez que topcela ne vous montre pas ce que les processus font réellement, mais vous pouvez facilement le découvrir avec ps. Par exemple:

# 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
la source
1
Merci pour votre réponse. Je pense que je vais devoir chercher une solution plus légère. Gogs semble prometteur
mode777
J'ai également 2 Go de RAM et gitlab fonctionne bien au début. Il semble qu'il y ait une fuite de mémoire sur le copain ( gitlab.com/gitlab-org/gitlab-ce/issues/30564 ). Il y a certaines choses que vous pouvez faire comme: docs.gitlab.com/ce/administration/operations/… (mais je ne l'ai pas fait moi-même) ou redémarrer ce processus d'accompagnement de temps en temps (peut-être un cron?).
Josejulio
Un tueur de licorne pourrait également être utile à propos de.gitlab.com/2015/06/05/…
Josejulio
J'évalue gitlab pour un projet et j'ai rencontré un problème similaire, ici en mars 2018. Une nouvelle installation Debian brillante sur un nœud de 2 Go, Gitlab fonctionne correctement, mais sur quelques jours, les bundleprocessus consomment de la mémoire et provoquent un échange excessif. Cela a été corrigé, au moins temporairement, avec gitlab-ctl restart. "Gitlab a des fuites de mémoire", indique la documentation. Ouais, il y a des fuites à partir du moment où vous l'installez, quand il est inactif.
Roger Halliburton
Vous pouvez appuyer cen haut pour afficher les lignes de commande réelles.
Thomas
1

Je sais que ce fil est un peu rassis, mais quelqu'un d'autre le rencontre-t-il encore? Je suis sur une boîte physique avec 24 Go et 12cores / 24threads et je vois un paquet fourchu comme un fou jusqu'à ce qu'il aspire toute la mémoire. J'ai regardé dans gitlab config et j'ai trouvé que la simultanéité sidekiq est définie sur 25 par défaut - apparemment, cela signifie que jusqu'à 25 copies du paquet sont en cours d'exécution? Il en crée autant que possible avant de manquer de mémoire. Fou.

BoeroBoy
la source
Mise à jour J'ai trouvé ce fil qui aide: stackoverflow.com/questions/36122421/…
BoeroBoy
0

Avez-vous essayé de l'éteindre puis de le rallumer?

gitlab-ctl restart

Quoi qu'il arrive bundle, il semble assez clair que les outils * -killer ne détectent pas ces problèmes. Il semble que ces processus soient démarrés à partir de sidekiq.

Roger Halliburton
la source