自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux-bpf 工具

基于bpf linux 运营工具

2022-10-25 14:09:07 310 1

原创 跟踪epoll 唤醒回调fd打印socket 地址和事件

systemtap epoll

2022-10-17 19:27:47 244

原创 使用bpf 排查 fd 泄漏

ss -s 查看 tcp close 是否很多, /proc/pid/fd5分钟后 刷出来的堆栈 要么是长连接 要么是泄漏fd,具体可以使用 lsof 查看是否 sock 状态端口BEGIN{ @start=nsecs;}kretprobe:__alloc_fd/ pid==xxx/{ $fd = retval; @alloc_stack[comm, pid, $fd] = ustack; @allco_stack_time[comm, pid, $fd, us

2022-01-05 11:11:52 855

原创 golang-exec cmd data race

问题背景:bytes.Buffer grow panicpanic: runtime error: slice bounds out of range [:1024] with capacity 512goroutine 428529 [running]:bytes.(*Buffer).grow(0xc0001e86f0, 0x200, 0x0)#011/usr/local/go/src/bytes/buffer.go:148 +0x297bytes.(*Buffer).ReadFrom(0xc0

2021-04-21 11:00:49 235

原创 golang exec cmd pipeline zombile 进程

问题背景:基于golang 实现了一个自助化配置的通用命令任务管理模块,这样运营人员可以直接通过修改配置,完成 if do 的命令逻辑:当磁盘满时,做什么?当网卡down 时做什么;并且可以支持各类环境 和规则。确定僵尸进程问题:但是灰度后不久,命令执行报错: fork exec resource temporarily unavailable;进一步查看syslog 报错 fork rejected by pids controller in xxx.service,cat pid limits 查

2021-04-08 22:02:30 512

原创 mosn 中的context、变量 和 内存复用机制

mosn 中的context、变量 和 内存复用机制在梳理变量机制中,发现与context、对象复用等机制都有一定关联,而context是贯穿始终的关键,所以本来只想记录变量机制,结果对context、对象复用封装都进行了review:(review 相关经验:查看对外接口,传参和返回值;思考使用 环境,与什么有关;跳出细节,找一条线,思考:从 0 到 生命周期结束, 如何使用 以及怎么与接口关联;源码解析文档、issue、历史提交记录、单元测试使用用例;如果没有这个细节会怎么样?结合过往

2021-02-09 23:31:59 337

原创 一次失败的项目经验

多人合作之前,一定要想清楚规划好:详细总体设计文档基础框架 和 组织分期规划和预期一个过渡阶段的代码越简单越好,使用复杂的框架 反而增加成员理解的负担

2020-11-24 14:42:33 201

原创 MOSN学习资料

开发功能对应的roadmaphttps://docs.google.com/spreadsheets/d/1fALompY9nKZNImOuxQw23xtMD-5rCBrXWziJZkj76bo/edit#gid=0主体架构以及性能优化系列http://www.uml.org.cn/wfw/201910224.asphttps://mp.weixin.qq.com/s?__biz=MzA4ODg0NDkzOA==&mid=2247487075&idx=1&sn=87627a1

2020-10-29 22:05:06 400

原创 golang runtime.findrunnable epoll_wait lock 占用CPU 过多排查

问题现象:对于测试报告,我们一般应当包含:测试对比环境的软件架构、输入、可视化的对比结果、原因分析&总结从go 自带的profile 图 只能看出 如题所示,对于问题排查,我们从不吝啬更多信息 用于分析:结合 sys-cpu perf 以及 火焰图分析:可以得到更多的调用栈对比的两个软件 V1 有问题 、V2 没有问题。这里看出有问题的 是Read 场景:Read 触发的调度。我们的测试场景是代理和源站在同一个集群,确实会存在大量Read event 唤醒,但是线上 回源响应的数据

2020-10-21 22:09:58 2781 2

原创 ebpf 学习-bpftrace 语法 入门

bpftrace 语法probe 格式: type:identifier1[:identifier2[…]]bpftrace -e:probe1, probe2,… /filters/ {actions1;actions2…;}variables:built-in: pid、comm、nsecs、curtaskscratch: $ 临时计算使用,第一次赋值声明,$x = 1 只能在action 内部使用map: @ 全局存储 或者 在actions 之间进行数据传递probe1 { @a

2020-10-20 21:50:04 1009

原创 动态追踪技术思想及应用

动态追踪技术思想及应用分享的议题今天我要分享的议题 :偏向于思想和应用;对于底层技术原理,由于本人也在学习中,还没有深入了解,相关资料可以 咨询 内核组(老司机)、网上资料等。简介静态追踪: log、metric、stats;一个简单的示例:调试test 函数中是否存在参数为0 的场景:testDtrace.c: void test(int i) { // do sth if (i == 0) { printf("get i == 0\n"); // 当 i == 0 时,日

2020-10-20 21:43:51 623

原创 golang 变量名和import 名冲突问题

golang 变量名和import 名冲突问题

2020-10-15 16:56:01 2869

原创 CLOSE_WAIT 和TCP_KEEPALIVE

之前面试 曾经被问到 CLOSE_WAIT 状态意味这什么(服务端收到FIN 包后 还没有close fd,存在fd 泄漏的风险)问题现象:代理报错 too many open files, ulimit 设置为100W(/proc/pid/limits),使用ss 命令才几千,lsof 有很多 socket(不显示 ESTAB 等TCP 状态,仅显示 SOCK),查看进程 /proc/pid/fd/ 确实有100w (大量不显示状态的socket), 达到了ulimit 上限.经过排查,确实是.

2020-10-14 20:21:25 2654 1

原创 golang runtime.systemstack 泄漏排查

golang-runtime.systemstack 泄漏排查Fetching profile over HTTP from http://:9001/debug/pprof/heapSaved profile in /root/pprof/pprof.testStack.alloc_objects.alloc_space.inuse_objects.inuse_space.004.pb.gzFile: testStackType: inuse_spaceTime: Sep

2020-09-23 20:35:59 1961

原创 程序员的杂想-不要只做一名程序员

从一次进食堂吃饭感想:食堂运营模式一般有两种:多个窗口,每个窗口有一位负责打菜 结账;流水线;到底哪种方式更好呢?作为程序员,首先想到的是吞吐量:怎么算呢?是以单位出队人次 还是以 工作人员单位处理工作 的角度来看呢?想来想去 想不出个所以然。定量分析实在是短板。那么我们就根据具体特征和一个动态过程进行定性分析吧偶然想到,流水线的好处 是 缓存中的人数多,大家都有的选,而 你一看到集...

2020-03-16 12:40:52 230

原创 缓存淘汰和多级管理

缓存淘汰和多级管理在squid中涉及到缓存淘汰算法包括:内存缓存淘汰lru、磁盘缓存淘汰lru。一般做法是:当命中一个缓存后,将lru节点从当前位置删除,然后移动至队头。淘汰一般是需要在固定的空间个数中淘汰掉某个节点(对于无限节点空间情况下,淘汰算法没有意义)。上述情况下lru一般为删除尾部节点。针对内存缓存,要释放内存空间,针对磁盘缓存,要删除磁盘文件。s4lrus4lru:https:...

2020-02-19 09:10:10 319

原创 源站文件同步

源站文件同步对于静态下载类源站,使用nginx 就可以搭建源站。再给客户提供一个接口(http post): 文件上传(提供url远端下载),查询 ,删除。有了查询后一般会涉及到数据库,下面来讨论主备方案。主备方案:数据库主备和源站文件主备, 主备同时只有一个在操作数据库。一:数据库和源站在一台机器nginx 主 nginx 备mysql 主 ...

2020-01-25 00:56:49 289

原创 后端程序员的前端工具

后端程序员的前端工具在总结监控系统时,其中有一点:将API 接口开发转变为SQL 查询,支持sql算子。这样后端开发工程师就不用疲于奔命提供查询服务了。听说阿里巴巴的产品工程师也要学习SQL语句,为什么要学习呢?最近运维人员总是提一些查询需求,虽然不用编写API,但是编写sql也是活。强烈建议全员学习,对大家都有好处。言归正传,安利几款工具,对后端程序员自动化大有用处。抛开工具思维和平台思维的...

2020-01-15 22:38:02 415

原创 CDN监控系统(三 业务架构)

监控系统(业务监控数据流和架构)需求本次从业务监控出发,监控系统 配置平台化,假设实现以下简单配置需求:告警类型告警条件告警阈值流量峰值>=t15xx 状态码占比>=t2传统的监控系统数据流不管使用何种软件架构实现,数据流和流程一般包含:数据源:业务数据存储的中心,一般为大数据平台中心,其中包含了丰富的大量类型的各种业务数据,供...

2019-12-19 00:01:31 806

原创 CDN 监控系统(二)

CDN 监控系统(二)使用开源软件来搭建监控系统,网上已经有很多关于 zabbix、prometheus、open-falcon等等的比较。使用开源软件注意:开源软件的诞生背景,很多开源软件只是公司用来解决源站小集群的工具,而对于cdn上万服务器的分布式节点不一定适合,比如puppet、ansible、salt 能管理的机器范围就不一样以及如何应对等等。当然我们也没有必要过度设计。在自己...

2019-12-12 16:51:57 430

原创 面向业务和面向硬件编程

面向业务编程,就好比样本决定算法(数据工程师),而不是拿模型套问题(机器学习工程师)。如果你是做cache,意味着输入的复用高,那么不仅可以做内容缓存,还可以进行计算缓存调优最有效的往往是减少输入,或者根据输入的特性特殊处理今天同事问一个分段缓存的问题,背景是squid 针对磁盘利用率有自己的逻辑统计,用以决定是否删除缓存。分段缓存文件可能是不完整的内容,在磁盘上查看可能只有50m,而s...

2019-12-12 08:11:37 419

原创 由点到面(面试经验)

由点到面(面试经验)和面试官交流过程中有一点受益匪浅:由点到面问:之前我做的工作很杂,不像谁专门一直负责某个项目,是否有影响。我想很多人应该也面临着同样问题,这里懂一点 那里懂一点,感觉自己什么都会一点,但是写起简历来看着很low面试官说,没有关系,重要的是能把这些知识点串联起来,形成自己的系统化知识。现在回想突然灵感触发,比如我简历上写:1、工具 会 使用 puppeteer、 会s...

2019-12-10 13:50:27 1967

原创 CDN监控系统(一)

CDN监控系统(一)最早在讨论监控系统的愿景中,希望能做以下要求:避免泛洪针对告警要严格审核,不需要立即处理的坚决不要告警,(注意监控告警和监控运营的区别,可以放到运营平台后续分析处理)自动化分析除了告警以外,最好是能提供更多方便排查的信息。比如cache 出现域名 5xx 状态码告警,需要联动大数据平台或者工具:(不一定要立即做到以下过程,但至少第一步需要做到)找到该类型...

2019-12-09 16:50:48 1534

原创 跟踪内核丢包排查

跟踪内核丢包排查问题背景unaForwardKernel 转发udp 丢包结论192.168.1.2 > 192.168.1.25 > 192.168.1.20125 上的unaForwardKernel在Pre-routing 将源地址改为了25,过不了反向路由查找:25 > 201 OK201> 25 !OK排查总结充分利用更多的信息 如来源和目的...

2019-12-05 10:00:34 2043

原创 使用ELK 搭建core文件展示平台

使用ELK 搭建core文件展示平台展示core文件的意义:当大规模core发生时,方便迅速定位某个功能并回退配置,不用一台一台登录查看方便检索core 与版本的对应关系,方便知道某个core是从哪个版本开始的,core集中的机器类型等总而言之,收集信息更有利于管理。原先core 展示是边缘机器通过调试core文件将信息post到中心,入mysql 使用PHP框架查询展示,是一种传...

2019-11-16 12:55:28 375

原创 公平调度的实现思路

在程序实现过程中,之前讲了很多 复杂的 先后顺序逻辑 可以使用时间维度的 timer 来处理。计算机程序设计往往包含了很多设计思路,而有的思路实现优雅 代码简洁 不易犯错 容易拓展。有的思路却如在沼泽中前行。在进行公平调度的实现过程中:假设有多个客户的任务,每个客户存在task-list 列表taskA taskB taskC taskD为了保证不饥饿某个客户,现有两种实现模式:模...

2019-10-22 20:38:15 480

原创 一个通用的任务管理模型-golang

该模型基于rocketmq 也可以扩展到其他类似任务处理。 使用策略模式 将任务管理 单独 抽出来一个模块。真实应用程序只需实现任务具体处理逻辑 返回成功失败/* Interface Commentimplement it at rocketexe*/type taskDealMsg interface {DealMsg(msgStruct InputMsg, msgDealCoun...

2019-10-22 19:56:44 1254

原创 进程死锁不响应信号

进程死锁不响应信号问题现象线上发现一个进程的某个端口没有监听,进程很久没有重启了。排查过程线上进程会每日重启,发送重启信号有漏掉该进程?使用strace 命令跟踪重启命令,发现命令有kill 重启信号至该进程,只是该进程没有响应该信号查看进程 status cat /proc/pid/status进程没有处于不可中断睡眠状态 D,查看进程 stack cat /proc/pid...

2019-07-16 20:52:55 427

原创 IPC 代理 总结

IPC 代理 总结想要做一个IPC 代理 需要了解 整个IPC 的服务 以及通信接口,目前IPC 通信 包括流数据传输、流数据控制、 IPC 摄像头控制;数据传输 指媒体流,流数据控制 指调控流的meta 如码率、通道等,IPC 摄像头控制 可以控制摄像头的转向。目前IPC 对接 客户端 可以使用onvif 和 国标GB 协议;onvifNVR 客户端 需要 联通 IPC ,有两种...

2019-05-07 14:31:11 1275

原创 进程 线程 协程

进程 线程 协程进程 线程 协程,网上资料繁多,有些是个人理解,存在一定误导性。操作系统 考试经常会考:进程是资源的分配单位,线程是调度单位;进程切换开销大、线程切换开销小等等。网上经常会说协程就是线程等等,在linux 的世界里:线程是轻量级进程,协程是轻量级线程;听者知道说者为什么这样说,这叫主动,否则为被动,只有主动才能掌控节奏 ,源码会告诉我们一切。当我们描述一个事物时,信息自然...

2019-04-29 09:44:30 172

原创 内核-syn-ack RTO修改

内核-syn-ack RTO修改尝试修改SYN ACK 包的重传时间修改,刚开始 使用ip route listip route change ... rto_min 20msss -ite使用命令 ss -ite 发现RTO 从200+ ms 降到30ms 等,说明配置有生效,网上说的RTO_MIN 200ms 修改生效问题在于,如果仅仅是通过这种不科学的验证方式 无法确定s...

2019-04-19 14:07:40 499

原创 内核规划

内核规划CDN-CACHE 常见问题传输优化网络环境分析、模拟、传输 测试环境建立传输过程,拥塞算法 熟悉了解BBR(V2) Cubic 拥塞算法熟悉 bbr_high_gain 自适应 调参算法测试场景尝试调优(基调 app 测试等)防攻击ebpf xdp dpdk机器性能CPU on off cpu 零拷贝内存 页中断 缓存 巨页 jemalloc磁盘 参数...

2019-04-19 11:19:31 624

原创 内核-软中断ksoftirqd/n 占用CPU 过高排查

软中断ksoftirqd/n 占用CPU 过高排查 8 root 20 0 0 0 0 R 75.2 0.0 411:04.48 ksoftirqd/0 168 root 20 0 0 0 0 R 28.7 0.0 42:20.27 ksoftirqd/26 ...

2019-04-16 17:23:08 10218

原创 内核开发常备手册翻译(一)

内核开发常备手册基于前面实现高精度定时器版本时,内核常常崩溃。在翻到此内核开发文档时,答疑解惑和常阅手册;https://www.kernel.org/doc/html/latest/kernel-hacking/index.htmlCPU任意时刻,系统中的CPUs 可能处于以下几种状态:与进程无关联,服务一个硬中断 hardware interrupt(处于中断上下文)与进程无关...

2019-04-15 22:54:41 176

原创 内核均匀发包的问题

内核均匀发包的问题背景在PK 过程中,发现某厂商使用每n ms 发送一些报文的现象,与我们突发的机制相比,优势是没有丢包(4G 环境下),遂被要求实现一个类似均匀发包的机制,过程由于之前没有任何内核相关经验,读代码、设计算法(把连续发送改成条件发送,令牌算法?)发包只懂send 函数,于是从send 接口 开始读代码,https://elixir.bootlin.com/linux...

2019-04-11 14:49:00 693

原创 分块、分层、分级

原先我在抽象思想时习惯于从横向 和 纵向的角度去归类,怎么与 分块、分层、分级 结合起来呢?

2019-04-11 10:27:42 1544

原创 squid rebuild 阶段swap.state 持续增大耗尽磁盘

squid rebuild 阶段swap.state 持续增大耗尽磁盘问题背景线上新版本squid 升级,出现swap.state 持续增大,耗尽磁盘问题。问题现象:磁盘线性耗尽只有cache1 - cache6 比较容易出现增大的swap.state有流量时可以复现,自己升级不会出现重新重启不会复现排查原因squid 重启时,读swap.state 写 swap.stat...

2019-02-28 20:22:22 509

原创 运营经验之混乱猴子军团chaos monkey

运营经验之混乱猴子军团chaos monkey之前有看到netflix 公司开源项目中存在一个chaos monkey 混乱猴子军团,用于随机杀死服务验证各个系统的健壮性。当前项目中,正好发现系统中的监控上报好像很久没有上报异常(也没有上报正常),于是登录制造问题,发现没有上报,排查发现监控上报组件出现了异常。对于非监控组件人员而言,除了要上报正常心跳甚至正常数据,频率可以不高, **另外一...

2019-02-19 15:46:06 3002

原创 lua 的正则表达式之坑

header_filter_by_lua ' local loc, err = ngx.re.match(location_str,"(https?://)([^/:\\\?]*)(:?[0-9]*)(/?)(.*)") ';直接写在nginx 配置里? 要\但是写在header_filter_by_lua中只要两个\原理待探究...

2019-02-19 15:45:56 650

原创 记一次lua打包环境导致的coredump

记一次lua打包环境导致的coredump背景线上nginx升级新版本出现coredump, 在lua 栈 一会malloc free 函数#0 0x00007f289d4dfc5c in free () from /lib64/libc.so.6#1 0x00007f289e127bb9 in l_alloc () from /lib64/liblua-5.1.so#2 0x0...

2019-02-18 19:49:10 765

问题调试和性能分析工具.pptx

介绍linux系统下cpu 内存 磁盘 网络等问题分析和性能优化的工具总结和一些个人心得: 包括 1. cpu 持续跑高、偶尔跑高、gdb、perf等分析思路 2. 内存碎片、内存泄漏、内存越界等分析思路 3. 首包时间、内核丢包等问题排查 4. 工具服务化

2020-01-19

空空如也

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

TA关注的人

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