我通过阅读各种相关书籍,从操作系统原理.到 Linux内核,再到硬件驱动程序等等.   把观察到的性能问题跟系统原理关联起来,特别是把系统从应用程序.库函数.系统调用.再到内核和硬件等不同的层级贯穿起来.   性能优化是个系统工程,总是牵一发而动全身,它涉及了从程序设计.编程语言,再到系统.存储.网络等各种底层基础设施的方方面面.每一个组件都有可能出问题,而且很有可能多个组件同时出问题.   讲解 Linux 性能的基本指标.工具,以及相应的观测.分析和调优方法.包括 CPU 性能.磁盘 I…
  用户空间内存包括多个不同的内存段,比如只读段.数据段.堆.栈以及文件映射段等.但会发生内存泄漏的内存段,只有堆和文件映射段中的共享内存.   内存泄漏的危害非常大,这些忘记释放的内存,不仅应用程序自己不能访问,系统也不能把它们再次分配给其他应用.内存泄漏不断累积,甚至会耗尽系统内存.最终,系统通过 OOM (Out of Memory)机制杀死进程,但进程在 OOM 前,可能已经引发了一连串导致严重性能问题的现象. (1) vmstat.memleak 工具 # install syssta…
性能优化方法论   动手优化性能之前,需要明确以下三个问题:   (1)如何评估性能优化的效果? 确定性能的量化指标.测试优化前的性能指标.测试优化后的性能指标.   量化指标的选择.至少要从应用程序和系统资源这两个维度,分别选择不同的指标:1)应用程序的维度,我们可以用吞吐量和请求延迟来评估应用程序的性能.2)系统资源的维度,我们可以用 CPU 使用率来评估系统的 CPU 使用情况.   行性能测试注意点:1)避免性能测试工具干扰应用程序的性能:2)避免外部环境的变化影响性能指标的评估.   …
(1)磁盘 I/O 性能指标 文件系统和磁盘 I/O 指标对应的工具 文件系统和磁盘 I/O 工具对应的指标 (2)磁盘 I/O 问题定位分析思路 (3)I/O 性能优化思路 Step 1:首先采用 I/O 基准测试工具得到文件系统或磁盘 I/O 的极限性能,作为优化的目标. Step 2:从应用程序.文件系统以及磁盘角度,分别对 I/O 性能进行优化. 1 文件系统或磁盘 I/O 的基准测试工具:fio ( Flexible I/O Tester ) # Ubuntu apt-get inst…
内存资源紧张时,可能导致的结果 (1)OOM 杀死大内存CPU利用率又低的进程(系统内存耗尽的情况下才生效:OOM 触发的时机是基于虚拟内存,即进程在申请内存时,如果申请的虚拟内存加上服务器实际已用的内存之和,比总的物理内存还大,就会触发 OOM): (2)回收内存 1 )回收文件页(File-backed Page).有两种:   第一种,回收Buffer和Cache.大部分文件页直接回收,以后有需要时,再从磁盘重新读取,脏页先写入磁盘后释放内存.脏页可以通过两种方式写入磁盘:在应用程序中可以…
  Buffer 是缓冲区,而 Cache 是缓存,两者都是数据在内存中的临时存储.   避免跟文中的"缓存"一词混淆,而文中的"缓存",则通指内存中的临时存储. free $ man free buffers Memory used by kernel buffers (Buffers in /proc/meminfo) cache Memory used by the page cache and slabs (Cached and SReclaimable i…
内存主要用来存储系统和应用程序的指令.数据.缓存等. 内存映射   物理内存也称为主存,动态随机访问内存(DRAM).只有内核才可以直接访问物理内存.   Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的.这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存.虚拟地址空间的内部又被分为内核空间和用户空间两部分.      进程在用户态时,只能访问用户空间内存:只有进入内核态后,才可以访问内核空间内存.虽然每个进程的地址空间都包含了内核空间,但这些内核空间,…
缓存命中率   缓存命中率,是指直接通过缓存获取数据的请求次数,占所有数据请求次数的百分比,可以衡量缓存使用的好坏.命中率越高,表示使用缓存带来的收益越高,应用程序的性能也就越好.   实际上,缓存是现在所有高并发系统必需的核心模块,主要作用就是把经常访问的数据(也就是热点数据),提前读入到内存中.这样,下次访问时就可以直接从内存读取数据,而不需要经过硬盘,从而加快应用程序的响应速度.   cachestat 提供了整个操作系统缓存的读写命中情况.   cachetop 提供了每个进程的缓存命中…
网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),简称 OSI 网络模型.OSI 模型把网络互联的框架分为应用层.表示层.会话层.传输层.网络层.数据链路层以及物理层等 七层网络模型,每个层负责不同的功能. 应用层 Application,负责为应用程序提供统一的接口. 表示层 Presentation,负责把数据转换成兼容接收系统…
  CPU使用率是单位时间内CPU使用情况的统计,以百分比方式展示. $ top top - 11:46:45 up 7 days, 11:52, 1 user, load average: 0.00, 0.01, 0.00 Tasks: 198 total, 1 running, 197 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st K…
磁盘   磁盘是可以持久化存储的设备,按照存储介质来分类:   (1)机械磁盘(硬盘驱动器,Hard Disk Driver,HDD),主要由盘片和读写磁头组成,数据就存储在盘片的环状磁道中.在读写数据前,需要移动读写磁头,定位到数据所在的磁道,然后才能访问数据.如果 I/O 请求刚好连续,那就不需要磁道寻址,自然可以获得最佳性能,这就是连续 I/O 的工作原理.与之相对应的,当然就是随机 I/O,它需要不停地移动磁头,来定位数据位置,所以读写速度就会比较慢.机械磁盘的最小读写单位是 512 字…
  软中断(softirq)会导致CPU 使用率升高   中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求.中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力.由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行.并且当CPU执行在中断处理函数中时,不会响应同时发生的又一次中断.   所以为了加快中断处理程序执行和解决中断丢失的问题,Linux将中断分为上半部和…
  linux操作系统是将CPU轮流分配给任务,分时执行的.而每次执行任务时,CPU需要知道CPU寄存器(CPU内置的内存)和程序计数器PC(CPU正在执行指令和下一条指令的位置)值,这些值是CPU执行任务所依赖的环境,也就是CPU上下文.   CPU上下文切换,就是把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,然后加载入新任务的上下文到CPU寄存器和程序计数器中,最后跳转到程序计数器所指的位置,运行新任务.   保存下来的上下文会在系统内核中,并在任务重新调度执行时再次加载进…
每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或 uptime 命令: $ uptime 22:22:17 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88 // 22:22:17 当前时间 up 2 days, 20:14 系统运行时间 1 user 正在登录用户数 // load average 过去 1 分钟.5 分钟.15 分钟的平均负载   平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数…
  磁盘为系统提供了最基本的持久化存储.   文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构. 文件系统:索引节点和目录项   文件系统是对存储设备上的文件,进行组织管理的机制.组织方式不同,就会形成不同的文件系统.   在 Linux 中一切皆文件,不仅普通的文件和目录,就连块设备.套接字.管道等,也都要通过统一的文件系统来管理.   Linux 文件系统为每个文件都分配两个数据结构,索引节点(index node)和目录项(directory entry),分别记录文件的元信息和…
内存性能指标 系统内存指标 已用内存和剩余内存很容易理解,就是已经使用和还未使用的内存. 共享内存是通过 tmpfs 实现的,所以它的大小也就是 tmpfs 使用的内存大小.tmpfs 其实也是一种特殊的缓存. 可用内存是新进程可以使用的最大内存,它包括剩余内存和可回收缓存. 缓存包括两部分,一部分是磁盘读取文件的页缓存,用来缓存从磁盘读取的数据,可以加快以后再次访问的速度.另一部分,则是 Slab 分配器中的可回收内存. 缓冲区是对原始磁盘块的临时存储,用来缓存将要写入磁盘的数据.这样,内核就…
CPU性能指标      (1)CPU使用率:1) 用户态CPU使用率(包括用户态 user 和低优先级用户态 nice).2) 系统CPU使用率.3) 等待 I/O 的CPU使用率.4) 软中断和硬中断的CPU使用率.5) 虚拟机占用的CPU使用率.   (2)平均负载 Load Average:过去 1 分钟.过去 5 分钟和过去 15 分钟的平均负载   (3)进程上下文切换:1) 无法获取资源而导致的自愿上下文切换:2) 被系统强制调度导致的非自愿上下文切换.   (4)CPU缓存命中率…
http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统性能进行优化时需要考虑的因素,以及一些 IO 性能检测工具. 本文的大部分内容来自 IBM Redbook - Linux Performance and Tuning Guidelines FileSystem VFS(Virtual FileSystem) 虚拟文件系统 文件系统是内核的功能,是…
如何学习Linux性能优化? 你是否也曾跟我一样,看了很多书.学了很多 Linux 性能工具,但在面对 Linux 性能问题时,还是束手无策?实际上,性能分析和优化始终是大多数软件工程师的一个痛点.但是,面对难题,我们真的就无解了吗? 固然,性能问题的复杂性增加了学习难度,但这并不能成为我们进阶路上的“拦路虎”.在我看来,大多数人对性能问题“投降”,原因可能只有两个. 一个是你没找到有效的方法学原理,一听到“系统”.“底层”这些词就发怵,觉得东西太难自己一定学不会,自然也就无法深入学下去,从而不…
参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记:第五讲 Linux性能优化实战学习笔记:第六讲 Linux性能优化实战学习笔记:第七讲 Linux性能优化实战学习笔记:第八讲 Linux性能优化实战学习笔记:第九讲 Linux性能优化实战学习笔记:第十讲 Linux性能优化实战学习笔记:第十一讲 Linux性能优化实战学习笔记:第十二讲 Linux性能优化…
Linux性能优化-平均负载 目录 Linux性能优化-平均负载 平均负载的含义 平均负载为多少时合理 平均负载与 CPU 使用率 平均负载案例分析 场景一:CPU 密集型进程 场景二:I/O 密集型进程 场景三:大量进程的场景 当系统变得卡顿时,我们通常会通过top或者uptime命令来了解系统负载情况. $ uptime 19:47:30 up 6:00, 1 user, load average: 0.00, 0.01, 0.05 前3列分别是当前时间.系统运行的时间以及正在登录的用户数…
iOS性能优化:Instruments使用实战   最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instruments使用技巧 关于Instruments官方有一个很有用的用户使用Guide,当然如果不习惯官方英文可以在这里找到中文本翻译版本PDF参阅.Instruments 确实是一个很强大的工具,用它来收集关于一个或多个系统进程的性能和行为的数据极为方便,并能及时跟踪随着时间产生的数据.还可以广泛收集不同类型…
前情概述 进程调度 老板 cpu 任劳任怨的打工仔 线程 工作在做什么 可运行队列 拥有的工作清单 上下文切换 和老板沟通以便得到老板的想法并及时调整自己的工作 中断 部分工作做完以后还需要及时向老板汇报 谁在消耗cpu 用户 vs 内核 库时间 vs 应用程序时间 IO等待(cpu实际上空闲) 优化系统流程 无码高清图片链接 参考 <Linux 性能优化> 性能优化中的cpu.内存.磁盘…
下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"…
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share xgboost入门与实战(原理篇) 前言: xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快…
平均负载 指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,即平均活跃进程数 可运行状态:正在使用CPU或者正在等待CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态 (Running 或者 Runnable)的进程 不可中断状态:正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态 (Uninterruptible Sleep, 也称为 Disk Sleep )的进程 平均负载为多…
一.上节回顾 上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路. 虽然 I/O 的性能指标很多,相应的性能分析工具也有好几个,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联. 顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈分析思路,其实并不难.找出了 I/O 的性能瓶颈后,下一步要做的就是优化了,也就是如何以最快的速度完成 I/O 操作,或者换个思路,减少甚至避免磁盘的 I/O 操作.…
一.上节总结回顾 上一节,我们回顾了经典的 C10K 和 C1000K 问题.简单回顾一下,C10K 是指如何单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 则是单机支持处理 100 万个请求(并发连接 100 万)的问题. I/O 模型的优化,是解决 C10K 问题的最佳良方.Linux 2.6 中引入的 epoll,完美解决了C10K 的问题,并一直沿用至今.今天的很多高性能网络方案,仍都基于 epoll. 自然,随着互联网技术的普及,催生出更高的性能需求.从 C10…
一.上节回顾 专栏更新至今,四大基础模块的最后一个模块——网络篇,我们就已经学完了.很开心你还没有掉队,仍然在积极学习思考和实践操作,热情地留言和互动.还有不少同学分享了在实际生产环境中,碰到各种性能问题的分析思路和优化方法,这里也谢谢你们. 今天是性能优化答疑的第五期.照例,我从网络模块的留言中,摘出了一些典型问题,作为今天的答疑内容,集中回复.同样的,为了便于你学习理解,它们并不是严格按照文章顺序排列的. 每个问题,我都附上了留言区提问的截屏.如果你需要回顾内容原文,可以扫描每个问题右下方的…
一.上节回顾 上一节,我们一起学习了怎么使用动态追踪来观察应用程序和内核的行为.先简单来回顾一下.所谓动态追踪,就是在系统或者应用程序还在正常运行的时候,通过内核中提供的探针,来动态追踪它们的行为,从而辅助排查出性能问题的瓶颈. 使用动态追踪,便可以在不修改代码也不重启服务的情况下,动态了解应用程序或者内核的行为.这对排查线上的问题.特别是不容易重现的问题尤其有效. 在 Linux 系统中,常见的动态追踪方法包括 ftrace.perf.eBPF/BCC 以及 SystemTap 等. 使用 p…