排查一个特殊的 No space left on device
好久没写水文了,新年第一篇水文总得写一下,完成下 OKR,正好最近帮群友查了一个特殊的 No space left on device 问题,记录一下。 问题半夜接到群友求助,说自己的测试环境遇到了点问题,正好我还没睡,那就来看一下 问题的情况很简单, 用 docker run -d --env-file .oss_env --mount type=bind,src=/data1,dst=/cache {image} 启动了一个容器,然后发现在启动后业务代码报错,抛出 OSError: [Errno 28] No space left on device 的异常 这个问题其实很典型,但是最终排查出来的结果确实非典型的。不过排查思路其实应该是很典型的线上问题的一步步分析 root casue 的过程。希望能对看官就帮助 排查首先群友提供了第一个关键信息,空间有余量,但是就 OSError: [Errno 28] No space left on device 。那么熟悉 Linux 的同学可能第一步的排查工作就是排查对应的 inode...
Stay Simple, Stay Naive
本来想在农历年前交年终总结的,不过想了想,去年的年终总结就因为太懒导致我鸽了。所以这个“双年”怎么也得总结下2022了。不过说起来怎么还没去字节,就开始 ego 了起来。 开篇实际上每年都在觉得这一年很魔幻,但是下一年总会跳出来说“这一年更魔幻”。不过这也是人生的乐趣吧。 看了下20年总结的标题叫做”但行好事,莫问前程“,去年一下想不起标题,群内求助了下,发现”Stay Simple,Stay Naive“这个标题还不错,挺适合作为去年的总结与展望的。不过在写下这点文字的时候发现当年 +1S 的对象也已经仙去了。怎么说心里也还是有点很奇怪的感觉在里面。 不过,一日膜法,终身膜法,所以就还是 Naive 的 +1S 吧 生活去年从年初开始,我从太极图形离职后,就开始进入了我数字游民的生活。作为一个...
我所热爱的开源社区
今天是个不错的日子,最开始由我带进 nerdctl 社区的 @yuchanns 因为其很活跃的表现被项目的主要维护者 @AkihiroSuda 推荐成为了项目的 maintainer,参见 nerdctl#PR1540。而我也在这个项目中被提名成为 committer,参见 nerdctl#1539。加上今天的公益群有太多关于开源的讨论,所以我想写篇文章记录下我自己的经历,希望能帮助更多的人热爱开源,拥抱开源。 为什么我会参加开源我参与的第一个开源项目,应该是能追溯到16年,我还没有本科毕业的时候,当时的我参加了 稀土掘金翻译计划(slogan 里说的最好的英文技术资讯翻译项目,我觉得毫不夸张),在这个项目里我第一次接触到了 Git Workflow,也完整接触到了 GitHub 这个世界最大的同性交友社区(大雾(不过我相交至今对我帮助巨大的几位密友真的是通过这个项目结识的)。而我第一个参与的代码项目,应该可以追溯到17年3月,我给 Sanic 这个项目新增了一个 Code Example,参见...
重回 Windows 之路
最近会回到 Windows 下办公了两周多,简单记录下自己的使用体验 背景最近刚配置了一台高配的主机(i9-13900k+4090),之前的 MBP 沦为开会本,开始尝试把 PC 作为主力机使用,由于驱动太新没搞上合适的 Linux 发行版,Ubuntu 系动不动又在“Ubuntu 内部错误”,所以我开始使用 Windows 作为自己的工作生活主力机。两周使用下来发现 Windows 的使用体验还是超出我的预期了。下面大概聊聊 优点时隔多年主力使用 Windows,感觉进步还是蛮大的,主要体现在 系统交互上 开发者体验上 系统交互上,Windows 吸收了不少其余的系统和软件的精髓,感觉进步不小,写几个我印象里比较深的吧 开始菜单栏进行了改进,比之前感觉更好用了 File Explorer 的改进,比如支持 Tab 什么的,还是很舒服的 非常优秀的分屏功能,将窗口拖到屏幕上方就能选择不同的分屏比例和应用,同时在切换任务的时候,有 Task Group 的概念。这不比 macOS 高了不知道10个 Linux? 全局深色主题支持比之前好很多了 整体使用下来,体验比前面的...
容器 CPU 和 Memory 限制行为简述
这篇是给之前没啥容器经验的选手准备的一篇文章,主要是讲一下容器的 CPU 和 Memory 限制行为。 CPU 限制首先 Mac 或者是 Windows 选手在使用 Docker Desktop 的时候,会设置 Docker Desktop 的 CPU 限制,默认是 1,也就是说 Docker Desktop 只能使用 1 个 CPU。这是因为 Docker Desktop 裹了一层虚拟机(Windows 下应该是 WSL2/Hyper-V,Mac 下可能是 QEMU)。这相当于我们在一个特定 CPU 数量的宿主机中跑 Docker 首先提到 CPU 限制,本质上是限制进程的 CPU 使用的时间片,在 Linux 下,进程存在三种调度优先级 SCHED_NORMAL SCHED_FIFO SCHED_RR 1 用的是 Linux 中 CFS 调度器,而常见普通进程都是 SCHED_NORMAL 。OK 前提知识带过 说回容器中的 CPU 限制,目前主流语境下,容器特指以 Docker 为代表的一系列的基于 Linux 中 CGroup 和 Namespace...
Leetcode Weekly Contest 287 题解
好久没打周赛了,打了一次周赛,简单的写个题解 2224. Minimum Number of Operations to Convert Time题面: 1234567You are given two strings current and correct representing two 24-hour times.24-hour times are formatted as "HH:MM", where HH is between 00 and 23, and MM is between 00 and 59. The earliest 24-hour time is 00:00, and the latest is 23:59.In one operation you can increase the time current by 1, 5, 15, or 60 minutes. You can perform this operation any number of times.Return the minimum number of...
简单聊聊在 Linux 内核中的网络质量监控
这可能是2021年最后一篇文章(农历年),也可能是2022年第一篇文章,不过这完全取决于我什么时候写完。这次来简单聊聊 Linux 中的网络监控 开篇这篇文章,既是一篇水文,又不是一篇水文。不过还是新手向的一个文章。这篇文章实际上在我的草稿箱里呆了一年多的时间了,灵感最初源自我在阿里的一些工作(某种意义上算是国内领先的(但也是比较小众的工作(XD 随着技术的发展,大家对于服务的稳定性要求越来越高,而保证服务质量的前提就是有着合格的监控的覆盖面(阿里对于服务稳定性的要求叫做 “1-5-10” 即,一分钟发现,五分钟处理,十分钟自愈,而这样一个对于稳定性的要求没有足够的覆盖面的监控的话,那么一切等于圈圈)。而在这其中,网络质量的监控是重中之重 在讨论网络质量的监控之前,我们需要来明确网络质量这个定义的覆盖范围。 网络链路上的异常情况 服务端网络的处理能力 在明确这样的覆盖范围后,我们可以来思考什么样的指标代表着网络质量的降低。(注:本文主要分析 TCP 及 over TCP...
简单聊聊容器中的 UID 中的一点小坑
今天不太舒服,在家请假了一天。突然想起最近因为一些小问题,看了下关于容器中 UID 的东西。所以简单来聊聊这方面的东西。算个新手向的文章 开篇最近帮 FrostMing 把他的 tokei-pie-cooker 部署到我的 K8S 上做成一个 SaaS 服务。Frost 最开始给我了一个镜像地址。然后我啪的一下复制粘贴了一个 Deployment 出来 123456789101112131415161718192021222324252627282930313233apiVersion: apps/v1kind: Deploymentmetadata: name: tokei-pie namespace: tokei-pie labels: app: tokei-piespec: replicas: 12 selector: matchLabels: app: tokei-pie template: metadata: labels: app: tokei-pie spec: ...
聊聊 sk_buff 中一个冷门字段: nohdr
今天遇到一个很有意思的问题,“nohdr 字段到底有什么用”,在这里写个水文简单记录一下 正文前情提要首先来说,不管介绍再冷门的字段,既然涉及到 SKBUFF ,那么就得先来对 sk_buff 做个简单的介绍 简而言之,sk_buff 是 Linux 网络子系统的核心数据结构,从链路层到我们最终对数据包的操作,背后都离不开 sk_buff sk_buff 要完全讲解基本就相当于把 Linux 网络系统完全讲解了,所以讲完是不可能讲完的,这辈子都不可能的! 简单聊几个关键,可能会帮助大家理解我们本文提到的冷门字段 nohdr 的关键字段吧 首先来讲,最重要的三个字段:data ,mac 和 nh ,分别代表着当前 sk_buff 的数据区的起始地址,L2 header 的起始地址,L3 Header 的起始地址。用一个图方便大家理解 看了图的同学可能会有点明白了,实际上在内核里,也是一层一层的通过指针偏移,不断的添加新的 header 来处理网络请求。和我们直觉相符。可能有同学会问,我既然知道 L3 Header 的起始地址,IP 之类的 L3 协议的 header...
关于 Node.js 中 execSync 的一点问题
很久没写水文了,昨天帮人查了一个 Node.js 中 execSync 这个函数特殊行为的问题,很有趣,所以大概记录下来水一篇文章 背景首先老哥给了一张截图 首先基本问题可以抽象为在 Node.js 中利用 execSync 这个函数执行 ps -Af | grep -q -E -c "\\-\\-user-data-dir=\\.+App" 这样一条命令的时候,Node.js 时不时会报错。具体堆栈大概为 12345678910Uncaught Error: Command failed: ps -Af | grep -q -E -c "\-\-user-data-dir=\.+App" at checkExecSyncError (child_process.js:616:11) at Object.execSync (child_process.js:652:15) { status: 1, signal: null, output: [ null, <Buffer >,...