Known unknowns

eBPF学习实践系列(一) -- 初识eBPF

eBPF学习实践,初步整理学习。 1. 背景 在“TCP半连接全连接(一) – 全连接队列相关过程”这篇文章中,进行了全连接队列溢出的实验,准备后续用eBPF跟踪过程。 eBPF名声在外,之前没用过时简单翻完了《Linux内核观测技术BPF》这本动物书,正好趁这个机会掌握熟悉这个技能,祛魅。 在基本学习eBPF之后尝试用libbpf-bootstrap写跟踪程序,发现还差些火候。先把...

TCP半连接全连接(二) -- 半连接队列代码逻辑

半连接队列相关过程分析及实验,并用工具跟踪。本文先分析半连接相关代码逻辑。 1. 背景 在“TCP半连接全连接(一) – 全连接队列相关过程”这篇文章中,进行了全连接队列溢出的实验,并且遗留了几个问题。 本博客跟踪分析半连接队列相关过程,并探究上述文章中的遗留问题。 半连接队列溢出情况分析,服务端接收具体处理逻辑 内核drop包的时机,以及跟抓包的关系。哪些情况可能会抓不到...

分析某环境中ss结果中Send-Q为0的原因

某个环境中ss结果里的Send-Q为0,跟踪代码分析原因。 1. 背景 上一篇文章(TCP半连接全连接(一) – 全连接队列相关过程)中提到ss结果里的Send-Q是全连接队列的长度,也提到ss和netstat实现有差异。 在某环境中查看信息时,ss -lt发现所有监听端口的Send-Q都是0,本篇文章进行流程跟踪和原因定位。 2. 现象和问题定位 2.1. 现象 找几个环境对比...

TCP半连接全连接(一) -- 全连接队列相关过程

梳理学习TCP建立连接相关过程和全连接队列,结合相关配置进行实验。 1. 背景 最近碰到一个服务端程序处理请求时没有响应的问题,协助尝试定位。初步抓包和ss/netstat定位是服务端一直没对第一次SYN做响应,也能观察到listen队列溢出了。服务端基于python框架,通过多进程进行监听处理。 在另一个环境进行复现后,发现出问题的子进程有连接一直处于CLOSE_WAIT且不响应其他...

行为型设计模式-命令模式

行为型设计模式-命令模式模式示例记录 1. 背景 通过示例(C++)加强对设计模式的体感。 2. 23种设计模式简要说明 这里说明命令模式 3. 命令模式(Command Pattern) 命令模式(Command Pattern)是设计模式中的一种行为型模式,它将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。...

行为型设计模式-策略模式

行为型设计模式-策略模式模式示例记录 1. 背景 通过示例(C++)加强对设计模式的体感。 2. 23种设计模式简要说明 这里说明策略模式 3. 策略模式(Strategy Pattern) 策略模式(Strategy Pattern)是一种行为设计模式,它使你能够定义一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。 策...

行为型设计模式-观察者模式

行为型设计模式-观察者模式示例记录 1. 背景 通过示例(C++)加强对设计模式的体感。 2. 23种设计模式简要说明 这里说明观察者模式 3. 观察者模式(Observer Pattern) 观察者模式(Observer Pattern) 是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 这个主题对象在状态发生变化时,会通知所有依...

创建型设计模式-原型模式

创建型设计模式-原型模式示例记录 1. 背景 最近梳理项目模块代码,其中部分模块和工具涉及一些设计模式,画了一些相关的流程图和草图。重新打开极客时间里设计模式课程,通过示例(C++)加强一些体感。 2. 23种设计模式简要说明 这里说明原型模式 3. 原型模式(Prototype Pattern) 如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同)...