作业帮架构实习一面

不会的场景题有:

64核机器docker里面 容器开了4核 go程序的gmp调度怎么办

出现什么问题?

gpt的回答是

  1. GOMAXPROCS设置与实际CPU核心不符:Go运行时通过环境变量GOMAXPROCS来控制同时运行的goroutines的数量(对应的是P的数量)。默认情况下,GOMAXPROCS的值是机器的CPU核心数。在Docker容器环境中,如果没有显式设置GOMAXPROCS,Go运行时可能会误认为有64个核心可用,尽管容器实际上只能使用4核。这种情况下,Go运行时会创建过多的P(Processor),导致调度器尝试在不存在的核心上调度goroutines,造成不必要的调度开销和可能的性能下降。
  2. 资源竞争和调度延迟:当多个P尝试在有限的核心上运行时,会导致线程之间的竞争加剧,可能引起线程频繁的上下文切换。这会增加CPU的调度延迟,降低程序的运行效率。
  3. CPU利用率不均:如果GOMAXPROCS设置过高,某些P可能在没有足够的OS线程支持的情况下处于空闲状态,导致CPU资源的利用率不均衡。这不仅影响应用的性能,也可能造成资源浪费。

为了解冑这些问题,你可以采取以下措施:

  • 显式设置GOMAXPROCS:在启动容器时,可以通过环境变量显式设置GOMAXPROCS的值,以匹配容器所允许使用的CPU核心数。例如,使用docker run -e GOMAXPROCS=4 ...确保Go应用只会创建与容器可用核心数相等的P。
  • 使用Docker的CPU限制功能:通过Docker的--cpus或--cpuset-cpus参数来限制容器使用特定的CPU核心。这有助于防止Go运行时误用不可用的核心。

通过这些配置调整,可以确保Go程序在Docker容器中更高效地运行,减少不必要的调度开销和提高CPU资源的利用率。

我们可以用uber的automaxprocs包把GOMAXPROCS设置为cgroup中cpu数

主要是怕上下文频繁切换,还有创建过多的P

dns多级缓存 如果这个时候我改了域名怎么快速传播

清楚dns缓存 降低TTL时间 使用dns传播工具

1000万的用户有多少M

才几十M

第四次挥手 为啥有时间

我说防止资源浪费 因为维持tcp连接很占用资源 然后面试官说还有呢?寄

是为了确保连接关闭的可靠性,避免资源浪费,提高网络通信的效率。

算法 快排

作业帮面试官很好 很有耐心去引导你 不会也会给你提示 可惜我太菜了。

全部评论
太难了吧
点赞 回复 分享
发布于 05-28 16:52 四川
docker考得好深啊 没信心了
点赞 回复 分享
发布于 05-30 16:51 福建
难啊
点赞 回复 分享
发布于 06-16 13:02 福建
我今天也面了这个部门,想问下大佬结果啥时候出啊
点赞 回复 分享
发布于 06-20 12:07 上海

相关推荐

2 7 评论
分享
牛客网
牛客企业服务