CentOS上GitLab性能瓶颈突破方法
硬件是GitLab运行的基础,需根据用户规模和仓库大小调整:
修改/etc/gitlab/gitlab.rb配置文件,优化关键服务的并发和资源限制:
worker_processes(建议设置为CPU核心数的1-2倍),避免过多进程导致资源竞争;设置worker_timeout(如60秒),防止长时间阻塞的请求占用资源。concurrency(如10-20),控制并发任务数,避免后台任务占用过多内存或CPU。shared_buffers(设置为物理内存的25%,如8GB内存设为2GB)、work_mem(排序/哈希操作的内存,如4MB)、maintenance_work_mem(维护操作的内存,如64MB),提升数据库查询性能。GitLab默认开启多项服务(如防火墙、NetworkManager、邮件服务),若不需要可关闭以减少资源消耗:
systemctl stop firewalld && systemctl disable firewalld # 关闭防火墙
systemctl stop NetworkManager && systemctl disable NetworkManager # 关闭NetworkManager
(注:若需使用防火墙,可保留并配置允许GitLab的相关端口,如80、443、22)。
/etc/gitlab/gitlab.rb,配置Redis连接信息(如redis['host']、redis['port']),默认已启用,无需额外安装。postgresql.conf中的关键参数,如max_connections(根据并发连接数调整,如100-200)、effective_cache_size(设置为物理内存的50%-70%)、random_page_cost(SSD环境下可降低至1.1,提升索引扫描性能)。/etc/sysctl.conf,优化网络性能:net.ipv4.tcp_tw_reuse = 1 # 复用TIME_WAIT状态的连接
net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT连接(注意:部分新内核已移除)
net.ipv4.tcp_fin_timeout = 30 # TIME_WAIT状态的超时时间(秒)
net.core.somaxconn = 65535 # 监听队列的最大长度
net.ipv4.ip_local_port_range = "1024 65535" # 本地端口范围
net.ipv4.tcp_fastopen = 3 # 启用TCP Fast Open,减少握手延迟
执行sysctl -p使配置生效。/etc/gitlab/gitlab.rb,开启HTTP/2(提升多路复用效率)和Keep-Alive(保持长连接,减少握手次数):nginx['enable'] = true
nginx['listen_port'] = 80
nginx['listen_https'] = false
nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256"
nginx['keepalive_timeout'] = 65
重新配置GitLab:gitlab-ctl reconfigure。git gc --prune=now # 清理本地仓库
对于GitLab仓库,可通过Web界面或API触发GC。