编辑
2025-07-26
DevOps-最佳实践
00
请注意,本文编写于 258 天前,最后修改于 0 天前,其中某些信息可能已经过时。

目录

环境说明
/etc/gitlab/gitlab.rb
/etc/sysctl.conf
/etc/security/limits.conf
压测命令与结果图
压测报告结果
基础信息
性能指标
连接时间统计 (ms)
请求响应时间分布 (ms)
内存占用平均

GitLab 功能丰富但资源消耗较高,在生产环境中需要根据服务器配置进行针对性调优,以平衡性能与资源占用。本文基于一台 24 核心、32GB 内存、500G 机械硬盘的 CentOS 7.9 服务器,提供 GitLab CE 17.5.2 的完整调优方案。核心配置涵盖:Nginx 调优(worker_processes=12worker_connections=65535keepalive_timeout=15、启用 gzip)、Puma 应用服务器调优(worker_processes=24min/max_threads=8/16、内存杀手阈值 1.8GB/2GB)、PostgreSQL 调优(shared_buffers=12GB(内存 25%)、work_mem=256MBmax_connections=1000)、Redis 调优(maxmemory=4GBallkeys-lru 淘汰策略)、Sidekiq 后台任务调优(max_concurrency=36)。同时禁用非必要组件以释放资源(Registry、Packages、GitLab Pages、Mattermost、Prometheus、KAS、Terraform 等),并配置内核参数(sysctl.conf)与文件描述符限制(limits.conf)。附有 ab 压测结果(并发 500、总请求 50000、吞吐率 799 req/s)。

本文适用于在资源受限环境中部署高可用 GitLab 的运维人员。

环境说明

  • 系统版本:CentOS Linux release 7.9.2009 (Core)
  • 系统内核版本:5.4.278-1.el7.elrepo.x86_64 (升级内核可以参考博客内的文章)
  • 系统配置:24核心 32G内存 500G西数机械蓝盘
  • Git版本:1.8.3.1
  • Gitlab版本包:gitlab-ce-17.5.2-ce.0.el7.x86_64.rpm

/etc/gitlab/gitlab.rb

shell
# 自定义 web站点访问地址[GitlabCE_17.5.2_by_odboy.md](GitlabCE_17.5.2_by_odboy.md) external_url 'http://192.168.100.128:20080' # 自定义 ssh访问地址 gitlab_rails['gitlab_ssh_host'] = '192.168.100.128' gitlab_rails['gitlab_shell_ssh_port'] = 20022 gitlab_rails['gitlab_shell_git_timeout'] = 800 # 自定义 时区 gitlab_rails['time_zone'] = 'Asia/Shanghai' # 优化 文件监视器,如果inotify有问题 gitlab_rails['file_watcher'] = 'polling' gitlab_rails['db_pool'] = 64 # 默认值20,数据库连接池耗尽处理 gitlab_rails['db_prepared_statements'] = false # 减少预处理开销 # 优化 Nginx nginx['listen_port'] = 20080 # Gitlab默认用这个端口号作为其Nginx的监听端口 nginx['client_max_body_size'] = '512m' nginx['listen_https'] = false # 设置是否监听https nginx['gzip_enabled'] = true # 开启gzip压缩 nginx['worker_processes'] = 12 nginx['worker_connections'] = 65535 # 极高并发场景 nginx['keepalive_timeout'] = 15 # 减少连接保持时间,单位秒 nginx['keepalive_requests'] = 10000 # 单个连接最大请求数 nginx['tcp_nopush'] = 'on' # 启用TCP_CORK nginx['multi_accept'] = 'on' nginx['worker_rlimit_nofile'] = 65535 # 优化 Puma (主应用服务器) puma['worker_processes'] = 24 # 推荐公式: (CPU核心数 * 0.75)取整 puma['min_threads'] = 8 puma['max_threads'] = 16 # 每个worker的最大线程数 puma['worker_timeout'] = 60 puma['worker_memory_limit_min'] = '1GB' # 自动重启超限worker puma['worker_memory_limit_max'] = '2GB' puma['per_worker_max_memory_mb'] = 2048 # 允许大内存worker puma['worker_shutdown_timeout'] = '60s' # 自动重启worker puma['worker_memory_killer'] = { 'frequency' => 15, # 每15秒检查 'limit_mb' => 1800, # 软限制1.8GB 'hard_limit_mb' => 2000, # 硬限制2GB 'kill_interval' => 60 } puma['so_keepalive'] = true # 启用TCP Keepalive puma['backlog'] = 1024 # 待处理连接队列 puma['tcp_nodelay'] = true # 禁用Nagle算法 puma['queue_requests'] = false # 禁用队列,直接返回503过载保护 # 优化 PostgreSQL postgresql['shared_buffers'] = '12GB' # 数据库缓存,设置为总内存的25% postgresql['work_mem'] = '256MB' # 每个查询的内存,复杂查询可临时提高 postgresql['maintenance_work_mem'] = '2GB' # 维护操作专用 postgresql['effective_cache_size'] = '24GB' # 内存的75% postgresql['max_parallel_workers_per_gather'] = 8 # 并行查询 postgresql['max_connections'] = 1000 # 数据库连接池耗尽处理 postgresql['checkpoint_completion_target'] = 0.9 postgresql['wal_buffers'] = "32MB" postgresql['bgwriter_delay'] = "10ms" # 优化 redis redis['maxmemory'] = '4GB' # 限制Redis内存 redis['maxmemory_policy'] = 'allkeys-lru' redis['maxmemory_samples'] = 10 # 更精确的LRU # 优化 关键开关 gitlab_rails['env'] = { "RAILS_ENV" => 'production', "MALLOC_ARENA_MAX" => '2' # 减少Ruby内存碎片 } # 优化 Git操作缓存 gitlab_rails['git_max_size'] = 5242880 # 5MB gitlab_rails['git_timeout'] = 180 # 优化 Runner连接 gitlab_rails['ci_job_token_scope_enabled'] = true # 优化 Sidekip (后台任务) sidekiq['max_concurrency'] = 36 # 推荐值: (CPU核心数 * 1.5)取整,提高并发 sidekiq['min_concurrency'] = 12 sidekiq['queue_selector'] = true # 智能队列分配 sidekiq['memory_killer_max_rss'] = '4GB' # 提高内存限制 # 禁用 容器仓库 registry['enable'] = false registry_nginx['enable'] = false gitlab_rails['gitlab_default_projects_features_container_registry'] = false gitlab_rails['registry_enabled'] = false # 禁用 包仓库、依赖管理 gitlab_rails['packages_enabled'] = false gitlab_rails['dependency_proxy_enabled'] = false # 禁用 反垃圾邮件引擎 spamcheck['enable'] = false # 禁用 备份 gitlab_backup_cli['enable'] = false # 禁用 GitLab Pages gitlab_pages['enable'] = false pages_nginx['enable'] = false # 禁用 邮箱 gitlab_rails['smtp_enable'] = false # 禁用 应用性能分析和上报 Usage Statistics gitlab_rails['usage_ping_enabled'] = false gitlab_rails['sentry_enabled'] = false # 禁用 对k8s的cd功能 GitLab-KAS And Terraform gitlab_kas['enable'] = false gitlab_rails['gitlab_kas_enabled'] = false gitlab_rails['terraform_state_enabled'] = false # 禁用 Kerberos和sentinel gitlab_rails['kerberos_enabled'] = false sentinel['enable'] = false # 禁用 自带聊天Mattermost mattermost['enable'] = false mattermost_nginx['enable'] = false # 禁用 监控和性能基准相关功能 prometheus_monitoring['enable'] = false prometheus['enable'] = false alertmanager['enable'] = false pgbouncer_exporter['enable'] = false sidekiq['metrics_enabled'] = false # 启用 特需监控 node_exporter['enable'] = true redis_exporter['enable'] = false postgres_exporter['enable'] = false gitlab_exporter['enable'] = true # 启用 增量日志处理 gitlab_rails['lograge_enabled'] = true gitlab_rails['lograge_format'] = 'json' # 启用 GitLFS gitlab_rails['lfs_enabled'] = true # 禁用 API限流 gitlab_workhorse['enable'] = false gitlab_workhorse['api_limit'] = 0 gitlab_workhorse['api_queue_limit'] = 0 gitlab_pages['rate_limit_source_ip'] = 0 gitlab_pages['rate_limit_domain'] = 0 gitlab_pages['rate_limit_tls_source_ip'] = 0 gitlab_pages['rate_limit_tls_domain'] = 0 gitlab_rails['rake_cache_clear'] = true # 自动清理缓存

/etc/sysctl.conf

shell
# 缓解TIME_WAIT net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_keepalive_time = 600 # 增加端口范围 net.ipv4.ip_local_port_range = 1024 65000 # 禁用 SYN Cookie 保护机制,仅在受控内网环境禁用,公网环境建议保持1 net.ipv4.tcp_syncookies = 0 # 控制半连接队列(SYN 队列)的最大长度 net.ipv4.tcp_max_syn_backlog = 65536 # 启用 TCP Fast Open (TFO),减少 TCP 握手延迟(可节省 1 RTT) net.ipv4.tcp_fastopen = 3 # 定义每个监听 socket 的全连接队列(accept 队列)最大长度 net.core.somaxconn = 65535 # 控制网卡设备接收队列的最大包数 net.core.netdev_max_backlog = 65536

/etc/security/limits.conf

shell
* soft nofile 65535 * hard nofile 65535

压测命令与结果图

shell
# 如果ab不存在,请安装 yum install httpd-tools -y # 压测命令 ab -n 50000 -c 500 http://192.168.100.128:20080/api/v4/version

image.png

压测报告结果

基础信息

测试指标结果值描述
服务器软件nginx
服务器主机192.168.100.128
服务器端口20080
测试路径/api/v4/version
响应长度30 bytes
并发数 (Concurrency)500
总请求数50,000
失败请求数0
非2xx响应数50,000这里是因为version接口正常返回304导致的

性能指标

测试指标结果值
测试总耗时62.566 秒
总传输数据量23,450,000 bytes
HTML传输量1,500,000 bytes
吞吐率 (Requests/sec)799.16
平均请求时间 (mean)625.658 ms
平均请求时间 (across all)1.251 ms
传输速率366.02 KB/sec

连接时间统计 (ms)

统计项minmeanmedianmax
Connect010108
Processing906205942007
Waiting906205942007
Total1906215942008

请求响应时间分布 (ms)

百分比响应时间
50%594
66%652
75%694
80%722
90%807
95%886
98%995
99%1085
100%2008

内存占用平均

85%

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Odboy

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC 4.0 BY-SA 许可协议。转载请注明出处!