11 2020 档案

摘要:上一节,我们学习了内存性能中 Buffer 和 Cache 的概念。简单复习一下,Buffer 和 Cache 的设计目的,是为了提升系统的 I/O 性能。它们利用内存,充当起慢速磁盘与快速 CPU 之间的桥梁,可以加速 I/O 的访问速度。 Buffer 和 Cache 分别缓存的是对磁盘和文件系 阅读全文
posted @ 2020-11-30 11:42 元贞 阅读(447) 评论(0) 推荐(0)
摘要:上一节,我们梳理了 Linux 内存管理的基本原理,并学会了用 free 和 top 等工具,来查看系统和进程的内存使用情况。 在今天的内容开始之前,我们先来回顾一下系统的内存使用情况,比如下面这个 free 输出界面: # 注意不同版本的 free 输出可能会有所不同 $ free total u 阅读全文
posted @ 2020-11-30 11:11 元贞 阅读(1058) 评论(0) 推荐(0)
摘要:前几节我们一起学习了 CPU 的性能原理和优化方法,接下来,我们将进入另一个板块——内存。 同 CPU 管理一样,内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应用程序的指令、数据、缓存等。 那么,Linux 到底是怎么管理内存的呢?今天,我就来带你一起来看看这个问题。 内存映射 说到 阅读全文
posted @ 2020-11-30 10:51 元贞 阅读(343) 评论(0) 推荐(0)
摘要:问题 1:性能工具版本太低,导致指标不全 这是使用 CentOS 的同学普遍碰到的问题。在文章中,我的 pidstat 输出里有一个 %wait 指标,代表进程等待 CPU 的时间百分比,这是 systat 11.5.5 版本才引入的新指标,旧版本没有这一项。而 CentOS 软件库里的 sysst 阅读全文
posted @ 2020-11-28 18:12 元贞 阅读(291) 评论(0) 推荐(0)
摘要:上一节我们一起回顾了常见的 CPU 性能指标,梳理了核心的 CPU 性能观测工具,最后还总结了快速分 析 CPU 性能问题的思路。虽然 CPU 的性能指标很多,相应的性能分析工具也很多,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。 顺着这些关系往下理解,你就会发现,掌握这些常用的瓶颈 阅读全文
posted @ 2020-11-28 18:01 元贞 阅读(1022) 评论(0) 推荐(0)
摘要:CPU 的性能指标那么多,CPU 性能分析工具也是一抓一大把,如果离开专栏,换成实际的工作场景,我又该观察什么指标、选择哪个性能工具呢? 不要担心,今天我就以多年的性能优化经验,给你总结出一个“又快又准”的瓶颈定位套路,告诉你在不同场景下,指标工具怎么选,性能瓶颈怎么找。 CPU 性能指标 我们先来 阅读全文
posted @ 2020-11-27 16:57 元贞 阅读(321) 评论(0) 推荐(0)
摘要:上一期我给你讲了软中断的基本原理,我们先来简单复习下。 中断是一种异步的事件处理机制,用来提高系统的并发处理能力。中断事件发生,会触发执行中断处理程序,而中断处理程序被分为上半部和下半部这两个部分。 上半部对应硬中断,用来快速处理中断; 下半部对应软中断,用来异步处理上半部未完成的工作。 Linux 阅读全文
posted @ 2020-11-27 16:54 元贞 阅读(829) 评论(0) 推荐(0)
摘要:上一期,我用一个不可中断进程的案例,带你学习了 iowait(也就是等待 I/O 的 CPU 使用率)升高时的分析方法。这里你要记住,进程的不可中断状态是系统的一种保护机制,可以保证硬件的交互过程不被意外打断。所以,短时间的不可中断状态是很正常的。 但是,当进程长时间都处于不可中断状态时,你就得当心 阅读全文
posted @ 2020-11-27 16:22 元贞 阅读(593) 评论(0) 推荐(0)
摘要:上一节,我给你讲了 Linux 进程状态的含义,以及不可中断进程和僵尸进程产生的原因,我们先来简单复习下。 使用 ps 或者 top 可以查看进程的状态,这些状态包括运行、空闲、不可中断睡眠、可中断睡眠、僵尸以及暂停等。其中,我们重点学习了不可中断状态和僵尸进程: 不可中断状态,一般表示进程正在跟硬 阅读全文
posted @ 2020-11-27 16:06 元贞 阅读(309) 评论(0) 推荐(0)
摘要:上一节,我用一个 Nginx+PHP 的案例,给你讲了服务器 CPU 使用率高的分析和应对方法。这里你一定要记得,当碰到无法解释的 CPU 使用率问题时,先要检查一下是不是短时应用在捣鬼。 短时应用的运行时间比较短,很难在 top 或者 ps 这类展示系统概要和进程快照的工具中发现,你需要使用记录事 阅读全文
posted @ 2020-11-27 15:47 元贞 阅读(416) 评论(0) 推荐(0)
摘要:上一节我讲了 CPU 使用率是什么,并通过一个案例教你使用 top、vmstat、pidstat 等工具,排查高 CPU 使用率的进程,然后再使用 perf top 工具,定位应用内部函数的问题。不过就有人留言了,说似乎感觉高 CPU 使用率的问题,还是挺容易排查的。 那是不是所有 CPU 使用率高 阅读全文
posted @ 2020-11-27 15:42 元贞 阅读(319) 评论(0) 推荐(0)
摘要:通过前两节对平均负载和 CPU 上下文切换的学习,我相信你对 CPU 的性能已经有了初步了解。不过我还是想问一下,在学这个专栏前,你最常用什么指标来描述系统的 CPU 性能呢?我想你的答案,可能不是平均负载,也不是 CPU 上下文切换,而是另一个更直观的指标—— CPU 使用率。 我们前面说过,CP 阅读全文
posted @ 2020-11-27 15:34 元贞 阅读(654) 评论(0) 推荐(0)
摘要:上一节,我给你讲了 CPU 上下文切换的工作原理。简单回顾一下,CPU 上下文切换是保证 Linux 系统正常工作的一个核心功能,按照不同场景,可以分为进程上下文切换、线程上下文切换和中断上下文切换。具体的概念和区别,你也要在脑海中过一遍,忘了的话及时查看上一篇。 今天我们就接着来看,究竟怎么分析 阅读全文
posted @ 2020-11-27 15:29 元贞 阅读(333) 评论(0) 推荐(0)
摘要:上一节,我给你讲了要怎么理解平均负载( Load Average),并用三个案例展示了不同场景下平均负载升高的分析方法。这其中,多个进程竞争 CPU 就是一个经常被我们忽视的问题。我想你一定很好奇,进程在竞争 CPU 的时候并没有真正运行,为什么还会导致系统的负载升高呢?看到今天的主题,你应该已经猜 阅读全文
posted @ 2020-11-27 15:24 元贞 阅读(292) 评论(0) 推荐(0)
摘要:每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况。比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果。 $ uptime 02:34:03 up 2 days, 20:14, 1 user, load average 阅读全文
posted @ 2020-11-27 14:26 元贞 阅读(329) 评论(0) 推荐(0)
摘要:问题 1:阻塞、非阻塞 I/O 与同步、异步 I/O 的区别和联系 在文件系统的工作原理篇中,介绍了阻塞、非阻塞 I/O 以及同步、异步 I/O 的含义,这里我们再简单回顾一下。首先我们来看阻塞和非阻塞 I/O。根据应用程序是否阻塞自身运行,可以把 I/O 分为阻塞 I/O 和非阻塞 I/O。所谓阻 阅读全文
posted @ 2020-11-25 17:41 元贞 阅读(300) 评论(0) 推荐(0)
摘要:上一节,我们一起回顾了常见的文件系统和磁盘 I/O 性能指标,梳理了核心的 I/O 性能观测工具,最后还总结了快速分析 I/O 性能问题的思路。 虽然 I/O 的性能指标很多,相应的性能分析工具也有好几个,但理解了各种指标的含义后,你就会发现它们其实都有一定的关联。 顺着这些关系往下理解,你就会发现 阅读全文
posted @ 2020-11-25 17:13 元贞 阅读(1102) 评论(0) 推荐(0)
摘要:前几节学习中,我们通过几个案例,分析了各种常见的 I/O 性能问题。通过这些实战操作,你应该已经熟悉了 I/O 性能问题的分析和定位思路,也掌握了很多 I/O 性能分析的工具。 不过,我想你可能还是会困惑,如果离开专栏,换成其他的实际工作场景,案例中提到的各种性能指标和工具,又该如何选择呢? 上一节 阅读全文
posted @ 2020-11-25 12:10 元贞 阅读(385) 评论(0) 推荐(0)
摘要:在访问商品搜索接口时,我们发现接口的响应特别慢。通过对系统 CPU、内存和磁盘 I/O 等资源使用情况的分析,我们发现这时出现了磁盘的 I/O 瓶颈,并且正是案例应用导致的。 接着,我们借助 pidstat,发现罪魁祸首是 mysqld 进程。我们又通过 strace、lsof,找出了 mysqld 阅读全文
posted @ 2020-11-25 09:23 元贞 阅读(699) 评论(0) 推荐(0)
摘要:你好,我是张磊。今天我和你分享的主题是:容器化守护进程的意义之 DaemonSet。 在上一篇文章中,我和你详细分享了使用 StatefulSet 编排“有状态应用”的过程。从中不难看出,StatefulSet 其实就是对现有典型运维业务的容器化抽象。也就是说,你一定有方法在不使用 Kubernet 阅读全文
posted @ 2020-11-24 11:34 元贞 阅读(384) 评论(0) 推荐(0)
摘要:上一节,我们分析了一个单词热度应用响应过慢的案例。当用 top、iostat 分析了系统的 CPU 和磁盘 I/O 使用情况后,我们发现系统出现了磁盘的 I/O 瓶颈,而且正是案例应用导致的。 接着,在使用 strace 却没有任何发现后,我又给你介绍了两个新的工具 filetop 和 opensn 阅读全文
posted @ 2020-11-24 11:09 元贞 阅读(359) 评论(0) 推荐(0)
摘要:上一节,我们研究了一个狂打日志引发 I/O 性能问题的案例,先来简单回顾一下。 日志,是了解应用程序内部运行情况,最常用也是最有效的工具。日志一般会分为调试、信息、警告、错误等多个不同级别。 通常,生产环境只用开启警告级别的日志,这一般不会导致 I/O 问题。但在偶尔排查问题时,可能需要我们开启调试 阅读全文
posted @ 2020-11-24 09:47 元贞 阅读(1120) 评论(0) 推荐(0)
摘要:前两节,学了文件系统和磁盘的 I/O 原理,复习一下。 文件系统,是对存储设备上的文件进行组织管理的一种机制。为了支持各类不同的文件系统,Linux 在各种文件系统上,抽象了一层虚拟文件系统 VFS。 它定义了一组所有文件系统都支持的数据结构和标准接口。这样,应用程序和内核中的其他子系统,就只需要跟 阅读全文
posted @ 2020-11-24 00:22 元贞 阅读(270) 评论(0) 推荐(0)
摘要:上一节我们学习了 Linux 磁盘 I/O 的工作原理,并了解了由文件系统层、通用块层和设备层构成的 Linux 存储系统 I/O 栈。 其中,通用块层是 Linux 磁盘 I/O 的核心。向上,它为文件系统和应用程序,提供访问了块设备的标准接口;向下,把各种异构的磁盘设备,抽象为统一的块设备,并会 阅读全文
posted @ 2020-11-23 21:55 元贞 阅读(255) 评论(0) 推荐(0)
摘要:上一节,我们学习了 Linux 文件系统的工作原理。简单回顾一下,文件系统是对存储设备上的文件,进行组织管理的一种机制。而 Linux 在各种文件系统实现上,又抽象了一层虚拟文件系统 VFS,它定义了一组,所有文件系统都支持的,数据结构和标准接口。 这样,对应用程序来说,只需要跟 VFS 提供的统一 阅读全文
posted @ 2020-11-23 20:53 元贞 阅读(407) 评论(0) 推荐(0)
摘要:通过前面 CPU 和内存模块的学习,我相信,你已经掌握了 CPU 和内存的性能分析以及优化思路。从这一节开始,我 们将进入下一个重要模块——文件系统和磁盘的 I/O 性能。 同 CPU、内存一样,磁盘和文件系统的管理,也是操作系统最核心的功能。 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘 阅读全文
posted @ 2020-11-23 17:44 元贞 阅读(497) 评论(0) 推荐(0)
摘要:问题 1:网络收发过程中缓冲区的位置 第一点,是网络收发过程中,收发队列和缓冲区位置的疑问。 在 关于 Linux 网络,你必须要知道这些 中,我曾介绍过 Linux 网络的收发流程。这个流程涉及到了多个队列和缓冲区,包括: 网卡收发网络包时,通过 DMA 方式交互的环形缓冲区; 网卡中断处理程序为 阅读全文
posted @ 2020-11-23 15:48 元贞 阅读(441) 评论(0) 推荐(0)
摘要:在优化网络的性能时,你可以结合 Linux 系统的网络协议栈和网络收发流程,然后从应用程序、套接字、传输层、网络层再到链路层等每个层次,进行逐层优化。上一期我们主要学习了应用程序和套接字的优化思路,比如: 在应用程序中,主要优化 I/O 模型、工作模型以及应用层的网络协议; 在套接字层中,主要优化套 阅读全文
posted @ 2020-11-23 15:41 元贞 阅读(407) 评论(0) 推荐(0)
摘要:上一节,我们了解了 NAT(网络地址转换)的原理,学会了如何排查 NAT 带来的性能问题,最后还总结了 NAT 性能优化的基本思路。我先带你简单回顾一下。 NAT 基于 Linux 内核的连接跟踪机制,实现了 IP 地址及端口号重写的功能,主要被用来解决公网 IP 地址短缺的问题。 在分析 NAT 阅读全文
posted @ 2020-11-23 15:13 元贞 阅读(1001) 评论(0) 推荐(0)
摘要:上一节,我们学习了 NAT 的原理,明白了如何在 Linux 中管理 NAT 规则。先来简单复习一下。 NAT 技术能够重写 IP 数据包的源 IP 或目的 IP,所以普遍用来解决公网 IP 地址短缺的问题。它可以让网络中的多台主机,通过共享同一个公网 IP 地址,来访问外网资源。同时,由于 NAT 阅读全文
posted @ 2020-11-23 11:07 元贞 阅读(907) 评论(0) 推荐(0)
摘要:上一节,探究了网络延迟增大问题的分析方法,并通过一个案例,掌握了如何用 hping3、tcpdump、Wireshark、strace 等工具,来排查和定位问题的根源。 简单回顾一下,网络延迟是最核心的网络性能指标。由于网络传输、网络包处理等各种因素的影响,网络延迟不可避免。但过大的网络延迟,会直接 阅读全文
posted @ 2020-11-23 10:51 元贞 阅读(1087) 评论(0) 推荐(0)
摘要:上一节,学习了碰到分布式拒绝服务(DDoS)的缓解方法。简单回顾一下,DDoS 利用大量的伪造请求,导致目标服务要耗费大量资源,来处理这些无效请求,进而无法正常响应正常用户的请求。 由于 DDoS 的分布式、大流量、难追踪等特点,目前确实还没有方法,能够完全防御 DDoS 带来的问题,我们只能设法缓 阅读全文
posted @ 2020-11-23 10:30 元贞 阅读(806) 评论(0) 推荐(0)
摘要:上一节,学习了 tcpdump 和 Wireshark 的使用方法,并通过几个案例,带你用这两个工具实际分析了网络的收发过程。碰到网络性能问题,不要忘记可以用 tcpdump 和 Wireshark 这两个大杀器,抓取实际传输的网络包,排查潜在的性能问题。 今天,来看另外一个问题,怎么缓解 DDoS 阅读全文
posted @ 2020-11-22 23:39 元贞 阅读(560) 评论(0) 推荐(0)
摘要:通常,需要暴露到公网的服务,都会绑定一个域名,既方便了人们记忆,也避免了后台服务 IP 地址的变更影响到用户。 不过要注意,DNS 解析受到各种网络状况的影响,性能可能不稳定。比如公网延迟增大,缓存过期导致要重新去上游服务器请求,或者流量高峰时 DNS 服务器性能不足等,都会导致 DNS 响应的延迟 阅读全文
posted @ 2020-11-22 20:45 元贞 阅读(792) 评论(0) 推荐(0)
摘要:简单回顾一下,Linux 网络基于 TCP/IP 协议栈构建,而在协议栈的不同层,我们所关注的网络性能也不尽相同。 在应用层,我们关注的是应用程序的并发连接数、每秒请求数、处理延迟、错误数等,可以使用 wrk、JMeter 等工具,模拟用户的负载,得到想要的测试结果。 而在传输层,我们关注的是 TC 阅读全文
posted @ 2020-11-22 19:44 元贞 阅读(1715) 评论(0) 推荐(0)
摘要:上一节,回顾了经典的 C10K 和 C1000K 问题。简单回顾一下,C10K 是指如何单机同时处理 1 万个请求(并发连接 1 万)的问题,而 C1000K 则是单机支持处理 100 万个请求(并发连接 100 万)的问题。 I/O 模型的优化,是解决 C10K 问题的最佳良方。Linux 2.6 阅读全文
posted @ 2020-11-22 15:05 元贞 阅读(626) 评论(0) 推荐(0)
摘要:前面内容,学习了 Linux 网络的基础原理以及性能观测方法。简单回顾一下,Linux 网络基于 TCP/IP 模型,构建了其网络协议栈,把繁杂的网络功能划分为应用层、传输层、网络层、网络接口层等四个不同的层次,既解决了网络环境中设备异构的问题,也解耦了网络协议的复杂性。 基于 TCP/IP 模型, 阅读全文
posted @ 2020-11-22 14:18 元贞 阅读(3513) 评论(0) 推荐(3)
摘要:上一节,学习了 Linux 网络的基础原理。简单回顾一下,Linux 网络根据 TCP/IP 模型,构建其网络协议栈。TCP/IP 模型由应用层、传输层、网络层、网络接口层等四层组成,这也是 Linux 网络栈最核心的构成部分。 应用程序通过套接字接口发送数据包时,先要在网络协议栈中从上到下逐层处理 阅读全文
posted @ 2020-11-22 11:23 元贞 阅读(377) 评论(0) 推荐(0)
摘要:前几节,我们一起学习了文件系统和磁盘 I/O 的工作原理,以及相应的性能分析和优化方法。接下来,我们将进入下一个重要模块—— Linux 的网络子系统。 由于网络处理的流程最复杂,跟我们前面讲到的进程调度、中断处理、内存管理以及 I/O 等都密不可分,所以,我把网络模块作为最后一个资源模块来讲解。 阅读全文
posted @ 2020-11-22 10:37 元贞 阅读(468) 评论(0) 推荐(0)
摘要:The Open Systems Interconnection (OSI) model defines a networking framework to implement protocols in layers, with control passed from one layer to th 阅读全文
posted @ 2020-11-20 10:13 元贞 阅读(436) 评论(0) 推荐(0)
摘要:在前面讲解容器基础时,我曾经提到过一个 Linux 容器能看见的“网络栈”,实际上是被隔离在它自己的 Network Namespace 当中的。 网络栈 而所谓“网络栈”,就包括了:网卡(Network Interface)、回环设备(Loopback Device)、路由表(Routing Ta 阅读全文
posted @ 2020-11-20 10:05 元贞 阅读(503) 评论(0) 推荐(0)
摘要:功能说明 Sed是Strem Editor(流编辑器)缩写,是操作、过滤和转换文本内容的强大工具。常用功能有增删改查,过滤,取行。 [root@oldboy ~]# sed --version #→ sed软件版本GNU sed version 4.2.1 语法格式 sed [options] [s 阅读全文
posted @ 2020-11-17 21:29 元贞 阅读(190) 评论(0) 推荐(0)
摘要:1. Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中 阅读全文
posted @ 2020-11-17 20:44 元贞 阅读(269) 评论(0) 推荐(0)
摘要:今天我和你分享的主题是:深入解析 Pod 对象之基本概念。 在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念。而在今天这篇文章中,我会和你分享 Pod 对象的更多细节。 现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位。将 阅读全文
posted @ 2020-11-12 21:03 元贞 阅读(291) 评论(0) 推荐(0)