docker读不到cpu数量

docker读不到cpu数量,第1张

看了很多书都说docker来部署应用可以隔离系统资源互不影响,直到这段时间出现的一系列问题又颠覆了我的认知。

发现docker并不能隔离真正隔离系统资源。最近k8s中的某一个应用总是被强制重启,由于监控体系没有完善,找了好久都没有找到原因,之前也有其它应用类似的问题是应为metaspace溢出导致的,但是此次事务毫无报错,严重时一天重启三次。有时候又一连好几天个把月没有问题。为了不让五一小长假的美好心情被破坏,觉定把这个问题彻底解决掉,好吧其实放假的第一天就被破坏了,当天重启了3次,为了后续的美好日子,决定把它根因找出来。看k8s日志发现每次重启都是健康检查失败导致重启,于是推断以下几种可能:

jvm 频繁GC导致进程stw挂起liveless prob探针超时

系统cpu负载过高导致处理超时

正对两种情况进行对应排查,有时候排查问题也是有点小麻烦,只能绕着想点其它办法,比如skywalking和arthas的冲突问题,比如docker包只打了jre,好吧就只能打印GC日志来观察情况了,排查过程就不讲了,反正排查半天最后发现内存方面没有问题。

所以就考虑第二种情况,cpu负载问题导致超时,于是先用top观察负载。发现load average值大概在8左右,但是发现这个负载值时机器的总平均负载,没办法查看当前docker容器的情况,但是这也不影响我做出正确的推断,配置的cpu核心数为05-1,宿主机和cpu核心数为16,相对16核心数8的负载算正常范围,忽然间又想到这个负载时基于进程级别的,要是我应用的线程数过多,而docker限制了cpu核心数,那么这里会不会出现问题呢?也就是当我进程中的一个线程在使用cpu时其它线程用不了,尽管cpu还有空闲,但是进程内的线程就不断产生上下文切换,导致探针超时,这个也完全有可能,于是按用top -H -p pid 查看线程情况,发现好家伙开了300多个线程,才配置05到1核的cpu 这个确实有点过分了。在观察的过程中发现间隔一分钟cpu使用率还会暴涨一次,好吧这个应用是个定时任务,每隔1分钟就会有10几个定时任务同时进来然后开3个线程处理这个10几个定时任务,每个线程进来又开了cpu核心x10个线程去处理子任务,那么如果此时有大量业务数据需要处理就会产生大量的上下文切换,就非常有可能导致探针请求超时。但是按道理说探针超时10秒这个也不太可能吧?

于是接着想到假如cpu又被其它docker容器的进程占用了呢?也就是说当前应用除了跟自己抢占资源外还需要跟其它的进程抢占资源,所以有可能等待更久。也就是这个应用本身是个cpu密集型的应用,给的cpu过少了。看代码的过程中又发现一个坑爹的地方,应用配置的默认线程数是cpu核心数10,由于docker容器中获取cpu核心数不准确的问题,导致cpu核心数获取到的是宿主机真正核心数16 也就是说实际上是3个线程各自开了160个线程在处理业务,意味着高峰期线程数可能达到480+其它线程的数量,这才导致了探针超时,因为轮半天可能每轮到它执行。

给线程池设置个参数,别开160个线程,外加增加cpu核心数重启完美解决此问题。

一、首先在vivo X6系统主界面中找到并依次进入设置--更多设置,点击进入,如下图所示。

二,然后再进入关于手机页面,在其下方找到版本信息,点击进入,如下图所示。

三、接下来在关于版本信息界面中,连续点击7次“软件版本号”即可激活开发者选项,如下图所示。

四、最后再回到更多设置界面,下面就可以看到多了一个开发者选项设置,接下来在“开发者选项”中就可以找到USB调试了,将此功能开启即可,如下图所示。

vivo X6基于安卓51系统,开启USB调试和目前常见的安卓44手机类似,需要先激活开发者选项,然后才可以开启。

这个看你的电脑配置。配置低占50%正常。还一种可能,就是在杀毒的时候占50%。那没事。我的才占3%。一般不杀毒的时候。是不会超10%。还有建议你删除360。我觉得360现在经常乱报毒。你可以试试用nod32,

可以使用Windows系统内置的“任务管理器”进行查看,在其中找到“性能”选项卡,就可以看到每个处理器的内核数量。此外,也可以使用第三方软件,例如CPU-Z,来查看每个处理器的内核数量。

Turbo Boost一般指英特尔睿频加速技术英特尔睿频加速技术是英特尔酷睿 i7/i5 处理器的独有特性,也是英特尔新宣布的一项技术。这项技术可以理解为自动超频。当开启睿频加速之后,CPU会根据当前的任务量自动调整CPU主频,从而重任务时发挥最大的性能,轻任务时发挥最大节能优

BOOST线程池,分配任务时如下:

threadpoolschedule(boost::bind(&doWork,&XXX,tab));

每个任务都是一样的,多线程纯粹是为了提高并发

现在的问题是:

1、线程开启多时,处理能力并不一定提升

2、就算只开5个线程,CPU最高都可以到200%,有没办法限制最高占用的CPU?

Intel 宣布推出新款的入门级工作站处理器 Xeon E-2100 ,作为 Xeon E3 的后继产品,在核心数量最高提升到 6 核、 12 执行绪的状况下,搭配 Turbo Boost Technology 20 ,可达到最高 47GHz 时脉,无论是跑分或是实质应用面,皆可完胜先前世代的 4 核心处理器,同时 Xeon E-2100 还支援 ECC 记忆体,能够提升系统的稳定性。

Xeon E-2100 采用 LGA-1151 插槽, TDP 最高为 95W ,可支援最高 DDR4 ECC 2666MHz 记忆体,内建 UHD 630 ,具备 4K UHD 解析度输出,以及具备 HEVC 10-bit 硬体加速编码,同时提供 40 条 PCIe 总线,以及支援 USB 31 、 Thunderbolt 技术,当然也支援了 Optane 记忆体、 vPro 安全机制等。

系统框架层同事要在某些场景(主要是冷启动)将CPU boost到最大频率,保持一段时间,但是当前mtk平台将thermal的优先级高于boost的优先级,需要将驱动层boost节点的优先级提升。

以冷启动boost为例,软件调用流程如下

Kernel 层添加了/proc/ppm/policy/forcelimit_cpu_freq节点。

因为默认proc节点的优先级比较低,低于thermal的优先级,所以添加了高优先级的节点。

Mtk ppm policy驱动的主要结构体是ppm_policy_data

以上就是关于docker读不到cpu数量全部的内容,包括:docker读不到cpu数量、vivo x6plus用mtk boost调CPU内核怎么调、360boost.sys占cpu50%左右,我安装了360和QQ软件管家,请问这是怎么回事回答满意者追加50分。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9456145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存