自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(256)
  • 资源 (10)
  • 收藏
  • 关注

原创 频繁oomkill引发的hungtask

Pod的flow进程在写IO时进getblk(),等待可用的内存,只有拿到足够内存,才能完成ext4_journal_stop()将t_updates 递减,其对应的内核Journal线程才能被唤醒,但是由于该pod的内存占用已经达到了其运行使用的上限,且无可回收的内存,导致进程触发了pod所在memory cgroup oom,但是由于引起oom的进程因为申请不到足够的内存无法从getblk()函数里退出到do_signal触发oom,kill收到信号杀死进程释放内存,最终引起了死环。

2024-02-15 17:00:37 374

原创 内核hungTask日志引发的思考,为什么进程变成了TASK_UNINTERRUPTIBLE

当我们的进程变成了D状态,收不到任何信号了,不要慌,去使用去查看调用栈,然后再去读内核源码,就可以找到背后的真相。

2024-02-02 12:20:24 391

原创 linux内核进程调度

这是一段关于的一段读书笔记什么是进程调度?进程调度是linux 内核的一个子系统,它主要负责辅助内核决策,哪个可运行状态的进程应该被调度,以及要占用多少时间片。也就是说进程调度就是在可运行态进程之间分配优先处理器时间资源的内核子系统。

2024-01-19 10:05:56 913

原创 谁是linux SIGKILL的凶手---linux审计日志排障的杀手锏

使用strace 只可以捕获客捕捉的信号,当我们使用不可捕捉信号的时候strace 就已经回天乏术了在没有ebpf 的情况下,我们可以使用strace 找到相关系统调用,然后进一步使用审计日志,找到问题出现的根源,从而解决问题。

2024-01-09 00:48:36 630

原创 日志采集nfs挂载的问题分析

Docker 采集器目录映射赢得linux 内核的UnionFs,UnionFs 会形成一层cache 目录,去把容器中的文件,联合挂载到本机文件里,比如说。但是当我去采集容器内日志的时候发现nfs 文件并没有,nfs 文件挂载位置在。nfs 是作为一个单独模块运行的,与hostpath 不一样,所以说需要去。这个目录并不在UnionFs 路径下,于是我看K8s 源码。pkg/volume/nfs/nfs.go下面。

2024-01-02 18:11:50 410

原创 kubernetes集群搭建ES

【代码】集群搭建ES。

2023-11-29 10:31:57 403

原创 K8S集群中PLEG问题排查

k8s集群排障真的很麻烦今天集群有同事找我,节点报 PLEG is not healthy 集群中有的节点出现了NotReady,这是什么原因呢?

2023-11-28 15:35:58 1188

原创 Linux内核中的overlay文件系统

Docker 内核实现容器的功能用了linux 内核中的三个特性 Namespace、Cgroup、UnionFs,今天我们来说一下UnionFs。linux UnionFs 实现的是overlay 文件系统OverlayFs 文件系统分为三层,lower 是只读层Upper 是可读写Merged 是 lower 和Upper 合并的目录。

2023-11-25 22:09:28 1529

原创 深入解析docker内核网桥

Docker 创建网桥和Veth设备都是通过AF_NETLINK 套接字实现的,我需要去读 <精通linux内核网络>这本书去调研一下。

2023-10-22 22:31:18 679

原创 linux 内核中的pid和前缀树

写这个文章的初衷是因为今天手写了一个字典树,然后写字典树以后忽然想到了之前看的技术文章,linux kernel 之前的pid 申请方式已经从 bitmap 变成了 基数树,所以打算写文章再回顾一下这种数据结构算法。这里我发现了一个问题,linux 最大的pid 是 0x8000 而不是 0xFFFF,这是为了和老的内核兼容,我们可以通过。旧的内核中pid的申请就不多说了,是使用的是bitmap去实现的,新版的换为了基数树。上面的start 就应该是要申请的pid,我们最后看next_index。

2023-10-15 23:23:44 360

原创 使用ebpf 监控linux内核中的nat转换

Linux NAT(Network Address Translation)转换是一种网络技术,用于将一个或多个私有网络内的IP地址转换为一个公共的IP地址,以便与互联网通信。在k8s业务场景中,业务组件之间的关系十分复杂.由于 Kubernetes 的网络模型假设Pod之间访问时使用的是对方Pod 的实际地址,所以一个Pod内部的应用程序看到的自己的IP地址和端口与集群内其他Pod看到的一样。它们都是Pod实际分配的IP地址。

2023-10-06 15:30:55 219

原创 java 中没有主清单属性 问题解决

查原因 打开 jar,文件,发现里面并没有把web包打进去,于是追 查原因。发现把mainClass 打包skip掉了,去掉skip,运行正常。今天用java 做了一个小项目,使用java 的mvn进行打包。

2023-08-25 13:49:51 166

原创 Envoy 物联网模块开发---串口服务器 (一)

最近业余时间想基于Envoy 开发一个串口网关,主要是想把一些 modbus、bacnet 以及 mqtt 等物联网协议接入Envoy中,当读到串口数据后可以转发成对应的网络协议。

2023-05-29 21:44:50 1112

原创 linux的namespace实战,我们在k8s中切换到另一个namespace

我们有时候做中间件会遇到以下场景这种场景适应于 Docker 以及K8s 等等场景,但是linux 内对多个进程进行了隔离,大家都是用不同的namespace,每个namespace都是弱隔离的,他隔离了不同容器的net namespace 和 mount namespace。当我们做基础架构中间件的时候需要从 namespace 去切换到不同的namespace里,去读取他们的一些网络信息和 文件信息,这就需要我们去切换 net namespace 和 mount namespace。

2023-05-27 11:43:13 823

原创 一次关于Docker buildx 跨平台打包问题的排查

发现打包的镜像在arm里并没有正常运行,除了主程序,容器里ls 一类的工具一运行就出现。根本原因不是很清楚,但是排查思路是要看打包日志观察问题解决。发现buster-slim只编译了amd64。arm和amd64都做了打包。

2023-05-26 16:24:08 526

原创 知识点差缺补漏

git rebase -i 分支 rebase 某分支。

2023-05-17 18:00:22 118

原创 互联网的隐匿法则

今天写一篇文章说一下互联网安全的隐匿法则我们很多时候访问网络,都会留下痕迹,这个痕迹就是我们的ip地址,今天说一下怎么隐匿自己的ip这时候对面的服务器会显示我们的真实ip地址,其实如果对方知道我们的真实ip地址,我们的身份就已经暴露在了对方的视野里,这时候是很容易定位到我们位于省市国家,进而通过移动连通定位到我们小区的具体楼层,从而定位到我们的住处。为了安全上网。今天说一下怎么隐匿行踪。

2023-05-07 22:42:16 342

原创 supervisor 用其他用户启动

sudo userdel tg-bot-apisudo useradd tg-bot-api -m -d /home/tg-bot-api/ -s /bin/bash[program:telegram-bot-api]user=tg-bot-apidirectory=/home/tg-bot-apiautorestart=truestdout_logfile=/var/log/tg-bot-api.logstderr_logfile=/var/log/tg-bot-api.log.errcommand=/h

2023-04-30 10:24:32 232

原创 FRP 内网穿透,绕过防火墙控制内网机器

内网穿透,端口映射技术是一门十分古老的技术,他一直是一把双刃剑,可以绕过防火墙入侵目标服务器,也可以方便我们运维,工作。早年的lcx 或者portmap都是比较老的工具了,frp这个工具比之前的lcx或者portmap都好用,下面介绍一下这个工具。实验环境介绍(原理也是这样):一、启动远端Listener在远端开一台主机,运行frpcs 监听7000端口[common]bind_port = 7000dashboard_user = admin #控制

2023-04-22 17:17:30 810

原创 envoy-filter-example

由于envoy的不断迭代,估计envoy-filter-example的更新迭代并没有跟上,于是出现了这个错误。最近学习开发envoy扩展,希望给envoy加一些功能,但是出现一个错误。

2023-04-03 10:27:31 205

原创 HTTP2RFC 笔记整理

相似的,终端接收到带有END_STREAM标记设置的数据DATA帧之后的任何帧,或在带有END_STREAM终止流标记且后面没有延续CONTINUATION帧的报头HEADERS帧之后收到任何帧都必须作为类型为流关闭STREAM_CLOSED的连接错误(章节5.4.1)处理。发送流错误的终端应当首先发送一个超时(GOAWAY)帧(章节6.8),并带有最近的一个成功从对等端接收帧的流的标识符。帧类型定义了剩余的帧报头和帧主体将如何被解释。0的值阻止了新的流的创建,另外它也适用于被激活的流用尽的任何限制。

2023-03-30 16:38:34 453

原创 Centos搭建k8s

默认default,kubernetes用的是k8s.io。启动kubelet。注意,如果此时查看kubelet的状态,他会无限重启,等待接收集群命令,和初始化。如果下面命令失败,可从上一节"初始化master结点"从头再来。如果init失败,可以"kubeadm reset --force"后再次尝试。,用户可在iptables和eBPF之间选择,默认是iptables。初始化master,成功将输出“初始化worker结点”的命令。已指出,在安装pod网络插件之前,coredns不会启动。

2023-03-30 12:55:39 1316

原创 使用ebpf 监控golang 应用

使用ebpf 监控grpc-go的应用,grpc-go http2 client的处理点运行流程:我们在 uprobe__probe_http2_client_operate_headers 里做一些处理,统计grpc的数据,进行遥测。编写代码过程中我们需要关注的一些事情。

2023-03-20 16:40:47 1443 3

原创 Kubernetes集群搭建

注意:[官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network)已指出,在安装pod网络插件之前,coredns不会启动。[kubeadm官方文档](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)

2023-02-02 17:16:17 332

原创 使用ebpf 监控mysqld 内核

我们使用ebpf 监控mysql的话有两个思路去做这件事情1、kprobe -> hook 掉tcp_sendmsg 和 tcp_recvmsg 一类的内核函数去分析网络协议2、uprobe -> hook 掉 mysqld 的api函数,然后在此基础上进行统计。

2023-01-24 13:51:00 1663 1

原创 ebpf 网络过滤器实践

ebpf 网络过滤器的实践

2022-12-18 23:13:21 851

原创 资料库的webrtc文件传输

一个简单的事情往往会倾注你的心血,也许你看到很简单往往其实没那么简单;其实想想今年业余时间的大把代码,真正能成品的好像并不多。马上年底了,写下这篇文章。每一行程序就像写小说一样,不管好不好;代码都倾注了我的心血。webrtc演示网址:文件下载测试把数据存储到百度网盘上大该有半年时间,后来发现了一些致命的问题1、发现分享外链到了10几万条之后就不能分享了2、分享的百度外链经常会被屏蔽掉3、分享速度不能过快,1小时只能分享100多条外链,如果分享的过快整个网盘的分享功能都会4、百度账号需要实名认证,很容易被人认

2022-12-04 01:25:20 1637 2

原创 关于ebpf 的co-re

底层库依靠的是libbpfkernel代码include/uapi/linux/bpf.h解释了`CO-RE`的原理。clang有内置标记`__attribute__((preserve_access_index))`(等效于`__builtin_preserve_access_index`)。ebpf.c代码这样标记所有它需要访问的结构体。clang在对象ELF文件ebpf.o中为每个这样的访问生成一个`bpf_core_relo`。

2022-11-21 19:36:41 1125 2

原创 datadog ebpf模块 offset-guess.o 问题排查解决

offset-guess.o 模块是偏移量猜想的一个模块,我估计datadog这么做的原因是处于linux内核兼容性的原因,但是这种兼容性的代码为什么会在这里出现问题呢?定位到出问题的文件是/opt/datadog-agent/embedded/share/system-probe/ebpf/offset-guess.o。我安装的是clang-14,所以我需要把/usr/bin下面的clang 替换为和我的主机兼容的。我是ubuntu系统,所以我只需要安装和我主机兼容的clang 和llvm版本就行了。

2022-11-04 16:09:31 551

原创 如何使用c语言开发ebpf程序

最近开始陆续负责ebpf相关的项目,于是对ebpf相关知识内容进行复习。ebpf的优势是避免了痛苦的kernel开发工作,如果没有ebpf之前,我们如果想做内核可视化,必须要开发kernel的驱动,但是如果我们有了ebpf,开发的程序就可以很好的和kernel隔离开,避免了kernel的崩坏。开发ebpf程序你需要掌握哪些知识1、linux 内核相关的知识2、掌握常用的ebpf 工具3、熟悉libbpf4、有一定c语言开发功底。

2022-10-28 01:04:17 1415 2

原创 c++ 巧妙的字节编码转换设计

业余时间写一些程序,想用c++ 设计一些字节转换功能函数,参考了envoy 中的设计。设计的非常巧妙,这样就可以很潇洒的做到大小端转化了,比自己用c去写宏定义简洁了很多。::from ::to会传入不同类型的变量,从而触发下面的模板。fromEndianness 是把不同的编码转换为主机字节序。toEndianness 是把主机字节序转换为对应的编码。envoy中的字节转换主要是依赖linux 的头文件。这个头文件在mac上不存在,envoy巧妙的做了兼容。发现envoy的设计真的很巧妙,在这里记录一下。

2022-10-25 00:25:35 908

原创 kubernetes event 的内幕

学习背景:之前同事问我kubectl get event 这个命令到底是怎么回事,为什么只能拿到一段时间的,这段时间是多久?在这里写下笔记kubernetes 中 kubelet 负责维护整个pod的生命周期,当有pod创建、崩溃都会产生日志消费kubelet 产生日志发送给apiserver,然后apiserver 存储到etcd, 当然只保存 --event-ttl时间的数据。当我们使用拉取event-ttl时间的event。

2022-10-18 21:48:46 1091 2

原创 shutdown 和close的区别

1、shutdown 不会关闭掉fd,但是会忽略fd的计数器,直接关闭掉链接。2、close 会减少fd计数器,当为0的时候会close掉链接和fd。3、close调用后会直接从epoll中删除,不会触发epoll事件。4、shutdown后会触发epoll事件。5、shutdown是会冲刷缓冲区的。5、close会直接丢弃缓冲区。

2022-09-29 15:02:31 366

原创 tcpdump flags 常见标志位汇总

flags MF表示有更多分片,DF表示不分片,这里是DF,未使用分片,所以id和offset的值都可以忽略。S : SYN - 同步;P : PUSH - 推送;R : RST - 复位;F : FIN - 结束;A : ACK - 应答。

2022-09-09 14:33:15 3041

原创 k8s 创建UserAccount

k8s 创建UserAccount。

2022-09-07 15:06:03 250

原创 K8s日志类型综述

k8s中stdout、hostpath、emptydir、rootfs 日志类型综述

2022-09-05 14:46:34 627

原创 git rebase 合并多次提交

git 压缩commitgit rebase 总结

2022-09-01 19:15:43 174

原创 golang实现一个优先队列

给予golang实现一个大小堆优先队列。

2022-08-17 13:53:55 388 3

原创 关于cgroup 学习

cgroup,cgroupv2,如何使用cgroupv2,c++使用cgroup

2022-08-14 19:08:02 1265

原创 golang 性能调优 pprof 初步调研

golang pprof 性能调优

2022-07-06 21:03:37 523

perf (3).svg

istio-proxy 性能分析图

2021-11-18

sciter-sdk-master.zip

sciter-sdk Sciter 是一个用 HTML/CSS 来渲染现代应用程序 UI 的脚本引擎。 它非常紧凑,简单(只有一个 4~8M 的动态链接库文件 dll/dylib/so),没有其他依赖。它可以工作在 Microsoft Windows(XP 及以上版本), Apple OS X (10.7 及以上版本)和 Linux/GTK (GTK 3.0 及以上版本)。 Sciter 在较新的 Windows 版本上使用 Direct2D GPU 图形加速技术,在 Windows XP 上则使用 GDI+ 技术。 在 OS X 上,它使用标准的 CoreGraphics 技术, 而在 Linux 上使用是 Cairo 库。

2020-03-17

MQTT中文文档以及带书签的英文文档

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

2019-08-15

mqtt中文版pdf.zip

MQTT 是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如 机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽 非常昂贵。 本协议运行在 TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。它有以下特点:  使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。  消息传输不需要知道负载内容。  提供三种等级的服务质量:.

2019-07-14

linux系统编程

《Linux系统编程》是2009年东南大学出版社出版的图书,作者是(美)洛夫。 该书同样也是一本内行人士编写灵活高效代码的学习指南。作为内核黑客和本书的作者,RobertLoVe不仅阐释了系统接口应该如何工作,还介绍了它们实际上是如何工作的,以及怎样安全有效地使用它们。《Linux系统编程》包含了帮助你在任何层面编写更佳代码的实用技巧。 [1]

2019-04-17

c primer plus 中文版

c primer plus 中文版 c primer plus 中文版 c primer plus 中文版 c primer plus 中文版注意了!!!!!!!!!!!!!!

2019-03-14

ubuntu 谷歌浏览器

ubuntu 下面的 谷歌浏览器,本人在ubuntu18.04上稳定运行,安装快捷欢迎打击下载

2019-03-04

rufus3.3压缩包

用于刻录ubuntu镜像文件到U盘,支持中文,开箱即用,操作简便。

2018-11-06

xftp免费安装包

与xshell 无缝结合,操作更加方便,可以通过xshell进行文件上传和下载

2018-10-11

验证码制作

关于简单的验证码制作,可以制作四位数的验证码

2015-11-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除