文章分类 -  Linux性能优化实战

摘要:一:引言 上一节,我通过一个斐波那契数列的案例,带你学习了内存泄漏的分析。如果在程序中直接或间接地分配了动态内存,你一定要记得释放掉它们,否则就会导致内存泄漏,严重时甚至会耗尽系统内存。 不过,反过来讲,当发生了内存泄漏时,或者运行了大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢? 阅读全文
posted @ 2020-04-15 17:58 痞子胥 阅读(288) 评论(0) 推荐(0)
摘要:一:引言 (1):对普通进程来说,能看到的其实是内核提供的虚拟内存,这些虚拟内存还需要通过页表,由系统映射为物理内存。 (2):当进程通过 malloc() 申请虚拟内存后,系统并不会立即为其分配物理内存,而是在首次访问时,才通过缺页异常陷入内核中分配内存。 (3):为了协调 CPU 与磁盘间的性能 阅读全文
posted @ 2020-04-15 15:05 痞子胥 阅读(1470) 评论(0) 推荐(0)
摘要:一:引言: 上一节,我们学习了内存性能中 Buffer 和 Cache 的概念。简单复习一下,Buffer 和 Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速 CPU 之间的桥梁,可以加速 I/O 的访问速度。 1:Buffer 和 Cache 分别缓存的 阅读全文
posted @ 2020-04-14 17:54 痞子胥 阅读(432) 评论(0) 推荐(0)
摘要:引言:上一节,我们梳理了 Linux 内存管理的基本原理,并学会了用 free 和 top 等工具,来查看系统和进程的内存使用情况。 内存和 CPU 的关系非常紧密,而内存管理本身也是很复杂的机制,所以感觉知识很硬核、很难啃,都是正常的。但还是那句话,初学时不用非得理解所有内容,继续往后学,多理解相 阅读全文
posted @ 2020-04-13 17:37 痞子胥 阅读(1281) 评论(0) 推荐(0)
摘要:内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等 一:内存映射 说到内存,你能说出你现在用的这台计算机内存有多大吗?我估计你记得很清楚,因为这是我们购买时,首先考虑的一个重要参数,比方说,我的笔记本电脑内存就是 8GB 的 。 我们通常所说的内存容量,就像我刚 阅读全文
posted @ 2020-04-13 15:54 痞子胥 阅读(168) 评论(0) 推荐(0)
摘要:一:性能优化方法论 问题1:在我们历经千辛万苦,通过各种性能分析方法,终于找到引发性能问题的瓶颈后,是不是立刻就要开始优化了呢?别急,动手之前,你可以先看看下面这三个问题。 (1):首先,既然要做性能优化,那要怎么判断它是不是有效呢?特别是优化后,到底能提升多少性能呢? (2):第二,性能问题通常不 阅读全文
posted @ 2020-03-28 15:20 痞子胥 阅读(998) 评论(0) 推荐(0)
摘要:一:引言 前几节里,我通过几个案例,带你分析了各种常见的 CPU 性能问题。通过这些,我相信你对 CPU 的性能分析已经不再陌生和恐惧,起码有了基本的思路,也了解了不少 CPU 性能的分析工具。 不过,我猜你可能也碰到了一个我曾有过的困惑: CPU 的性能指标那么多,CPU 性能分析工具也是一抓一大 阅读全文
posted @ 2020-03-28 14:13 痞子胥 阅读(382) 评论(0) 推荐(0)
摘要:一:top命令: (1):作用:top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器; (2):参数详解: 第一行:任务队列消息:同 uptime 命令的执行结果 (1):系统时间 (2):系统运行了多长时间 (3):当前登录用户数 阅读全文
posted @ 2020-03-27 17:26 痞子胥 阅读(610) 评论(0) 推荐(0)
摘要:上一期我给你讲了软中断的基本原理,我们先来简单复习下。 中断是一种异步的事件处理机制,用来提高系统的并发处理能力。中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分。 (1):上半部对应硬中断,用来快速处理中断; (2):下半部对应软中断,用来异步处理上半部未完成的工 阅读全文
posted @ 2020-03-26 18:06 痞子胥 阅读(873) 评论(0) 推荐(0)
摘要:上一期,我用一个不可中断进程的案例,带你学习了 iowait(也就是等待 I/O 的 CPU 使用率)升高时的分析方法。这里你要记住,进程的不可中断状态是系统的一种保护机制,可以保证硬件的交互过程不被意外打断。所以,短时间的不可中断状态是很正常的。 但是,当进程长时间都处于不可中断状态时,你就得当心 阅读全文
posted @ 2020-03-26 17:52 痞子胥 阅读(540) 评论(0) 推荐(0)
摘要:上一节,我给你讲了 Linux 进程状态的含义,以及不可中断进程和僵尸进程产生的原因,我们先来简单复习下。 使用 ps 或者 top 可以查看进程的状态,这些状态包括运行、空闲、不可中断睡眠、可中断睡眠、僵尸以及暂停等。其中,我们重点学习了不可中断状态和僵尸进程: (1):不可中断状态,一般表示进程 阅读全文
posted @ 2020-03-26 15:47 痞子胥 阅读(240) 评论(0) 推荐(0)
摘要:上一节,我用一个 Nginx+PHP 的案例,给你讲了服务器 CPU 使用率高的分析和应对方法。这里你一定要记得,当碰到无法解释的 CPU 使用率问题时,先要检查一下是不是短时应用在捣鬼。短时应用的运行时间比较短,很难在 top 或者 ps 这类展示系统概要和进程快照的工具中发现,你需要使用记录事件 阅读全文
posted @ 2020-03-26 13:23 痞子胥 阅读(218) 评论(0) 推荐(0)
摘要:一:问题引用:上一节我讲了 CPU 使用率是什么,并通过一个案例教你使用 top、vmstat、pidstat 等工具,排查高 CPU 使用率的进程,然后再使用 perf top 工具,定位应用内部函数的问题。不过就有人留言了,说似乎感觉高 CPU 使用率的问题,还是挺容易排查的。 那是不是所有 C 阅读全文
posted @ 2020-03-26 10:36 痞子胥 阅读(541) 评论(0) 推荐(0)
摘要:通过前两节对平均负载和 CPU 上下文切换的学习,我相信你对 CPU 的性能已经有了初步了解。不过我还是想问一下,在学这个专栏前,你最常用什么指标来描述系统的 CPU 性能呢?我想你的答案,可能不是平均负载,也不是 CPU 上下文切换,而是另一个更直观的指标—— CPU 使用率。 我们前面说过,CP 阅读全文
posted @ 2020-03-20 19:30 痞子胥 阅读(711) 评论(0) 推荐(0)
摘要:上一节,我给你讲了 CPU 上下文切换的工作原理。简单回顾一下,CPU 上下文切换是保证 Linux 系统正常工作的一个核心功能,按照不同场景,可以分为进程上下文切换、线程上下文切换和中断上下文切换。具体的概念和区别,你也要在脑海中过一遍,忘了的话及时查看上一篇。 今天我们就接着来看,究竟怎么分析 阅读全文
posted @ 2020-03-18 17:25 痞子胥 阅读(381) 评论(0) 推荐(0)
摘要:上一节,我给你讲了要怎么理解平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法。这其中,多个进程竞争 CPU 就是一个经常被我们忽视的问题。 我想你一定很好奇,进程在竞争 CPU 的时候并没有真正运行,为什么还会导致系统的负载升高呢?看到今天的主题,你应该已经 阅读全文
posted @ 2020-03-18 15:22 痞子胥 阅读(213) 评论(0) 推荐(0)
摘要:一:uptime 列表含义 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。 当前时间 系统运行时间 正在登录的用户数 而最后三个数字呢,依次则是过去 1 分钟、 阅读全文
posted @ 2020-03-17 16:53 痞子胥 阅读(579) 评论(0) 推荐(0)
摘要:其实,性能问题并没有你想像得那么难,只要你理解了应用程序和系统的少数几个基本原理,再进行大量的实战练习,建立起整体性能的全局观,大多数性能问题的优化就会水到渠成。 我见过很多工程师,在分析应用程序所使用的第三方组件的性能时,并不熟悉这些组件所用的编程语言,却依然可以分析出线上问题的根源,并能通过一些 阅读全文
posted @ 2020-03-16 10:17 痞子胥 阅读(191) 评论(0) 推荐(0)