嵌入式linux-CPU性能优化小记
嵌入式业务应用运行导致系统sys CPU使用率飚高,本文记录本次性能分析定位过程,包括一些常用工具使用示例等
平均负载与 CPU 使用率,到底有啥区别?
大家好,我是树哥。在性能优化中,我们经常会关注 CPU 平均负载这个指标。但如果让你来跟我解释一下什么是平均负载,你能说得清楚吗?它跟 CPU 使用率有什么区别?我想可能很多人都数不清楚,今天我们就来盘一盘 CPU 平均负载这个指标!平均负载与 CPU 使用率,到底有啥区别?Linux 进程
JVM 源码分析之一个 Java 进程究竟能创建多少线程
概述虽然这篇文章的标题打着JVM源码分析的旗号,不过本文不仅仅从 JVM 源码角度来分析,更多的来自于 Linux Kernel 的源码分析,今天要说的是 JVM 里比较常见的一个问题。这个问题可能有
使用Top_X插件排查内存过载问题
Top命令是Linux 系统下常用的监控工具,用于实时获取进程级别的 CPU 或内存使用情况。XPocket中的Top_X为Linux Top的增强版,可以显示CPU占用率/负载,CPU及内存进程使用
分享一次排查CLOSE_WAIT过多的经验
作者:踩刀诗人原文链接:https://www.cnblogs.com/chopper-poet/p/14618391.html 问题背景某日下午有测试人员急匆匆的跑来跟我反馈:“有客户反馈供应商附件
LONG究竟有多长,从皇帝的新衣到海康SDK
转眼之间初中毕业30年了,但我仍清楚的记得初中英语的一篇课文,题目叫《皇帝的新装》(“The king’s new clothes”)。这篇课文的前两句话是:”Long long ago, there
在调试器里看LINUX内核态栈溢出
图灵最先发明了栈,但没有给它取名字。德国人鲍尔也“发明”了栈,取名叫酒窖。澳大利亚人汉布林也“发明”了栈,取名叫弹夹。1959年,戴克斯特拉在度假时想到了Stack这个名字,后来被广泛使用。
进程无故消失的破案历程
概述 前段时间公司有个系统的进程老是无故退出,在客户那边好好的,在家里服务器上老是出现,而且出现的时间也没啥规律,当然最终查出来还是有规律的,不过这个规律比较特别。大家看了后面的内容之后就明白了
性能优化:线程资源回收
一、问题模型服务平台的排序请求出现较多超时情况,且不定时伴随空指针异常。 二、问题发生前后的改动召回引擎扩大了召回量,导致排序请求的item数量增加了。 三、出问题的模型基于XGBoost预测的全排序
用crash工具分析Linux内核死锁的一次实战
背景知识点ramdump是内存转存机制,我们可以在某个时刻把系统的内存转存到一个文件中,然后与符号信息(vmlinux)一起导入到trace32或crash等内存分析工具中做离线分析。是分析崩溃、死锁
如何使用Linux内核中没有被导出的变量或函数?
本文详细介绍了使用EXPORT_SYMBOL宏导出函数或变量、使用kallsyms_lookup_name()查找函数或变量的虚拟地址以及内核模块中直接使用内核函数的虚拟地址等3种方案解决没有被EXPORT_SYMBOL 相关的宏导出的变量或函数不能直接使用的问题
LINUX网络子系统中DMA机制的实现
我们先从计算机组成原理的层面介绍DMA,再简单介绍Linux网络子系统的DMA机制是如何的实现的。 计算机组成原理中的DMA 以往的I/O设备和主存交换信息都要经过CPU的操作。不论是最早的轮询方式,
深入理解Linux内核进程上下文切换
我都知道操作系统的一个重要功能就是进行进程管理,而进程管理就是在合适的时机选择合适的进程来执行,在单个cpu运行队列上各个进程宏观并行微观串行执行,多个cpu运行队列上的各个进程之间完全的并行执行。进
浅谈 Linux 高负载的系统化分析
讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排查思路的介绍。所谓 “授人以鱼不如授人以渔"。本文试图建立一个方法和套路,来帮助读者对 Load 高问
Linux多线程应用性能分析
如今CPU的核心数越来越多, 在2019年你可以轻易买到超过50个核心的x86服务器CPU,一个中端台式机拥有8个执行线程也没什么好奇怪的。问题是我们怎样找到工作负载来“喂饱”那些相对饥饿的核。到目前
Linux pstore 实现自动“抓捕”内核崩溃日志
简介pstore文件系统(是的,这是个文件系统)是Persistent Storage的缩写,最早在2010年由 Tony Luck 设计并合入Linux主分支,设计的初衷是在内核Panic/Oops
Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家
火焰图:全局视野的Linux性能剖析
什么是火焰图火焰图(Flame Graph)是由Linux性能优化大师Brendan Gregg发明的,和所有其他的trace和profiling方法不同的是,Flame Graph以一个全局的视野来
别再纠结线程池大小/线程数量了,没有固定公式的
可能很多人都看到过一个线程数设置的理论:- CPU 密集型的程序 - 核心数 + 1- I/O 密集型的程序 - 核心数 2不会吧,不会吧,真的有人按照这个理论规划线程数? 线程数和CPU利用率的小
讨论在 Linux Control Groups 中运行 Java 应用程序的暂停问题
说明本篇原文来自 LinkedIn 的 Zhenyun Zhuang,原文:Application Pauses When Running JVM Inside Linux Control Group
浅析Linux IO,你需要知道的底层
在开始正式的讨论前,我先抛出几个问题:- 谈到磁盘时,常说的HDD磁盘和SSD磁盘最大的区别是什么?这些差异会影响我们的系统设计吗?- 单线程写文件有点慢,那多开几个线程一起写是不是可以加速呢?- w
操作系统
内存问题探微
这篇文章是我在公司 TechDay 上分享的内容的文字实录版,本来不想写这么一篇冗长的文章,因为有不少的同学问是否能写一篇相关的文字版,本来没有的也就有了。说起来这是我第二次在 TechDay 上做的
记一次网络请求连接超时的事故
从HTTP请求超时、重试机制、操作系统网络等层面剖析了事故的原因,最终解决业务问题。这里先抛两个问题:1)你遭遇过由于网络连接或请求超时造成的生产事故吗?2)你知道操作系统默认的网络连接超时是多少秒?
世上最好的共享内存
共享单车、共享充电宝、共享雨伞,世间的共享有千万种,而我独爱共享内存。早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进程
一次生产 CPU 100% 排查优化实践
前言到了年底果然都不太平,最近又收到了运维报警:表示有些服务器负载非常高,让我们定位问题。还真是想什么来什么,前些天还故意把某些服务器的负载提高(没错,老板让我写个 BUG!),不过还好是不同的环境互
打通IO栈:一次编译服务器性能优化实战
背景随着企业SDK在多条产品线的广泛使用,随着SDK开发人员的增长,每日往SDK提交的补丁量与日俱增,自动化提交代码检查的压力已经明显超过了通用服务器的负载。于是向公司申请了一台专用服务器,用于SDK
雕刻在LINUX内核中的LINUS故事
因为LINUX操作系统的流行,Linus 已经成为地球人都知道的名人。虽然大家可能都听过钱钟书先生的名言:“假如你吃个鸡蛋觉得味道不错,又何必认识那个下蛋的母鸡呢?” 但是如果真是遇到一个“特别显赫”
在调试里看 NV 驱动栈溢出导致的连环死锁
最近我使用的一台PC随机出现应用程序卡死。卡死的程序可能是VirtualBox虚拟机,可能是资源管理器,也可能是其它软件。有时是一个程序卡死,有时是几个程序卡死,甚至是卡死一大片,整个系统不能动弹,只
如何使用Linux内核中没有被导出的变量或函数?
Linux 内核为了减少命名空间的污染,并做到正确的信息隐藏,内核提供了管理内核符号可见性的方法,没有被 EXPORT_SYMBOL 相关的宏导出的变量或函数是不能直接使用的,为了说明并解决这个问题,
当Linux内核遭遇鲨鱼—kernelshark
之前小弟一直在宣传推广火焰图,结果是很多童鞋凡事都用火焰图。说实话,火焰图特别适合分析运行时热点(无论是on-cpu、off-cpu、还是内存等,火焰图的想象力可以无穷放大),但是你要分析一个的如果是
精致全景图 | linux内核输出的日志去哪里了
熟悉linux内核,或者看过linux内核源码的同学就会知道,在内核中,有一个类似于c语言的输出函数,叫做printk,使用它,我们可以打印各种我们想要的信息,比如内核当前的运行状态,又或者是我们自己的调试日志等,非常方便。
从猫蛇之战再看内核戏CPU
连续写了几天的代码,有些疲倦,吃过晚饭,换个工作方式,继续和大家聊猫蛇之战。蛇不仅丑陋,而且可能伤人害命,是邪恶的象征。猫与蛇战,代表着讨伐奸邪,是正义之战。猫与蛇战,技艺娴熟,举重若轻,叫人拍手叫绝
通过生产者与消费者模型感受死锁
一. 实验目的及实验环境 1.实验目的通过观察、分析实验现象,深入理解产生死锁的原因,学会分析死锁的方法, 并利用 pstack、 gdb 或 core 文件分析( valgrind (DRD+Hel
从猫蛇之战看内核戏CPU
小时候曾经目睹过猫与蛇战斗,面对昂首发威的毒蛇,小猫不慌不忙,挥舞前爪,沉着冷静,看准时机进攻,胆大心细。在网上搜一下,可以看到很多猫蛇战斗的照片,看来猫蛇之战是很多人都喜欢看的“精彩节目”。再来一张
Linux 中 D 状态的进程与平均负载
前言这篇文章聊聊 Linux 中 D 状态的进程与平均负载的关系,通过阅读本文,你会了解到这些东西。- D 状态的进程是什么- 如何编写内核模块模拟 D 状态进程- Linus 对 D 状态进程的看法
从猫蛇之战三看内核戏CPU
先说明一下,“连续剧”的成本有点高,无论如何,这一篇会把这个问题写完。回顾一下,最初的问题是“为什么在调试器里读写空指针不会崩溃?” [第一篇](https://heapdump.cn/art
Load高故障分析
Load指标的意义Linux的Load指标代表系统运行负载,是一个让新手不太容易了解的概念。简单的说,Load指标表示一段时间内,系统有多少个正在运行的任务。包含:1、正在CPU上面运行的任务数量2、
JFR 定位因为 SSL 导致 CPU Load 飚高的问题
问题场景在某一时刻,某个微服务的某个实例 CPU 负载突然飚高:同时建立了很多数据库链接:其他实例没有这个现象。 问题定位由于建立了很多数据库链接,猜想可能是数据库比较慢,查看数据库这段时间的 SQL
为什么GC 异常,大家喜欢让Swap背锅呢
背景在公司内部技术群里,经常有人时不时的问到服务某次GC时间突然很高,有什么办法排查。基本上每次都会有人怀疑会不会Swap导致的,先看看Swap,如果真的使用了Swap区域,基本上就会让Swap区域背
Nginx 502 Bad Gateway
前言事实证明,读过Linux内核源码确实有很大的好处,尤其在处理问题的时刻。当你看到报错的那一瞬间,就能把现象/原因/以及解决方案一股脑的在脑中闪现。甚至一些边边角角的现象都能很快的反应过来是为何。笔
揭露内核黑科技 - 热补丁技术真容
内核热补丁是一种无需重启操作系统,动态为内核打补丁的技术。系统管理员基于该技术,可以在不重启系统的情况下,修复内核BUG或安全漏洞,可以在最大程度上减少系统宕机时间,增加系统的可用性。一直很好奇内核热
NAT引发的性能瓶颈-完整版​
笔者最近解决了一个非常曲折的问题,从抓包开始一路排查到不同内核版本间的细微差异,最后才完美解释了所有的现象。在这里将整个过程写成博文记录下来,希望能够对读者有所帮助。(篇幅可能会有点长,耐心看完,绝对
常见线上问题分析-Linux性能观察篇(上)(实战PPT分享)
180页ppt,内容涉及:计算机体系结构、计算机组成原理、操作系统、网络协议等基础知识。从CPU、内存、I/O、网络协议栈等几个部分切入,全面覆盖Linux性能观测技术。
大碰撞!当Linux多线程遭遇Linux多进程
背景 本文是描述多进程多线程编程中遇到过的一个坑,并从内核角度分析其原理。这里说的多进程多线程并不是单一的多进程或多线程,而是多进程和多线程,往往会在写一个大型应用时才会用到多进程多线程的模型。这是怎
理解 Linux 的虚拟内存
前言前不久组内又有一次我比较期待的分享:”Linux 的虚拟内存”。是某天晚上加班时,我们讨论虚拟内存的概念时,leader 发现几位同事对虚拟内存认识不清后,特意给这位同学挑选的主题(笑)。我之前了
那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)
创作目的互联网、Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent、dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦云
使用XPocket插件top_x 解决cpu高及 cpu_load高的一般思路
本文使用了xpocket工具包的插件链接xpocket地址:[https://plugin.xpocket.perfma.com](https://plugin.xpocket.perfma.com)
一次系统调用时间过长追踪完整教程案例
Ftrace简介Ftrace是Linux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布。 Ftra
从应用到内核查接口超时(下)
某个接口超时会偶发,查了几个 case 的日志,发现 httpClient 在请求某三方接口结束后输出一条日志时间为 A,方法返回后将请求结果解析成为 JSON 对象后,再输出的日志时间为 B, AB之间的时间差会特别大,100-700ms 不等,而 JSON 解析正常是特别快的,不应该超过 1ms
借助Xpocket中的perf插件 了解cpu热点函数的抓取原理
本文使用了xpocket工具包的插件链接xpocket地址: [https://plugin.xpocket.perfma.com](https://plugin.xpocket.perfma.com
关于Linux编译优化几个必须掌握的姿势
编译选项和内核编译首先我们都知道,Linux内核如果用O0编译,是无法编译过的,Linux的内核编译,要么是O2,要么是Os,这点从Linux的Makefile里面可以看出:当选择了```CONFIG
Linux内核中用GFP_ATOMIC申请内存究竟意味着什么?
GFP_ATOMIC vs. GFP_KERNEL我们都知道,在中断、软中断、spinlock等原子上下文里面,申请内存,应该使用GFP_ATOMIC标记,譬如内核中有大量的kmalloc/GFP_A
从Linux源码看Socket(TCP)的accept
前言笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底做了哪些事情
记一次 Kotlin Ktor 库的 PR 提交记录(TCP 自连接)
前言去年 techday 上有幸邀请到了 Go 夜读的大佬杨文,他跟我们分享了开源的主题,深受鼓舞。正好前段时间测试 Kotlin 的官方库 ktor 发现了一个很冷门的问题,于是提了一个 PR。经过
常见线上问题分析-Linux性能观测篇(下)(实战PPT分享)
180页ppt,内容涉及:计算机体系结构、计算机组成原理、操作系统、网络协议等基础知识。从CPU、内存、I/O、网络协议栈等几个部分切入,全面覆盖Linux性能观测
这些排查内存问题的命令,你用过多少?
我相信大家都遇到过内存占用率过高的情况,在排查过程中,我们会用到一些命令或工具,下面来看下这些你都用过吗? top 命令首先比较常用的就是 top 命令,是性能监控的常用命令,该命令可以实时显示系统中
如何 60 秒内进行 Linux 性能分析
当你登陆一台 Linux 服务器之后,因为一个问题要做性能分析时:你会在第 1 分钟内做哪些检测呢?在 Netflix,我们有很多 EC2 的 Linux 机器,并且也需要很多性能分析工具来监控和检查
从Linux源码看Socket(TCP)的listen及连接队列
前言如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。 今天笔者是从Linux源码的角度看下Server端的Socket在进行listen的时候到底做了哪些事情(基于Lin
从Linux源码看Socket(TCP)的bind
前言之前笔者分享了关于Client端的Socket在进行Connect的时候到底做了哪些事情~今天笔者就来继续从Linux源码的角度看下Server端的Socket在进行bind的时候到底做了哪些事情
从Linux源码看TIME_WAIT状态的持续时间
前言笔者一直以为在Linux下TIME_WAIT状态的Socket持续状态是60s左右。线上实际却存在TIME_WAIT超过100s的Socket。由于这牵涉到最近出现的一个复杂Bug的分析。所以,笔
用eBPF/bcc分析系统性能的一个简单案例
bcc是eBPF的一种前端,当然这个前端特别地简单好用。可以直接在python里面嵌入通过C语言写的BPF程序,并帮忙产生BPF bytecode和load进入kernel挂载kprobe、trace
线程与栈那些事
这篇文章是介绍一下线程与栈相关的话题,文章比较长,主要会聊聊下面这些话题:- 进程与线程的本质区别,线程与内存共享- Linux pthread 与 Guard 区域- Hotspot 线程栈的 Gu
使用虚线程进行同步网络 IO 的不阻塞原理
使用虚线程进行网络 IOProject Loom 主要目标是在 Java 平台上提供一种易于使用、高吞吐量的轻量级并发性和新的编程模型的 JVM 特性和API。这带来了许多有趣和令人兴奋的前景,其中之
Linux 内核源码分析之进程概要及调度时机
这篇文章从 Linux 内核层面分享进程概要及调度时机。
一张图看懂linux内核中percpu变量的实现
我们在使用各种编程语言进行多线程编程时,经常会用到thread local变量。所谓thread local变量,就是对于同一个变量,每个线程都有自己的一份,对该变量的访问是线程隔离的,它们之间不会相
【全网首发】Linux:十五条网络性能优化建议
大家好,我是飞哥!最近我出了一本非常受欢迎的新书 -- 《深入理解Linux网络》。这本书首发当日就登上了京东的科技类销量日冠军,刚上市三个星期就已经印刷了三次,非常的热门。在这本书中我们深入地讨论了很多内核网络模块相关的问题。讨论了一个网络包是如何从网卡到达用户进程的,聊了同步阻塞和多路复
【全网首发】聊聊Linux中线程和进程的联系与区别!
大家好,我是飞哥!关于进程和线程,在 Linux 中是一对儿很核心的概念。但是进程和线程到底有啥联系,又有啥区别,很多人还都没有搞清楚。在网上对进程和线程的讨论中,很多都是聚集在这二位有啥不同。但事实在 Linux 上,进程和线程的相同点要远远大于不同点。在 Linux 下的线程甚至都被称为了轻
谈一谈Linux让实时/高性能任务独占CPU的事
内容简介本文主要讨论在高实时要求、高效能计算、DPDK等领域,Linux如何让某一个线程排他性独占CPU;独占CPU涉及的线程、中断隔离原理;以及如何在排他性独占的情况下,甚至让系统的timer tick也不打断独占任务,从而实现最低的延迟抖动。 阅读本文大约需要20分钟。
关于Linux网络的网络性能优化建议
导语我们在Linux性能方面有哪些优化手段可用呢?我在本章中给出一些开发或者运维中的性能优化建议。注意,我用的字眼是建议,而不是原则之类的。每一种性能优化方法都有它适用或者不适用的应用场景。你应当根据你当前的项目现状灵活来选择用或者不用。 正文1、网络请求优化建议1:尽量减少不必
【译】一次交易类场景CPU飙升100%的故障排除案例
在本文中,我们将讨论如何解决北美主要交易应用程序中出现的 CPU 峰值问题。突然之间,这个应用程序的 CPU 开始飙升至 100%。事实上,这个团队没有进行任何新的代码部署,没有进行任何环境更改,也没有翻转任何标志设置——但突然间,CPU 开始飙升。我们甚至验证了流量是否增加
【全网首发】从 Linux 内核角度探秘 JDK NIO 文件读写本质
1. 前言笔者在 《从 Linux 内核角度看 IO 模型的演变》一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述。又在此基础之上介绍了针对 socket 文件的相关操作及其对应在内核中的处理流程:并与 epoll 的工作机制进行了串联:通过这些内容的串联介绍,
【全网首发】内核是如何给容器中的进程分配CPU资源的?
容器中的核是真的逻辑核吗?Linux 是如何对容器下的进程进行 CPU 限制的,底层是如何工作的?容器中的 throttle 是什么意思?为什么关注容器 CPU 性能的时候,除了关注使用率,还要关注 throttle 的次数和时间?
深入理解Linux系统调用与API
作者简介:程磊,一线码农,在某手机公司担任系统开发工程师,阅码场荣誉总编辑,日常喜欢研究内核基本原理。目录:一、基本概念解析1.1 系统调用的来源与作用1.2 API的来源与作用1.3 API与系统调用的关系1.4 系统调用机制的基本原理二、API的制定与实现2.1 POSIX A
聊聊 Linux 中断机制
中断的历史原因在聊中断机制之前,我想先和大家聊一聊中断机制出现的前因后果。最一开始计算机操作系统的设计是能够一次性的执行所有的计算任务的,这被称为顺序执行,也是批处理操作系统(Batch system)。顺序执行的意思是一个任务接着一个任务的依次执行,就像我们编写代码的时候,我们肯定是写完一行代
一次死锁导致CPU异常飘高的整个故障排查过程
2021年4月2号,晚上10.45分左右,线上业务异常,后排查 线上服务器CPU 异常高,机器是 16核 64G的。但是实际负载已经达到了 140左右。
Linux上TCP的几个内核参数调优
Linux作为一个强大的操作系统,提供了一系列内核参数供我们进行调优。光TCP的调优参数就有50多个。在和线上问题斗智斗勇的过程中,笔者积累了一些在内网环境应该进行调优的参数。在此分享出来,希望对大家有所帮助。 调优清单 好了,在这里先列出调优清单。请记住,这里只是笔者在
【全网首发】一步一图带你深入理解 Linux 虚拟内存管理
写在本文开始之前…从本文开始我们就正式开启了 Linux 内核内存管理子系统源码解析系列,笔者还是会秉承之前系列文章的风格,采用一步一图的方式先是详细介绍相关原理,在保证大家清晰理解原理的基础上,我们再来一步一步的解析相关内核源码的实现。有了源码的辅证,这样大家看得也安心,理解起来也放心,最起码可
【全网首发】Linux 中 CPU 利用率是如何算出来的?
top 输出的利用率信息是如何计算出来的,它精确吗? ni 是 cpu 在处理啥时的开销? wa 代表的是 io wait,那么这段时间中 cpu 到底是忙碌还是空闲?以上问题本文将为你解答!
一次磁盘占用率 100% 的排查记录
你好,我是悟空。最近遇到一个服务器的问题:磁盘满了,占用率 100%~这个问题太常见了,于是先来排查一波是哪些文件占用了大量磁盘。一、排查磁盘占用率100%1.1 查看磁盘使用的大致情况第一个命令就是 df -h,来查看磁盘的占用情况。df 是 disk free 的缩写,用于显示目前在 L
人人都应该知道的CPU缓存运行效率
CPU除了利用率之外,还有很容易被人忽视的指标,就是指令的运行效率。
怒啃 24 小时,终于搞懂上下文切换!
大家好,我是树哥。对于服务器系统来说,上下文切换也是影响系统性能的一个重要因素。深入理解上下文切换的原理,有利于我们做好性能优化工作。今天我将带大家了解下上下文切换的几种情形,以及其背后发生切换的具体信息,接着介绍一些监测上下文切换指标的工具,最后总结一些上下文切换异常可能得场景。1. 什么是
详解同步阻塞网络 IO—高性能网络开发路上的绊脚石
在网络开发模型中,有一种非常易于开发同学使用的方式,那就是同步阻塞的网络 IO(在 Java 中习惯叫 BIO)。例如我们想请求服务器上的一段数据,那么 C 语言的一段代码 demo 大概是下面这样:int main(){ int sk = socket(AF_INET, SOCK_STREA
深入理解Linux内核进程上下文切换
我们都知道操作系统的一个重要功能就是进行进程管理,而进程管理就是在合适的时机选择合适的进程来执行,在单个cpu运行队列上各个进程宏观并行微观串行执行,多个cpu运行队列上的各个进程之间完全的并行执行。
【全网首发】从进程栈内存底层原理到Segmentation fault报错
这篇文章中我给大家介绍进程栈的初始化过程、栈对应的物理内存是如何分配的、以及栈的自动增长。也会看到“Segmentation fault (core dumped)”产生的的根本原因。
踩了个DNS解析的坑,但我还是没想通
hello大家好,我是小楼。最近踩了个DNS解析的小坑,虽然问题解决了,但排查过程比较曲折,最后还是有一点没有想通,整个过程分享给大家。背景最近负责的服务要置换机器。置换机器可能很多小伙伴不知道是干啥,因为大家平时接触不到,我简单解释一下什么是机器置换以及为什么需要机器置换。机器置换通俗
超极速优化:网络开发中的请求合并!
导语今天,xjjdog来分享网络开发中的一个超级技巧。它可以把两个请求合并为一个请求,使得服务在弱网环境中性能得到极大的改善。说开了很容易,但却很难想到。 正文需求如果我有大量的物联网设备,比如说100万台。如果这些设备平均每10秒产生一个请求,那么QPS就是10W,这对于任何公
深入理解Linux中断机制
一、中断基本原理中断是计算机中非常重要的功能,其重要性不亚于人的神经系统加脉搏。虽然图灵机和冯诺依曼结构中没有中断,但是计算机如果真的没有中断的话,那么计算机就相当于是半个残疾人。今天我们就来全面详细地讲一讲中断。1.1 中断的定义我们先来看一下中断的定义:中断机制:CPU在执行指令时,收到
深入理解Linux进程管理
作者简介:程磊,一线码农,在某手机公司担任系统开发工程师,日常喜欢研究内核基本原理。目录一、进程基本概念1.1 进程与程序1.2 进程与线程1.3 进程与内核1.4 进程与内存1.5 进程运行状态1.6 进程亲缘关系二、进程的实现2.1 基本原理2.2 进程结构体2.3 进
为什么我的进程被kill掉了
先来看段代码:这段代码非常简单,就是先用mmap的方式,为该进程分配10GiB的虚拟内存,然后再用page写的方式,让操作系统为这10GiB虚拟内存,分配对应的物理内存,最后sleep,等待我们测试。
【全网首发】CPU 是如何与内存交互的?
这篇文章主要整理了一下计算机种的内存结构,以及 CPU 是如何读写内存种的数据的,如何维护 CPU 缓存中的数据一致性。什么是虚拟内存,以及它存在的必要性。如有不对请多多指教。概述目前在计算机中,主要有两大存储器 SRAM 和 DRAM。主存储器是由 DRAM 实现的,也就是我们常说的内存,在
【全网首发】如何正确获取容器的CPU利用率?
如何正确地获取容器中的 cpu 利用率?容器 cpu 使用率的指标项为什么比物理机上少了 nice/irq/softirq?
Linux swap分区工作原理及问题定位
一、文件页和匿名页1、文件页当发生了内存泄漏时,或者运行了大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢?内存回收和 OOM 杀死进程。内存资源紧张导致的 OOM(Out Of Memory),指的是系统杀死占用大量内存的进程,释放这些内存,再分配给其他更需要的进程。内存回收
一个内核oops问题的分析及解决
问题再现最近在调试设备时,遇到了一个偶发的开机死机问题。通过查看输出日志,发现内核报告了oops错误,如下所示(中间省略了部分日志,以......代替):Unable to handle kernel NULL pointer dereference at virtual address 000
记一次CPU使用率低负载高的排查过程
导语:在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。而监控CPU的性能一般包括以下3点:运行队列、CPU使用率和上下文切换。对于每一个CPU来说运行队列最好不要超过3,例如,如果是双核CPU就不要超过6。如果队列长期保持在3以上,说明任何一个进程运行时都不能马上
【全网首发】从内核源码看 slab 内存池的创建初始化流程
slab cache 机制确实比较复杂,涉及到的场景又很多,大家读到这里,我想肯定会好奇或者怀疑笔者在上篇文章中所论述的那些原理的正确性,毕竟 talk is cheap ,所以为了让大家看着安心,理解起来放心,从本文开始,我们将正式进入 show you the code 的阶段
【全网首发】为什么新版内核将进程pid管理从bitmap替换成了radix-tree?
今天我来给大家聊聊为什么 Linux 内核要将 bitmap 替换成基数树,最后也看看这次替换的性能效果。
使用Perf插件跟踪进程切换信息
CPU 使用率是最直观和最常用的系统性能指标,是在排查性能问题时会关注的第一个指标。而在导致CPU使用率过高的因素中,进程切换问题也是非常常见的。进程上下文切换次数较多的情况下,很容易导致CPU 将大
【全网首发】Linux 中的负载高低和 CPU 开销并不完全对应
负载是查看 Linux 服务器运行状态时很常用的一个性能指标。但是很多同学都没有搞清楚的是,负载高低状态并不是和CPU利用率完全对应的。
【全网首发】一步一图带你构建 Linux 页表体系—详解虚拟内存如何与物理内存进行映射
笔者这次想让虚拟内存和物理内存两者一起动态联动起来,在这个联动的过程中将之前的这些静态知识点统统串联起来,形成一条内存管理的主线
谈谈Linux内核的栈回溯与妙用
前言说起linux内核的栈回溯功能,我想这对每个Linux内核或驱动开发人员来说,太常见了。如下演示的是linux内核崩溃的一个栈回溯打印,有了这个崩溃打印我们能很快定位到在内核哪个函数崩溃,大概在函数什么位置,大大简化了问题排查过程。网上或多或少都能找到栈回溯的一些文章,但是讲的都并不完整,
学习性能优化,如何模拟各种故障场景?
大家好,我是树哥!性能优化这个专题,是每个想成为架构师的小伙伴必须学习的知识。在学习性能优化的过程中,我们要学会各种 Linux 命令和工具去检测服务器的 CPU、内存等资源。很多情况下,我们的 CPU、内存资源都是很平稳的,不利于我们学习这些性能检测命令。今天就介绍一个 Linux 系统压力测
网络编程里的Socket
当今互联网中的大千世界都驻足于TCP/IP协议之上。而通过Socket操作TCP/IP协议已经成为了事实上的标准,Socket甚至已经成为了网络编程的同义词。当然了,由于我们早已习惯于各种封装/框架,很少裸用Socket,所以对它的理解始终有一种模糊的感觉。今天,我就来介绍一下Socket。S
Fork & 写时复制COW原理
本篇文章的内核的代码是 Linux 0.11上一篇文章我们看了计算机系统中的异常和中断是怎么做的,这篇文章我们来看看 fork 是如何利用异常实现进程的创建,以及 COW 实现原理使用fork 函数是一个系统调用函数,它是用来创建一个新的进程,如下:#include <unistd.h
NODE_EXPORTER+PROMETHEUS+GRAFANA 快速实现LINUX系统性能数据提取、存储和可视化展示
1. 前言本文将通过Node_exporter+Prometheus+Grafana三者结合,快速提取Linux内核数据,数据包括但不限于CPU、内存、磁盘、网络IO等,并进行可视化展示。当然,这一套
虚拟机中GUEST OS时钟(TIMEKEEP)问题的探讨
操作系统的时钟处理按理来说应该是个早已成熟的技术,不必再费口舌讨论什么。事实也的确如此。然而在虚拟环境下(不仅仅是xen,vmware这些虚拟机),对时钟的处理可绝非轻而易举,如果你耐心看看你虚拟环境
寻找已经发生高上下文切换问题的原因
作者介绍:张子恒,西安邮电大学研一在读,导师陈莉君老师,刚刚踏入Linux内核学习的小白一枚。段落引用背景介绍:问题:vmstat只能实时统计进程上下文切换的次数,具有一定的局限性,如果已经发生了高上下文切换的情况,那么该如何找到高上下文切换问题的原因在哪?想法:进程切换最核心的地方就
深入理解Linux进程管理
作者简介:程磊,某手机大厂系统开发工程师,阅码场荣誉总编辑,最大的爱好是钻研Linux内核基本原理。目录一、进程基本概念1.1 进程与程序1.2 进程与线程1.3 进程与内核1.4 进程与内存1.5 进程运行状态1.6 进程亲缘关系二、进程的实现2.1 基本原理2.2 进程
Docker容器内DNS异常故障处理
容器DNS异常处理问题详情最近公司开发使用的一个 maven 仓库(nexus) 说同步阿里云Maven 源失败,这个仓库是使用容器部署的。排查问题首先就是登陆到容器, ping www.baidu.com 发现网络不可达,确定是容器网络不能访问外网。第二步查看容器的网络模式,使用的桥
CPU性能指标提取及源码分析
这篇报告主要根据CPU性能指标——运行队列长度、调度延迟和平均负载,对系统的性能影响进行简单分析。
【全网首发】深度解析 slab 内存池回收内存以及销毁全流程
笔者详细地为大家介绍了 slab cache 进行内存分配的整个链路实现,本文我们就来到了 slab cache 最后的一部分内容了,当申请的内存使用完毕之后,下面就该释放内存了。
Linux内核这样学才能学会(内存篇)
哈喽,我是子牙,一个很卷的硬核男人深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果,一年磨一剑,三年先后做了三个课程:手写JVM、手写OS及带你用纯汇编写OS、手写64位多核OS及
利用可挂载内核模块进行高负载处理
概述本程序在谢宝友老师[1]所提供的高负载处理模块的代码[2]基础上,根据5.15版内核的变化,修改出的。本程序是一个内核模块,用于监控系统负载,在平均负载超过4时,打印所有进程的调用栈。本程序分为三个文件:main.c、load.h、Makefile。其中,main.c是本内核模块的主程序;l
通过性能指标学习Linux Kernel - (上)
Linux内核之旅社区联合thoughtworks未济实验室在中科院开源之夏和CCF暑期夏令营活动中发布了13个题目,我们也一直在思考如何让大家通过这次暑期活动更好地提升自己。这次分享是通过具体的一个性能指标,利用现有的工具来定位内核代码,从而圈定学习 Kernel 的目标范围,因此这次分享是想给社
【译】Linux——内存管理是如何工作的?
与 CPU 管理一样,内存管理也是操作系统的核心功能之一。内存主要用于存储系统和应用程序指令、数据、缓存等。内存映射我们通常所说的内存容量,其实是指物理内存。物理内存也称为主内存,大多数计算机使用的主内存是动态随机存取存储器(DRAM)。只有内核可以直接访问物理内存。那么,进程想要访问内存时应该
Linux进程调度技术的前世今生之“今生”
2、O(1)调度器的软件功能划分下图是一个O(1)调度器的软件框架:O(n)调度器中只有一个全局的runqueue,严重影响了扩展性,因此在O(1)调度器中引入了per-CPU runqueue的概念
一次 HTTP/2 通信失败的问题分析
背景某业务上线 HTTP/2 以后,通过 curl 访问某接口一直失败。开发人员怀疑可能是运维的 HTTP/2 配置不当导致访问失败,但是同样是配置 HTTP/2 的其它域名却是正常的,于是来一起看了一下这个问题。
通过性能指标学习Linux Kernel - (下)
上期回顾:通过性能指标学习Linux Kernel - (上)上期我们介绍了atop和proc统计调度延迟的原理,内核还存在很多的基础设施,这些基础设施都是强有⼒的⼯具,我们最终是要落地到 eBPF 中的,在 eBPF 中我个⼈认为关键事件是很关键的⼀环,因为eBPF太精准了,⽽它的精准是精准在
【全网首发】深入理解 slab cache 内存分配全链路实现
最后我们介绍了 slab 所在内存页的详细初始化流程,其中包括了对  slab freelist 链表的初始化,以及 slab 对象的初始化~
【全网首发】万字图文 | 你写的代码是如何跑起来的?
大家好,我是飞哥!今天我们来思考一个简单的问题,一个程
给32位系统装8g内存条能用吗?为什么?
关于32位和64位,这个概念一直让人比较懵。在买电脑的时候,我们看到过32位和64位CPU。下软件的时候,我们也看到过32位或64位的软件。就连装虚拟机的时候,我们也看过32位和64位的系统。在写代码的时候,我们的数值,也可以定义为int32或者int64。我们当然很清楚,装软件的时候,
Linux进程调度技术的前世今生之“前世”
一、前言随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了。这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭。我有一个循序渐进的方法,那就是先不
一文带你搞懂 mmap 技术
当我们对内存特定区域进行读写时,操作系统便会检测到这一操作,然后根据不同场景去做读磁盘或者写磁盘的操作。
白话硬核技术系列开篇:这么多技术我们该怎么学
希望我们每一个人都能够更加高效地学习新技术,节省下来的时间多陪陪家人和朋友
【全网首发】手机性能优化工具的使用思路比较
作者简介李晓辉(微信名:小辉),一线码农,有多年丰富嵌入式操作系统开发工作经验。先后在南大富士通,某手机大厂和初创小公司任软件工程师,系统架构师等职务。对嵌入式系统开发和os性能优化工作很熟悉。背景借助或者研发好的分析工具对系统工程师的工作效率提升很重要系统分析优化工程师的工作职责跟app工
活久见!TCP两次挥手,你见过吗?那四次握手呢?
我们都知道,TCP是个面向连接的、可靠的、基于字节流的传输层通信协议。那这里面提到的"面向连接",意味着需要 建立连接,使用连接,释放连接。建立连接是指我们熟知的TCP三次握手。而使用连接,则是通过一发送、一确认的形式,进行数据传输。还有就是释放连接,也就是我们常见的T
从linux源码看epoll
前言在linux的高性能网络编程中,绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文件描述符并且其中只有少数活跃的时候,表现出无可比拟的优势。epoll能让内核记住所关注的描述符,并在对应的描述符事件就绪的时候,在epoll的就绪链表中添加这些就绪元素,并
Docker踩坑,又涨知识了
背景 新上线一个批处理功能,基于Docker发布的。上线之后出现一个问题,Docker批处理生成的文件目录,别的应用程序无法访问。之前也在使用Docker,但并未涉及到文件共享的问题,还真没留意到。经过一系列排查,终于找到原因。这篇文章就记录一下排查过程中使用到的技术点,也帮大家重温一下。涉
深入理解Linux线程同步
作者简介:程磊,一线码农,在某手机公司担任系统开发工程师;阅码场荣誉总编辑;日常喜欢研究内核基本原理。目录:一、概念解析1.1 名词解释1.2 线程同步与防同步二、线程防同步方法2.1 时间上防同步2.2 空间上防同步2.3 事后防同步三、原子操作3.1 int原子操作3.2
记一次网络相关的技术问题答疑
大家好,我是飞哥!前段时间飞哥参加了一期 OSChina 官方举办的「高手问答」栏目。在这个栏目里,我和 OSChina 的网友们以《深入理解 Linux 网络》为主题,对大家日常所关心的一些问题展开了一些技术探讨。今天我把这个活动中探讨的内容都记录下来,分享给大家!问题1:虚拟化时代,655
多图详解Linux内存分配器slub
slub的数据结构相对于slab来说要简单很多。并且对外接口和slab兼容。所以说,从slab的系统更换到slub,可以说是易如反掌。
mcp内核稳定性问题定位思路与方法
简介任何系统,硬件故障和软件故障都不可避免。比如车载系统,由于汽车行驶过程中的震动,发热,电瓶馈电等,很容易影响电子元件的特性,这对设备是致命的影响,会直接改变程序逻辑及运行结果从而产生各种不可预测的异常情况,本文描述常见问题的排查方法帮助快速排查定位问题所在也提出一些系统性设计来规避这些问题.
【全网首发】盘点内核中常见的CPU性能卡点
评估运行应用程序运行状况时,上下文切换、CPU迁移、缺页中断都是需要被关注的性能指标。
从linux源码看socket的close
笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情。上篇博客讲了socket的阻塞和非阻塞,这篇就开始谈一谈socket的close(以tcp为例且基于linux-2.6.24内核版本)TCP关闭状态转移图:众所周知,TCP的close过程是四次挥手,状态
译 | Linux perf_events Off-CPU Time Flame Graph
I’ve been asked how to do these several times, so here’s a quick blog post.我已经被问过几次如何做到这些,所以这里有一篇简短的博客文章。CPU Flame Graphs are great for understand
Linux上文件监控的踩坑分享
前言在Linux主机安全产品HIDS中,文件监控是特别常见的需求,在实现方案上,Linux内核层提供了文件变动的通知机制fsnotify,然而,在高磁盘IO的主机上、不同版本的内核上以及海量监控目标中,将会面临哪些问题呢?业务性能与安全性如何做更好地取舍均衡?今天,我的小伙伴阿松xjas给大家分
接口响应延迟案例分析
本文以实际案例介绍下:关于接口响应慢时所要排查的一些角度以及在对程序进行分析系统延迟的时候所用到的一些工具。系统延迟的本质是由于cpu在这段时间里没有去及时的运算你的应用程序代码,导致你的应用程序代码在阻塞之后,再被调度回来的整个时间间隔会过长,从用户的角度看,就会表现为整个接口延迟会过高,响应时
宁可信鬼,也不信 iowait 这张嘴!
我们经常遇到iowait这个名词,在top命令中,vmstat中,sar命令中,都有它的身影。很多同学按照经验,当看到iowait非常高的时候,一般判定为磁盘I/O有瓶颈,但这并不完全正确。 io并不是一个可靠值。比如下面几个问题。iowait处于100%时,还能够运行其他CPU密集型应用么?i
【全网首发】你的新进程是如何被内核调度执行到的?
大家好,我是飞哥!在前面的文章《Linux进程是如何创建出来的?》 和 《聊聊Linux中线程和进程的联系与区别》 中我们都讲过了,进程和线程在创建出来后会加入运行队列里面等待被调度。但咱们之前提的太笼统了。所谓的运行队列到底长什么样子、新进程是如何被加入进来的、调度是如何选择一个新进程的、新进
磁盘IO异常排查案例
问题现象服务使用的是golang语言,跟mysql数据库打交道用的是go-mysql-driver,当时系统的测试环境频繁的爆出一个invalid connection的错误,但实际上拿这个sql执行的时候却是正常执行的,也是在正常时间返回的。问题分析首先由于报的是无效连接的错误,首先考虑到是
Linux上文件监控的踩坑分享
在高磁盘IO的主机上、不同版本的内核上以及海量监控目标中,将会面临哪些问题呢?业务性能与安全性如何做更好地取舍均衡?
【译】那些没有人教你的最重要的Linux命令(高手私藏篇)
这些并非常见的必备20个命令,或者10个基础命令,而是一个高手分享的不常见的一些私家命令列表!
如何排查网络丢包问题
要明白一个知识点,首先要快速的对这个知识点建立一个概念模型,有了概念模型之后,再在这个模型上不断的去填充一些细节的东西,会有助于我们把握知识的本质。带宽是什么?带宽是网络被发送的能力,它会受到网卡复制网络包到内核缓冲区或者搬运内核缓冲区的网络包到网卡缓冲区能力的影响,也会受到接收窗口或拥塞窗口的
TCP网络包传输的整个过程
承接上文如何排查网络丢包问题上文对于网络问题分析的还不够精细,比如有时候网络资源可能没有达到瓶颈,并且没有丢包产生,但这个时候网络传输速率就是很慢或者是有丢包产生了,但是却无法知道丢的是具体哪个包,没有办法知道整个tcp传输过程的具体情况,所以需要一种更加精细的去看网络包传递过程的方法即抓包。用
干货|disk.usage告警,看这一遍就够了
看到有线上ECS磁盘告警持续一天了。问了下,已经处理过,该删都删了,但是告警还是消不掉。目前超的不是太多,就没有再管了。如果一直触发告警,担心影响到处理其它重要告警,就花时间去处理一下

有开始,就会有进​步!

在追求性能的道路上,记录每一刻的成长!源码解读,编程技巧,外文翻译,技术实践,线上案例等等,记录自己,启发他人!

专家作者推荐

巡山小汪

关注微信公众号《解Bug之路》,有问题请在公众号中咨询:) 无论多么艰苦的时刻,都不要忘记,辉煌的未来,在你的眼中闪耀!

飞哥开发内功

《深入理解Linux网络》作者,腾讯搜狗十年工程师,公众号「开发内功修炼」作者!

踩刀诗人

聊聊技术,唠唠段子,偶尔做菜写诗,欢迎关注我的公众号 踩刀诗人

Brand

搜索关注微信公众号【架构与思维】:撰稿者为bat、字节的几位高阶研发/架构,专注技术分享。

专题推荐

Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,作为一个ios、androd和web兼容的开发平台,Flutter赢得了很多大厂前端工程师的喜爱,而掌握熟练的Flutter开发和优化技术也是进入阿里系、美团、携程、京东、腾讯等公司必不可少的敲门砖,本周的专题给大家带来的就是Flutter的应用实战,希望大家在阅读的同时多多思考!
8篇文章9513阅读量
如果想透析Linux,深入操作系统的本质,阅读源码是最有效的途径。我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写。透过阅读Linux源码的方式,我们学习到的不光是Linux相关的知识,在我看来更具价值的是学习和体会它们的编程技巧以及对计算机的理解。
8篇文章20826阅读量