最近看了一遍 runtime ,去尝试了之前遗留的一个工作:调整 k8s 中容器的 GOMAXPROCS ,效果还不错。
在 11:35 左右, 我们将应用的 GOMAXPROCS 从默认的 32/64 主动设置为 4, 对比 14:30 和 11:30 的数据可以看到:
1
julyclyde 2023-01-18 16:48:13 +08:00
那就需要分析一下原因了
降低并发度之后反而提高了处理能力,说明并发的时候内耗比较大? |
2
kiwi95 2023-01-18 16:51:41 +08:00 via Android
说明当前场景下并发调度开销比较大?
|
3
loveuer 2023-01-18 16:52:12 +08:00
可以细说一下主要啥类型的业务么🧐
|
4
chenqh 2023-01-18 16:55:33 +08:00
你这是 k8s 吧,golang 这种不应该是一个进程吃满的吗,又不是 python 那种
|
5
GopherDaily OP @julyclyde go scheduler 调度的成本,和 os thread 上下文切换的成本
|
6
julyclyde 2023-01-18 17:13:52 +08:00
是容器运行吗?
runtime.NumCPU()和容器的核数是否一致? |
7
Maboroshii 2023-01-18 17:15:06 +08:00
k8s node 上还有其他 pod 吧,都想吃满机器 ,肯定有反效果
|
8
GopherDaily OP @loveuer 典型的 web 服务呗
|
9
GopherDaily OP @Maboroshii pod 是坑定有的,吃满不至于,我们一般是控制实际使用率在 40%以内,突然的情况下会到 60%
|
10
Aoang 2023-01-18 21:24:25 +08:00 via iPhone
要压榨单机性能最好就别用 k8s (:
个人实践,丢在 k8s 上的东西都是无状态的应用,开了自动扩缩容其他的就不需要操心了。 对于有状态或者需要压榨单机性能的,例如数据库都不在 k8s 内。 另,试着升下版本,GOGC 和 GOMEMLIMIT 还能对程序有进一步的提升。 |
11
Dreamacro 2023-01-18 22:47:31 +08:00 via iPad
|
12
GopherDaily OP @Aoang 自然,但是资源能节约要节约,成本核算都是 OKR
|
13
GopherDaily OP @Dreamacro CI/CD 里面直接注入环境变量也行,可控性更高
|
14
hopingtop 2023-01-19 09:39:27 +08:00
针对 Docker 运行 Go 确实有取宿主机的 CPU 来设置 MAXPROCS.
当使用 Pod 限制资源的配置时,就不建议手动去调整 MAXPROCS , 这样做不好运维,所以可以选择 Uber 的一个库 |
15
hopingtop 2023-01-19 09:43:21 +08:00
@hopingtop
https://github.com/uber-go/automaxprocs 这库的原理就是取读取 容器里 /sys/fs/cgroup/cpu 里面的值,然后计算出一个合理的 MAXPROCS 在你 main 函数执行之前通过 import 这个过程去初始化 MAXPROCS |
16
GopherDaily OP @hopingtop 你是站在业务开发的角度来看
|
17
liuxu 2023-01-19 12:07:03 +08:00
嗯,k8s 里面进程数是要手动设置下,除非单 pod ,不然 pod 自动扩展物理机进程数 X^n 上升
物理机和 k8s 还是有很多细微的差别要处理 |
18
GopherDaily OP @liuxu 一直还没去关注,k8s/vm 分配 cpu 时间片的时候会不会主动尽量将单个 pod 聚集到某个 物理 c 上
|
19
liuxu 2023-01-19 14:24:47 +08:00
@GopherDaily 物理 C 是物理 node 还是物理 cpu core ,前者可以用 statefulset 、node selector 和 affility 处理,后者 k8s 没有这个能力也不应该有这个能力
|
20
GopherDaily OP @liuxu 真实的、物理的 CPU
情理上我也觉得 k8s 没有这个能力,但是 resources limit 也在 pod spec 中,所以可能还是可以揣测下 |
21
eudore 2023-01-22 23:34:39 +08:00
没配置对,uber 有个库就可以根据 limit 去设置 maxprocs ,jvm 也有相识的内置参数。
|
22
paceewang1 2023-02-09 09:50:35 +08:00
op 这用的是什么监控呢?
|
23
GopherDaily OP @paceewang1 prometheus+grafana
|