# GitlabCE 17.5.2 调优指南
# 环境说明
- 系统版本: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
# 自定义 web站点访问地址
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 # 自动清理缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# /etc/sysctl.conf
# 缓解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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
1
2
2
# 压测命令与结果图
# 如果ab不存在,请安装
yum install httpd-tools -y
# 压测命令
ab -n 50000 -c 500 http://192.168.100.128:20080/api/v4/version
1
2
3
4
2
3
4
# 压测报告结果
# 基础信息
测试指标 | 结果值 | 描述 |
---|---|---|
服务器软件 | 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)
统计项 | min | mean | median | max |
---|---|---|---|---|
Connect | 0 | 1 | 0 | 108 |
Processing | 90 | 620 | 594 | 2007 |
Waiting | 90 | 620 | 594 | 2007 |
Total | 190 | 621 | 594 | 2008 |
# 请求响应时间分布 (ms)
百分比 | 响应时间 |
---|---|
50% | 594 |
66% | 652 |
75% | 694 |
80% | 722 |
90% | 807 |
95% | 886 |
98% | 995 |
99% | 1085 |
100% | 2008 |
# 内存占用平均
85%
← 调优专项