温馨提示×

centos gitlab性能调优案例

小樊
62
2025-08-18 15:59:55
栏目: 智能运维

以下是一个CentOS上GitLab性能调优的典型案例,结合硬件、系统、配置等多方面优化:

一、硬件升级

  • 增加内存:从4GB升级至16GB,解决GitLab启动后因内存不足导致的频繁交换(swap)问题。
  • 替换为SSD:将系统盘从HDD更换为NVMe SSD,提升文件读写速度,尤其对仓库克隆、推送等操作效果显著。
  • 多核CPU:采用8核CPU,配合GitLab的并发处理配置,提升多用户同时操作的响应速度。

二、系统配置优化

  • 调整内核参数

    # 增加网络连接队列和缓冲区
    sysctl -w net.core.somaxconn=65535
    sysctl -w net.ipv4.tcp_max_syn_backlog=65535
    sysctl -w net.core.rmem_max=16777216
    sysctl -w net.core.wmem_max=16777216
    # 优化TCP连接复用
    sysctl -w net.ipv4.tcp_tw_reuse=1
    sysctl -w net.ipv4.tcp_fin_timeout=30
    # 启用大页内存(需根据服务器内存调整)
    sysctl -w vm.nr_hugepages=512
    

    执行sysctl -p使配置生效。

  • 调整文件描述符限制: 编辑/etc/security/limits.conf,添加:

    * soft nofile 65535
    * hard nofile 65535
    

    确保高并发时不会因文件句柄不足报错。

三、GitLab配置优化

  • 调整Unicorn参数: 编辑/etc/gitlab/gitlab.rb

    unicorn['worker_processes'] = 4  # 根据CPU核心数调整(建议为CPU核心数的1-2倍)
    unicorn['timeout'] = 300
    unicorn['keepalive'] = true
    

    执行sudo gitlab-ctl reconfigure生效。

  • 优化Sidekiq并发

    sidekiq['concurrency'] = 20  # 根据服务器负载调整,避免过高导致内存不足
    sidekiq['queues'] = ["default", "gitlab"]
    

    重启GitLab使配置生效。

  • 启用缓存

    gitlab_rails['cache_store'] = :memory_store, { size: 128.megabytes }  # 使用内存缓存加速访问
    nginx['enable'] = true
    nginx['listen_port'] = 80
    nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.example.com.crt"
    nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.example.com.key"
    

    重启Nginx和GitLab。

四、网络优化

  • 调整防火墙规则: 开放HTTP/HTTPS及SSH端口,关闭不必要的端口:
    firewall-cmd --permanent --add-service=http
    firewall-cmd --permanent --add-service=https
    firewall-cmd --permanent --add-port=22/tcp
    firewall-cmd --reload
    
  • 启用HTTP/2: 在Nginx配置中添加ssl_protocols TLSv1.2 TLSv1.3ssl_ciphers参数,提升加密传输效率。

五、监控与维护

  • 安装监控工具:使用Prometheus+Grafana监控服务器CPU、内存、磁盘I/O及GitLab服务状态,及时发现性能瓶颈。
  • 定期清理缓存:通过gitlab-rake cache:clear命令定期清理缓存,避免磁盘空间占用过高。
  • 更新GitLab版本:保持GitLab及其依赖包为最新版本,获取性能优化和安全补丁。

六、效果验证

  • 性能测试:使用ab(Apache Benchmark)工具模拟多用户并发访问,对比优化前后的响应时间(如从5秒缩短至1.5秒)。
  • 日志分析:通过/var/log/gitlab/nginx/下的访问日志,确认请求处理时间是否缩短,错误率是否降低。

参考来源

0