Gitlab:通过ruby“bundle”进程消耗极高的内存

我在运行在Ubuntu LTS 16.04上的Gitlab安装有问题。 我必须指出,我没有太多的Linux或Gitlab的经验。

我的一些个人项目(只有4个)的Gitlab安装运行正常,虽然推动是非常缓慢,有时失败。 访问网页界面也非常慢。 我检查了服务器,注意到使用了高达96%的内存。 罪魁祸首似乎是一个捆绑过程。

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 

我打pstree,这些捆绑过程似乎与ruby应用程序(必须是gitlab)有关。

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

有没有人有类似的经验或想法可能会导致这一点?

那些将是独angular兽工人和sidekiq。 他们似乎正在使用正确数量的内存。 2GB是关于运行gitlab的RAM的最低限度; 如果你的系统有很多的活动,你会想要4GB或更多。

我还有一个2GB内存的个人gitlab实例,它也显示了类似的用法:

 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 

请注意, top并没有告诉你这个过程真的在做什么,但是你可以很容易的用ps来find它。 例如:

 # 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 

GitLab CE希望使用至less4GB的RAM。 所以如果你有2GB内存,GitLab会尝试使用SWAP来增加2GB的内存,这会导致2GB的交换内存。 这使得GitLab非常慢,即使你是唯一的用户。

解决scheme:您的机器必须至less有4 GB RAM或更多。 不要浪费你的时间来调整GitLab的configuration文件,只要确保你有4 GB的硬盘。

阅读这个GitLab文档的“内存”部分: https ://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/requirements.md

祝你好运!