首先说明笔者的服务器环境,阿里云服务器:8G内存,2核。自从团队运维小伙伴搭建了gitlab以后,git push 代码时不时的就很卡,也常常出现 gitlab 反应超时——返回502错误,严重阻塞了团队项目的开发,伤心!html
转载请注明出处: https://www.cnblogs.com/NaughtyCat/p/gitlab-eat-too-much-memory-and-response-with-502-error.htmlnode
SSH登上服务器,我去,卡的不要不要的,top 命令一看,内存只有不到125M。在top -d 3(每3秒刷新一次)模式下,按住 shift + m (之内存排序), 内存和cpu使用状况以下图:
linux
CPU仍是有不少空闲的,内存所剩很少,USER为 git和gitlab-+的全是gitlab的东东,gitlab内存占比超过%35,并且随着时间推移,如5小时后,free memory 持续减小,buff/cache 持续增长【CoderBaby】,on my god!git
慌不要慌,淡定。我有上网法宝,我怕谁,一通google,答案了然于胸。sql
基本方略,改配置文件(/etc/gitlab/gitlab.rb ),配置文件生效(gitlab-ctl reconfigure),重启(gitlab-ctl restart)ubuntu
1)unicorn改小进程数,及内存占用服务器
unicorn['worker_processes'] = 2app
unicorn['worker_memory_limit_min'] = "300 * 1 << 20"
unicorn['worker_memory_limit_max'] = "500 * 1 << 20"运维
注:ide
a. gitlab有不少组件,部分组件有memory leak — 内存泄露,gitlab 搞了个 unicorn-worker-killer,会自动丢弃(drop)那些崩溃了且没有用户请求的worker,关于Unicorn and unicorn-worker-killer,详情参见:
https://docs.gitlab.com/ee/administration/operations/unicorn.html
b. ps aux|grep unicorn|wc -l 【查看unicorn进程数,一看原来默认有9个】
c. unicorn['worker_processes'] 至少得有2个,推荐: (CPU cores * 1.5) + 1 = Unicorn workers
2)其它修改
sidekiq['concurrency'] = 4
prometheus_monitoring['enable'] = false
postgresql['shared_buffers'] = 256M 【postgresql内存改小】
3)linux kernal swap调整到适当比例
配置文件:/etc/sysctl.conf ,修改: vm.swappiness = 10 ,使其生效:重启,或者经过
sysctl vm.swappiness=10 使其运行时生效
跑了一天,gitlab运行正常,内存已始终有1.7G空闲,开心
4) 若是跑了几天,top命令看到buff/cache愈来愈大,空闲内存愈来愈少,可经过以下命令【终极解决方案】:
- 释放page cache:
echo 1 > /proc/sys/vm/drop_caches
- 释放 dentries 和 inodes:
echo 2 > /proc/sys/vm/drop_caches
- 一块儿搞
echo 3 > /proc/sys/vm/drop_caches 或者free && sync && echo 3 > /proc/sys/vm/drop_caches && free
运行【一月后】,一块儿正常,开心鸭
注:
- gitlab配置说明【至少要2 core, 8G RAM】:https://gitlab.com/gitlab-org/gitlab-foss/blob/master/doc/install/requirements.md
- 设置kernal swapping: https://askubuntu.com/questions/103915/how-do-i-configure-swappiness/103916#103916
- buff/cache 内存释放: https://unix.stackexchange.com/questions/415814/memory-runs-full-over-time-high-buffer-cache-usage-low-available-memor
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。
*******************************************************************************************
精力有限,想法太多,专一作好一件事就行
- 我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
- 写博客的意义在于打磨文笔,训练逻辑条理性,加深对知识的系统性理解;若是刚好又对别人有点帮助,那真是一件使人开心的事
*******************************************************************************************
原文出处:https://www.cnblogs.com/NaughtyCat/p/gitlab-eat-too-much-memory-and-response-with-502-error.html