携程容器偶发性超时问题案例分析

C2000 CLA协处理器:嵌入式实时控制性能优化与实战指南 在嵌入式实时控制系统中,主CPU常因高频率、低延迟的控制算法而面临性能瓶颈。为解决此问题,协处理器技术应运而生,它通过硬件并行架构分担计算密集型任务,从而提升系统整体性能。其核心原理在于独立的计算单元与总线设计,能够实现近乎零延迟的响应,这对于电机驱动、数字电源等闭环控制场景具有极高的技术价值。本文聚焦于德州仪器C2000系列微控制器中的控制律加速器(CLA),深入解析其作为独立浮点协处理器如何通过任务调度与消息RAM通信机制,有效实现性能倍增,并提供了从内存配置到代码调试的完整工程实践方案。 阅读详情

随着携程的应用大规模在生产上用容器部署,各种上规模的问题都慢慢浮现,其中比较难定位和解决的就是偶发性超时问题,下面将分析目前为止我们遇到的几种偶发性超时问题以及排查定位过程和解决方法,希望能给遇到同样问题的小伙伴们以启发。

 

问题描述

某一天接到用户报障说,Redis集群有超时现象发生,比较频繁,而访问的QPS也比较低。紧接着,陆续有其他用户也报障Redis访问超时。在这些报障容器所在的宿主机里面,我们猛然发现有之前因为时钟漂移问题升级过内核到4.14.26的宿主机ServerA,心里突然有一丝不详的预感。

 

初步分析

因为现代软件部署结构的复杂性以及网络的不可靠性,我们很难快速定位“connect timout”或“connectreset by peer”之类问题的根因。

历史经验告诉我们,一般比较大范围的超时问题要么和交换机路由器之类的网络设备有关,要么就是底层系统不稳定导致的故障。从报障的情况来看,4.10和4.14的内核都有,而宿主机的机型也涉及到多个批次不同厂家,看上去没头绪,既然没什么好办法那就抓个包看看吧。

图1

 

图2

 

图1是App端容器和宿主机的抓包,图2是Redis端容器和宿主机的抓包。因为APP和Redis都部署在容器里面(图3),所以一个完整请求的包是B->A->C->D,而Redis的回包是D->C->A->B。

 

图3


上面抓包的某一条请求如下:

 

  1. B(图1第二个)的请求时间是21:25:04.846750 #99
  2. 到达A(图1第一个)的时间是21:25:04.846764 #96
  3. 到达C(图2第一个)的时间是21:25:07.432436 #103
  4. 到达D(图2第二个)的时间是21:25:07.432446 #115

 

该请求从D回复如下:

 

  1. D的回复时间是21:25:07.433248 #116
  2. 到达C的时间是21:25:07.433257 #104
  3. 到达A点时间是21:25:05:901108 #121
  4. 到达B的时间是21:25:05:901114 #124

 

从这一条请求的访问链路我们可以发现,B在200ms超时后等不到回包。在21:25:05.055341重传了该包#100,并且可以从C收到重传包的时间#105看出,几乎与#103的请求包同时到达,也就是说该第一次的请求包在网络上被延迟传输了。大致的示意如下图4所示:

图4


从抓包分析来看,宿主机上好像并没有什么问题,故障在网络上。而我们同时在两边宿主机,容器里以及连接宿主机的交换机抓包,就变成了下面图5所示,假设连接A的交换机为E,也就是说A->E这段的网络有问题。

 

图5

 

陷入僵局

尽管发现A->E这段有问题,排查却也就此陷入了僵局,因为影响的宿主机遍布多个IDC,这也让我们排除了网络设备的问题。我们怀疑是否跟宿主机的某些TCP参数有关,比如TSO/GSO,一番测试后发现开启关闭TSO/GSO和修改内核参数对解决问题无效,但同时我们也观察到,从相同IDC里任选一台宿主机Ping有问题的宿主机,百分之几的概率看到很高的响应值,如下图6所示:

 

图6

同一个IDC内如此高的Ping响应延迟,很不正常。而这时DBA告诉我们,他们的某台物理机ServerB也有类似的的问题,Ping延迟很大,SSH上去后明显感觉到有卡顿,这无疑给我们解决问题带来了希望,但又更加迷惑:

 

  1. 延迟好像跟内核版本没有关系,3.10,4.10,4.14的三个版本内核看上去都有这种问题。
  2. 延迟和容器无关,因为延迟都在宿主机上到连接宿主机的交换机上发现的。
  3. ServerB跟ServerA虽然表现一样,但细节上看有区别,我们的宿主机在重启后基本上都能恢复一段时间后再复现延迟,但ServerB重启也无效。

 

由此我们判断ServerA和ServerB的症状并不是同一个问题,并让ServerB先升级固件看看。在升级固件后ServerB恢复了正常,那么我们的宿主机是不是也可以靠升级固件修复呢?答案是并没有。升级固件后没过几天,延迟的问题又出现了。

 

意外发现

回过头来看之前为了排查Skylake时钟漂移问题的ServerA,上面一直有个简单的程序在运行,来统计时间漂移的值,将时间差记到文件中。当时这个程序是为了验证时钟漂移问题是否修复,如图7:

 

图7

 

这个程序跑在宿主机上,每个机器各有差异,但正常的时间差应该是100us以内,但1个多月后,时间差异越来越大,如图8,最大能达到几百毫秒以上。这告诉我们可能通过这无意中的log来找到根因,而且验证了上面3的这个猜想,宿主机是运行一段时间后逐渐出问题,表现为第一次打点到第二次打点之间,调度会自动delay第二次打点。

图8

TSC和Perf

Turbostat是intel开发的,用来查看CPU状态以及睿频的工具,同样可以用来查看TSC的频率。而关于TSC,之前的文章《携程一次Redis迁移容器后Slowlog“异常”分析》中有过相关介绍,这里就不再展开。

 

在有问题的宿主机上,TSC并不是恒定的,如图9所示,这个跟相关资料有出入,当然我们分析更可能的原因是,turbostat两次去取TSC的时候,被内核调度delay了,如果第一次取时被delay导致取的结果比实际TSC的值要小,而如果第二次取时被delay会导致取的结果比实际要大。

图9

Perf是内置于Linux上的基于采样的性能分析工具,一般随着内核一起编译出来,具体的用法可以搜索相关资料,这里也不展开。用perf sched record -a sleep 60和perf sched latency -s max来查看Linux的调度延迟,发现最大能录得超过1s的延迟,如图10和图11所示。用户态的进程有时因为CPU隔离和代码问题导致比较大的延迟还好理解,但这些进程都是内核态的。尽管Linux的CFS调度并非实时的调度,但在负载很低的情况下超过1s的调度延迟也是匪夷所思的。

 

图10

 

图11

根据之前的打点信息和Turbostat以及Perf的数据,我们非常有理由怀疑是内核的调度有问题,这样我们就用基于RDTSCP指令更精准地来获取TSC值来检测CPU是否卡顿。RDTSCP指令不仅可以获得当前TSC的值,并且可以得到对应的CPU ID。如图12所示:

图12

上面的程序编译后,放在宿主机上依次绑核执行,我们发现在问题的宿主机上可以打印出比较大的TSC的值。每间隔100ms去取TSC的值,将获得的相减,在正常的宿主机上它的值应该跟CPU的TSC紧密相关,比如我们的宿主机上TSC是1.7GHZ的频率,那么0.1s它的累加值应该是170000000,正常获得的值应该是比170000000多一点,图13的第五条的值本身就说明了该宿主机的调度延迟在2s以上。

图13

真相大白

通过上面的检测手段,可以比较轻松地定位问题所在,但还是找不到根本原因。这时我们突然想起来,线上Redis大规模使用宿主机的内核4.14.67并没有类似的延迟,因此我们怀疑这种延迟问题是在4.14.26到4.14.67之间的bugfix修复掉了。

 

查看commit记录,先二分查找大版本,再将怀疑的点单独拎出来patch测试,终于发现了这个4.14.36-4.14.37之间的(图14)commit:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v4.14.37&id=b8d4055372b58aad4a51b67e176eabdcc238fde3。

 

图14

从该commit的内容来看,修复了无效的apic id会导致possible CPU个数不正确的情况,那么什么是x2apic呢?什么又是possible CPU?怎么就导致了调度的延迟呢?

 

说到x2apic,就必须先知道apic,翻查网上的资料就发现,apic全称Local Advanced ProgrammableInterrupt Controller,是一种负责接收和发送中断的芯片,集成在CPU内部,每个CPU有一个属于自己的local apic。它们通过apic id进行区分。而x2apic是apic的增强版本,将apic id扩充到32位,理论上支持2^32-1个CPU。简单的说,操作系统通过apic id来确定CPU的个数。

 

而possible CPU则是内核为了支持CPU热插拔特性,在开机时一次载入,相应的就有online,offline CPU等,通过修改/sys/devices/system/cpu/cpu9/online可以动态关闭或打开一个CPU,但所有的CPU个数就是possible CPU,后续不再修改。

 

该commit指出,因为没有忽略apic id为0xffffffff的值,导致possible CPU不正确。此commit看上去跟我们的延迟问题找不到关联,我们也曾向该issue的提交者请教调度延迟的问题,对方也不清楚,只是表示在自己环境只能复现possible CPU增加4倍,vmstat的运行时间增加16倍。

 

这时我们查看有问题的宿主机CPU信息,奇怪的事情发生了,如图15所示,12核的机器上possbile CPU居然是235个,而其中12-235个是offline状态,也就是说真正工作的只有12个,这么说好像还是跟延迟没有关系。

 

图15

继续深入研究possbile CPU,我们发现了一些端倪。从内核代码来看,引用for_each_possible_cpu()这个函数的有600多处,遍布各个内核子模块,其中关键的核心模块比如vmstat,shed,以及loadavg等都有对它的大量调用。而这个函数的逻辑也很简单,就是遍历所有的possible CPU,那么对于12核的机器,它的执行时间是正常宿主机执行时间的将近20倍!该commit的作者也指出太多的CPU会浪费向量空间并导致BUG(https://lkml.org/lkml/2018/5/2/115),而BUG就是调度系统的缓慢延迟。


以下图16,图17是对相同机型相同厂商的两台空负载宿主机的kubelet的Perf数据(perf stat -p $pid sleep 60),图16是uptime 2天的,而图17是uptime 89天的。

 

图16

图17

我们一眼就看出图16的宿主机不正常,因为无论是CPU的消耗,上下文的切换速度,指令周期,都远劣于图17的宿主机,并且还在持续恶化,这就是宿主机延迟的根本原因。而图17宿主机恰恰只是图16的宿主机打上图14的patch后的内核,可以看到,possible CPU恢复正常(图18),至此超时问题的排查告一段落。

图18

小结

我们排查发现,不是所有的宿主机,所有的内核都在此BUG的影响范围内,具体来说4.10(之前的有可能会有影响,但我们没有类似的内核,无法测试)-4.14.37(因为是stable分支,所以Master分支可能更靠后)的内核,CPU为skylake及以后型号的某些厂商的机型会触发这个BUG。

确认是否受影响也比较简单,查看possible CPU是否是真实CPU即可。

 

问题再现

随着内核升级到4.14.67,看上去延迟的问题彻底解决了,然而并没有,只是出现的更加缓慢。几周后,超时报障又找了过来,我们用Perf来分析,发现了一些异常。

如图19所示是一个空负载的宿主机升级内核后8天的Perf的数据,明显可以看到kworker的max delay已经100ms+,而这次有规律的是,延迟比较大的都是最后四个核,对于12核的节点就是8-11,并且都是同一D厂的宿主机。而上篇中使用新内核后用来验证解决问题的却不是D厂的宿主机,也就是说除了内核,还有其他的因素导致了延迟。

 

图19

NUMA和CPU亲和性绑定

NUMA全称Non-Uniform Memory Access,NUMA服务器一般有多个节点,每个节点由多个CPU组成,并且具有独立的本地内存,节点内部使用共有的内存控制器,节点之间是通过内部互联(如QPI)进行通信。

 

然而,访问本地内存的速度远远高于访问其他节点的远地内存的速度,通常有几十倍的性能差异,这也正是NUMA名称的由来。因为NUMA的这个特性,为了更好地发挥系统性能,应用程序应该尽量减少不同节点CPU之间的信息交互。

 

无意中发现,D厂的机型与其他机型的NUMA配置不一样。假设12核的机型,D厂的机型NUMA节点分配如下图20所示:

 

图20

而其他厂家的机型NUMA节点分配如下图21所示:

图21

为什么会出现delay都是最后四个核上的进程呢?

 

经过深入排查才发现,原来相关同事之前为了让Kubernetes的相关进程和普通的用户的进程相隔离,设置了CPU的亲和性,让Kubernetes的相关进程绑定到宿主机的最后四个核上,用户的进程绑定到其他的核上,但后面这一步并没有生效。

还是拿12核的例子来说,上面的Kubernetes是绑定到8-11核,但用户的进程还是工作在0-11核上,更重要的是,最后4个核在遇到D厂家的这种机型时,实际上是跨NUMA绑定,导致了延迟越来越高,而用户进程运行在相关的核上就会导致超时等各种故障。

确定问题后,解决起来就简单了。将所有宿主机的绑核去掉,延迟就消失了,以下图4是D厂的机型去掉绑核后开机26天Perf的调度延迟,从数据上看一切都恢复正常。

 

图22

新的问题

大约过了几个月,又有新的超时问题找到我们。有了之前的排查经验,我们觉得这次肯定能很轻易的定位到问题,然而现实无情地给予了我们当头一棒,4.14.67内核的宿主机,还是有大量无规律超时。


深入分析

Perf看调度延迟,如图23所示,调度延迟比较大但并没有集中在最后四个核上,完全无规律,同样Turbostat依然观察到TSC的频率在跳动。

图23

在各种猜想和验证都被一一证否后,我们开始挨个排除来做测试:

  1. 我们将某台A宿主机实例迁移走,Perf看上去恢复了正常,而将实例迁移回来,延迟又出现了。
  2. 另外一台B宿主机上,我们发现即使将所有的实例都清空,Perf依然能录得比较高的延迟。
  3. 而与B相连编号同一机型的C宿主机迁移完实例后重启,Perf恢复正常。这时候看B的TOP,只有一个kubelet在消耗CPU,将这台宿主机上的kubelet停掉,Perf正常,开启kubelet后,问题又依旧。

 

这样我们基本可以确定kubelet的某些行为导致了宿主机卡顿和实例超时,对比正常/非正常的宿主机kubelet日志,每秒钟都在获取所有实例的监控信息,在非正常的宿主机上,会打印以下的日志。如图24所示:

 

图24

 

而在正常的宿主机上没有该日志或者该时间比较短,如图25所示:

图25

到这里,我们怀疑这些LOG的行为可能指向了问题的根源。查看Kubernetes代码,可以知道在获取时间超过指定值longHousekeeping (100ms)后,Kubernetes会记录这一行为,而updateStats即获取本地的一些监控数据,如图26代码所示:

图26

在网上搜索相关issue,问题指向cAdvisor的消耗CPU过高:

  • https://github.com/kubernetes/kubernetes/issues/15644
  • https://github.com/google/cadvisor/issues/1498

 

而在某个issue中指出(https://github.com/google/cadvisor/issues/1774):echo2 > /proc/sys/vm/drop_caches

 

可以暂时解决这种问题。我们尝试在有问题的机器上执行清除缓存的指令,超时问题就消失了,如图27所示。而从根本上解决这个问题,还是要减少取Metrics的频率,比较耗时的Metrics干脆不取或者完全隔离Kubernetes的进程和用户进程才可以。

图27

硬件故障

在排查cAdvisor导致的延迟的过程中,还发现一部分用户报障的超时,并不是cAdvisor导致的,主要表现在没有Housekeeping的日志,并且Perf结果看上去完全正常,说明没有调度方面的延迟,但从TSC的获取上还是能观察到异常。

 

由此我们怀疑这是另一种全新的故障,最重要的是我们将某台宿主机所有业务完全迁移掉,并关闭所有可以关闭的进程,只保留内核的进程后,TSC依然不正常并伴随肉眼可见的卡顿,而这种现象跟之前DBA那台物理机卡顿的问题很相似,这告诉我们很有可能是硬件方面的问题。

从以往的排障经验来看,TSC抖动程度对于我们排查宿主机是否稳定有重要的参考作用。这时我们决定将TSC的检测程序做成一个系统服务,每100ms去取一次系统的TSC值,将TSC的差值大于指定值打印到日志中,并采集单位时间的异常条目数和最大TSC差值,放在监控系统上,来观察异常的规律。如图28所示。

图28

这样采集有几个好处:

  1. 程序消耗比较小,仅仅消耗几个CPU cycles的时间,完全可以忽略不计;
  2. 对于正常的宿主机,该日志始终为空;
  3. 对于有异常的宿主机,因为采集力度足够小,可以很清晰地定位到异常的时间点,这样对于宿主机偶尔抖动情况也能采集到。

 

恰好TSC检测的服务上线不久,一次明显的故障说明了它检测宿主机是否稳定的有效性。如图29,在某日8点多时,一台宿主机TSC突然升高,与应用的告警邮件和用户报障同一时刻到来。如图30所示:

 

图29

 

图30

将采集的日志这样展示后,我们一眼就发现问题都集中在某几批次的同一厂商的宿主机上,并且我们找到之前DBA卡顿的物理机,也是这几批次中的一台。我们收集了几台宿主机的日志详情,反馈给厂商后,确认是硬件故障,无规律并且随时可能触发,需升级BIOS,如图31厂商技术人员答复的邮件所示,至此问题得到最终解决。

图31

总结

本篇文章基本上描述了我们遇到的容器偶发性超时问题分析的大部分过程,但排障过程远比写出来要艰难。

总的原则还是大胆假设,小心求证,设法找到无规律中的规律性,保持细致耐心的钻研精神,相信这些疑难杂症终会被一一解决。

【ComfyUI】SD1.5 + ControlNet 边缘检测融合动漫转真人 本文介绍了一个基于ComfyUI的动漫转真人图像生成工作流,通过多模型协同实现高质量的二次元图像转换。该工作流集成了Canny线稿预处理、ControlNet结构控制、VAE编码解码和人脸精细化处理等核心环节,采用majicmixRealistic_v7作为主模型,配合yolov8、SAM等辅助模型。整个流程包含11个标准化步骤,从图像输入、预处理到最终超分输出,通过ControlNet引导和CLIP语义控制确保生成图像的写实感和结构准确性,特别针对人脸区域进行专业优化,最终可输出高分辨率写实人像。 阅读详情

相关推荐

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 529

connection reset by peer问题解决

        前段时间接手一个老项目,在观察项目日志时发现经常会出现connection reset by peer的错误,字面上理解就是网络连接重置,从而导致请求中断。要想解决问题首先要明白出现问题的原因,reset产生的原因这里就不在叙述,网上有很多这方面的文章,大家可以自行阅读。   &nb...

xiaoming的博客 8110

【专业书1】量化交易——从入门到精通

股票季节性策略几乎失效了,但商品期货的仍有效,因为其季节性需求源于真实的经济需求而非投机。交易策略获利的前提:交易价格处于均值回归(低价时买入)或动量状态(降价时先做空后以更低价买入),否则在随机游走状态下是无法有效交易的。构建交易策略实际上是在决定:在特殊条件、特定时间尺度下价格趋势的呈现(均值回归/趋势走势),以及用什么价格作为初始判断的参考价格。如果以高夏普比率为目标,需要更高的交易频率:基于大数定律,押注越多,偏离均值收益的偏差就越小。买同比最好的股票,卖同比最差的股票。但在不同的时间尺度下可以。

weixin_44589682的博客 1552

干货 | 携程容器偶发性超时问题案例分析(一)

作者简介李剑,携程系统研发部技术专家,负责Redis和Mongodb的容器化和服务化工作,喜欢深入分析系统疑难杂症。前言随着携程的应用大规模在生产上用容器部署,各种上规模的问题都慢慢浮现,其中比较难定位和解决的就是偶发性超时问题,下面将分析目前为止我们遇到的几种偶发性超时问题以及排查定位过程和解决方法,希望能给遇到同样问题的小伙伴们以启发。问题描述某一天接到用户报障说,Redis集群有超时现象发生...

携程技术 1592

手把手教你用HI3516CV610搭建智能安防摄像头(附完整开发资料)

本文详细介绍了基于海思HI3516CV610 SOC搭建智能安防摄像头的完整开发流程,包括硬件选型、系统架构设计、开发环境搭建、智能分析功能开发及系统调优。通过实战案例,展示了如何利用内置NPU实现人形检测和异常行为分析,并提供了量产测试方案,帮助开发者快速完成智能摄像头项目。

backprop5master的博客 545

C# NX二次开发:两种过滤器设置方案的实战解析与场景适配

本文深入解析C# NX二次开发中的两种过滤器设置方案:AddFilterHandler回调与MaskTriple属性设置。通过实战案例对比其性能差异与适用场景,帮助开发者根据需求选择最优方案,提升NX插件开发效率与交互体验。特别针对BlockStyler集成场景提供专业建议,是NX二次开发者的实用指南。

weixin_33739646的博客 845

应用程序偶发超时的排查案例

问题现象 有一个应用,偶尔会出现访问不了的情况。具体表现为,当其它应用调用它的接口时,可能会出现超时,过一段时间后,再调用它的接口可能又正常了。为了判断这个接口超时是否因为连接数据库的原因,单独写了个程序,不连接数据库,单纯返回字符串给前端,数小时后访问,果然不会出现超时。。。。这一步,排除了用户端和应用层的网络连接是正常的 接着,我们在应用程序中增加了数据库连接查询,使用简易的,绝对不会产生耗时的sql语句查询,第一次访问正常, (原本的程序可能处理异常的原因,接口不会抛出异常,为使得能在每次在触发数据库

weixin_39512482的博客 2515

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入探讨了SAP CO模块中KKA2和CJ88结果分析码在项目收入成本匹配中的高阶应用。通过真实案例解析,详细介绍了这两种分析码在分阶段收入确认和终验法项目中的配置技巧与实战经验,帮助财务人员高效解决复杂业务场景下的财务数据处理难题。

weixin_29230773的博客 170

神秘的偶发服务超时,原因可能是那些坏邻居

恶邻A君 唯品会在服务化体系改造的初期,一个对延时敏感的应用,偶然会发生一些超时,事发当时zabbix分钟级监控,dstat秒级监控的服务器指标都正常,应用,数据库,缓存,网络也正常,那这是为什么呢? 某天脑洞大开,把怀疑的目光投向了在后台运行日志收集程序Flume,发现它的GC运行得比较狂野,于是对它的GC线程数做了限制: 修改前:15分钟内, 大于30ms的业务调用173次, 大于5...

ff00yo的博客 708

CentOS7安装openGauss5.0.2LTS版本

该文档要根据自己的实际情况调整ip地址。要根据自己的实际网卡调整。

superhanyubo的专栏 2580

Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 01

在主控类中绑定登录类的信号 void signalLoginOK() ,跳过验证步骤,先实现页面的跳转MyChatToolClient.h文件//登录成功槽函数 private :MyChatToolClient.cpp文件} //登录成功槽函数 void MyChatToolClient :: slotLoginOk() {//关闭登录窗口并释放空间 m_loginWin -> close();//新建并打开聊天窗口 m_chatWin = new ChatWindow;

Leo的博客 1875

干货 | 携程容器偶发性超时问题案例分析(二)

作者简介李剑,携程系统研发部技术专家,负责Redis和Mongodb的容器化和服务化工作,喜欢深入分析系统疑难杂症。周昕毅,携程系统研发部云平台高级研发经理。现负责携程容器云平台运维,Cloud Storage及Cloud Network基础设施研发及运维。前言随着内核升级到4.14.67,看上去延迟的问题彻底解决了,然而并没有,只是出现的更加缓慢。几周后,超时报障又找了过来,我们用perf来分析...

携程技术 1144

基于毫米波生物感知雷达+STM32设计的独居老人居家监护系统(微信小程序)(192)

当前基于STM32设计的独居老人居家监护系统为独居老人提供一种简便、实时的健康监护服务。该系统通过集成多种传感器和功能模块,能够实时监测老人的生理指标、姿态以及室内环境状况,并通过微信小程序远程显示数据,当出现异常情况时及时发出报警提醒。

1万+

linux卡顿问题排查_携程容器偶发性超时问题案例分析

随着携程的应用大规模在生产上用容器部署,各种上规模的问题都慢慢浮现,其中比较难定位和解决的就是偶发性超时问题,下面将分析目前为止我们遇到的几种偶发性超时问题以及排查定位过程和解决方法,希望能给遇到同样问题的小伙伴们以启发。问题描述某一天接到用户报障说,Redis集群有超时现象发生,比较频繁,而访问的QPS也比较低。紧接着,陆续有其他用户也报障Redis访问超时。在这些报障容器所在的宿主机...

weixin_31499265的博客 488

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

linux卡顿问题排查_携程容器偶发性超时问题案例分析(一)

前言随着携程的应用大规模在生产上用容器部署,各种上规模的问题都慢慢浮现,其中比较难定位和解决的就是偶发性超时问题,下面将分析目前为止我们遇到的几种偶发性超时问题以及排查定位过程和解决方法,希望能给遇到同样问题的小伙伴们以启发。问题描述某一天接到用户报障说,Redis集群有超时现象发生,比较频繁,而访问的QPS也比较低。紧接着,陆续有其他用户也报障Redis访问超时。在这些报障容器所在的宿主机里面,...

weixin_28989357的博客 260

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

容器内部时间比宿主机玩八个小时_携程容器偶发性超时问题案例

前言随着携程的应用大规模在生产上用容器部署,各种上规模的问题都慢慢浮现,其中比较难定位和解决的就是偶发性超时问题,下面将分析目前为止我们遇到的几种偶发性超时问题以及排查定位过程和解决方法,希望能给遇到同样问题的小伙伴们以启发。问题描述某一天接到用户报障说,Redis集群有超时现象发生,比较频繁,而访问的QPS也比较低。紧接着,陆续有其他用户也报障Redis访问超时。在这些报障容器所在的宿主机里面,...

weixin_42469083的博客 139

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

干货 | 计算密集型服务的负载均衡策略

作者简介罗茂林,携程国际机票后台研发总监,主要负责国际机票引擎的研发工作。致力于系统性能优化和研发效率提升。一般情况下,在计算密集型服务中,即使处理单个请求也需要使用到服务器的所有CP...

携程技术 1182

100篇你值得收藏的K8s干货文章

K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点击下方...

Docker的专栏 4533

K8s相关文章

转载,来自于https://blog.youkuaiyun.com/weixin_45186298/article/details/122910459?spm=1001.2014.3001.5502 基础 使用Kubernetes最常犯的10个错误15个用于Kubernetes监控、安全、部署的工具升级Kubernetes 1.18前,你不得不知的9件事动图展示10大Git命令给技术经理的Kube

D的博客 201

性能测试如何定位瓶颈?偶发超时?看高手如何快速排查问题

作者 |张奇(司楚)当线上碰到头疼的问题时,还在对着代码一行行的看?真的不太时髦了啊喂~俗话说的好 “问题排查不用愁,Arthas 来帮您忙。” 今天就来说说这个让妈妈再也不用担心我...

ITMuch的专栏 948

知道吗?容器镜像也可以延迟拉取!

更多精彩内容欢迎订阅我的博客:https://fuckcloudnative.io/在容器的整个生命周期中,拉取镜像是最耗时的步骤之一。Harter 等人的研究[1]表明:拉取镜像占用了...

云原生实验室 954

《如果面试时大家都说真话》太真实了!!!!

面试官:你好,这是你面试的第一家公司吗? 程序员小王:当然不是啦,面了30多家,都不要我。 面试官:哦哦哦,没事,我们面试了50多个,1个都不愿意来呢。你简历上写的5年Java开发经验… 程序员小王:大学编程设计也算进去了,全靠同学我划水!实际上工作不到3年… 面试官:曾参与主导十万级以上用户的中大型项目研发… 程序员小王:之前公司负责一个政府外包项目,我提了一丁点儿意见… 面试官:精...

JavaAOE的博客 1327

从一道面试题谈谈一线大厂码农应该具备的基本能力,修改版

关于一线码农的面试,我想说 求职面试在绝大部分人来说都是必不可少的,自己作为求职者也参与了不少面试(无论成功或者失败),作为技术面试官参与面试也有四五年的经验,在面试过程中也见识到了各种各样的人(有厉害的,也有奇葩的)。在这里也只想谈谈自己的一些看法,我说的不一定对,有不同的意见可以留言参与讨论。 面试本来就是一个双向选择的过程,面试官和候选人的地位本应该是一个平等的位置,面试官希望通过简单的交流沟通可以对候选人的技术,沟通等有一定了解进而确定候选人是否匹配相应的职位。个人认为一场成功的面试最好是能够让

JavaAOE的博客 1204

微服务:这是迄今为止写的最全的一篇,不用想的太难

前言 世界上或许没有技术驱动的公司,但有了技术的驱动,公司才会更加高效地解决掉一个又一个业务难题。在这些技术当中,微服务,是不得不提的。 最近几年,微服务可谓是大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理...

JavaAOE的博客 1021

阿里P8架构师精心整理的Nginx入门到实战篇,Java开发者福音

前言 Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,ng...

JavaAOE的博客 764

程序员视频面试临场发挥?不如刷完这些面试题再找工作吧

本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖: Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等技术栈…… 希望大家都能找到适合自己的公司,开开心心的撸代码 由于题量较多,篇幅的限制,文章中...

JavaAOE的博客 734
上一篇: 面试官:让你实现一个秒杀系统,你会怎么设计?
下一篇: docker/docker-compose常用命令与配置
JavaAOE
博客等级 码龄7年 27粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值