
首先說明筆者的服務器環境,阿里云服務器:8G記憶體,2核,自從團隊運維小伙伴搭建了gitlab之后,git push 代碼時不時的就很卡,也經常出現 gitlab 反應超時——回傳502錯誤,嚴重阻塞了團隊專案的開發,傷心!

轉載請注明出處: https://www.cnblogs.com/NaughtyCat/p/gitlab-eat-too-much-memory-and-response-with-502-error.html
SSH登上服務器,我去,卡的不要不要的,top 命令一看,記憶體只有不到125M,在top -d 3(每3秒重繪一次)模式下,按住 shift + m (以記憶體排序), 記憶體和cpu使用情況如下圖:

CPU還是有很多空閑的,記憶體所剩不多,USER為 git和gitlab-+的全是gitlab的東東,gitlab記憶體占比超過%35,而且隨著時間推移,如5小時后,free memory 持續減少,buff/cache 持續增加【CoderBaby】,on my god!

慌不要慌,淡定,我有上網法寶,我怕誰,一通google,答案了然于胸,
基本方略,改組態檔(/etc/gitlab/gitlab.rb ),組態檔生效(gitlab-ctl reconfigure),重啟(gitlab-ctl restart)
1)unicorn改小行程數,及記憶體占用
unicorn['worker_processes'] = 2
unicorn['worker_memory_limit_min'] = "300 * 1 << 20"
unicorn['worker_memory_limit_max'] = "500 * 1 << 20"
注:
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.uj5u.com/gongcheng/3065.html
標籤:其他
