随笔分类 -  Linux性能优化

摘要:问题1:网络收发过程中缓冲区的位置 网卡收发网络包时,通过DMA方式交互的环形缓冲区 网卡中断处理程序为网络帧分配的,内核数据结构sk_buff缓冲区 网卡中断处理程序为网络帧分配的,内核数据结构sk_buff缓冲区 首先,这些缓冲区的位置在哪儿? 是在网卡硬件中,还是在内存中? 这个问题其实仔细想 阅读全文
posted @ 2021-12-31 15:14 李成果 阅读(172) 评论(0) 推荐(0) 编辑
摘要:网络性能优化 传输层 传输层最重要的是TCP和UDP协议,所以这儿的优化,其实主要就是对这两种协议的优化 TCP协议的优化 TCP提供了面向连接的可靠传输服务 要优化TCP首先要掌握TCP协议的基本原理 比如流量控制、慢启动、拥塞避免、延迟确认以及状态流图(如下图所示)等 分几类情况详细说明 第一类 阅读全文
posted @ 2021-12-31 14:32 李成果 阅读(437) 评论(0) 推荐(0) 编辑
摘要:确定优化目标 跟CPU和I/O方面的性能优化一样,优化前先考虑网络性能优化的目标是什么? 换句话说观察到的网络性能指标,要达到多少才合适呢? 实际上虽然网络性能优化的整体目标,是降低网络延迟(如RTT)和提高吞吐量(如BPS和PPS) 但具体到不同应用中,每个指标的优化标准可能会不同,优先级顺序也大 阅读全文
posted @ 2021-12-31 11:53 李成果 阅读(666) 评论(0) 推荐(0) 编辑
摘要:案例准备 服务器准备 buntu 18.04 机器配置:2CPU,4GB内存 预先安装docker、tcpdump、curl、ab、SystemTap等工具 # Ubuntu $ apt-get install -y docker.io tcpdump curl apache2-utils # Ce 阅读全文
posted @ 2021-12-31 11:00 李成果 阅读(184) 评论(0) 推荐(0) 编辑
摘要:NAT原理 NAT技术可以重写IP数据包的源IP或者目的IP,被普遍地用来解决公网IP地址短缺的问题 它的主要原理就是,网络中的多台主机,通过共享同一个公网IP地址,来访问外网资源 同时,由于NAT屏蔽了内网网络,自然也就为局域网中的机器提供了安全隔离 既可以在支持网络地址转换的路由器(称为 NAT 阅读全文
posted @ 2021-12-30 16:59 李成果 阅读(552) 评论(0) 推荐(0) 编辑
摘要:除 DDoS会带来网络延迟增大外,也有其他原因导致的网络延迟, 比如 网络传输慢,导致延迟 Linux内核协议栈报文处理慢,导致延迟 应用程序数据处理慢,导致延迟等等 网络延迟 提到网络延迟时,可能轻松想起它的含义 网络数据传输所用的时间 不过要注意,这个时间可能是单向的,指从源地址发送到目的地址的 阅读全文
posted @ 2021-12-30 15:11 李成果 阅读(636) 评论(0) 推荐(0) 编辑
摘要:DDoS简介 DDoS的前身是DoS(Denail of Service) 即拒绝服务攻击,指利用大量的合理请求,来占用过多的目标资源,从而使目标服务无法响应正常请求 DDoS(Distributed Denial of Service) 则是在DoS的基础上 采用了分布式架构,利用多台主机同时攻击 阅读全文
posted @ 2021-12-30 10:07 李成果 阅读(222) 评论(0) 推荐(0) 编辑
摘要:前言 ping是一个最常用的测试服务延迟的工具 很多情况下ping可以帮我们定位出延迟问题 不过有时候ping本身也会出现意想不到的问题 这时,就需要抓取ping命令执行时收发的网络包,然后分析这些网络包,进而找出问题根源 tcpdump和Wireshark就是最常用的网络抓包和分析工具,更是分析网 阅读全文
posted @ 2021-12-29 14:11 李成果 阅读(1433) 评论(0) 推荐(0) 编辑
摘要:IP地址虽然方便了机器的通信,却给访问这些服务的人们,带来了很重的记忆负担 没几个人能记得住Github所在的IP地址,因为这串字符,对人脑来说并没有什么含义 不过这并不妨碍经常使用这个服务,为什么呢? 当然是因为还有更简单、方便的方式 可以通过域名github.com访问,而不是必须依靠具体的IP 阅读全文
posted @ 2021-12-28 17:42 李成果 阅读(1313) 评论(0) 推荐(0) 编辑
摘要:网络性能指标 实际上通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能 带宽,表示链路的最大传输速率,单位通常为b/s(比特/秒) 吞吐量,表示单位时间内成功传输的数据量,单位通常为b/s(比特/秒)或者B/s(字节/秒) 吞吐量受带宽限制,而吞吐量/带宽,也 阅读全文
posted @ 2021-12-28 15:25 李成果 阅读(743) 评论(0) 推荐(0) 编辑
摘要:C10K和C1000K的首字母C是Client的缩写 C10K就是单机同时处理1万个请求(并发连接1万)的问题 C1000K也就是单机支持处理100万个请求(并发连接100万)的问题 C10K C10K问题最早由Dan Kegel在1999年提出 那时的服务器还只是32位系统,运行着Linux 2. 阅读全文
posted @ 2021-12-27 15:12 李成果 阅读(555) 评论(0) 推荐(1) 编辑
摘要:网络性能指标 实际上通常用带宽、吞吐量、延时、PPS(Packet Per Second)等指标衡量网络的性能 带宽,表示链路的最大传输速率,单位通常为b/s(比特/秒) 吞吐量,表示单位时间内成功传输的数据量,单位通常为b/s(比特/秒)或者B/s(字节/秒) 吞吐量受带宽限制,而吞吐量/带宽,也 阅读全文
posted @ 2021-12-24 17:26 李成果 阅读(270) 评论(0) 推荐(0) 编辑
摘要:同CPU、内存以及I/O一样,网络也是Linux系统最核心的功能 网络是一种把不同计算机或网络设备连接到一起的技术 它本质上是一种进程间通信方式,特别是跨系统的进程间通信,必须要通过网络才能进行 随着高并发、分布式、云计算、微服务等技术的普及,网络的性能也变得越来越重要 网络模型 OSI网络模型,开 阅读全文
posted @ 2021-12-24 15:42 李成果 阅读(145) 评论(0) 推荐(0) 编辑
摘要:问题1:阻塞、非阻塞I/O与同步、异步I/O的区别和联 阻塞和非阻塞I/O 根据应用程序是否阻塞自身运行,可以把I/O分为阻塞I/O和非阻塞 I/O 阻塞I/O,是指应用程序在执行I/O操作后,如果没有获得响应,就会阻塞当前线程,不能执行其他任务 非阻塞I/O,是指应用程序在执行I/O操作后,不会阻 阅读全文
posted @ 2021-12-23 17:39 李成果 阅读(58) 评论(0) 推荐(0) 编辑
摘要:I/O基准测试 I/O性能优化的目标是什么? 换句话说观察的这些I/O性能指标(比如IOPS、吞吐量、延迟等),要达到多少才合适呢? 事实上,I/O性能指标的具体标准,每个人估计会有不同的答案,因为每个人的应用场景、使用的文件系统和物理磁盘等,都有可能不一样 为了更客观合理地评估优化效果,首先应该对 阅读全文
posted @ 2021-12-23 16:26 李成果 阅读(924) 评论(0) 推荐(0) 编辑
摘要:IO性能指标 文件系统I/O性能指标 存储空间的使用情况,包括容量、使用量以及剩余空间等 通常也称这些为磁盘空间的使用量,因为文件系统的数据最终还是存储在磁盘上 注意这只是文件系统向外展示的空间使用,并非磁盘空间的真实用量,因为文件系统的元数据会占用磁盘空间 如果配置RAID,从文件系统看到的使用量 阅读全文
posted @ 2021-12-23 11:47 李成果 阅读(196) 评论(0) 推荐(1) 编辑
摘要:MySQL的MyISAM引擎,主要依赖系统缓存加速磁盘I/O的访问 可如果系统中还有其他应用同时运行,MyISAM引擎很难充分利用系统缓存 缓存可能会被其他应用程序占用,甚至被清理掉 所以并不建议,把应用程序的性能优化完全建立在系统缓存上 最好能在应用程序的内部分配内存,构建完全自主控制的缓存 或者 阅读全文
posted @ 2021-12-22 17:10 李成果 阅读(302) 评论(0) 推荐(0) 编辑
摘要:当数据库出现性能问题时,该如何分析和定位它的瓶颈呢? 这是一个基于Python Flask的商品搜索应用案例 商品信息存在MySQL中,这个应用可以通过MySQL接口 根据客户端提供的商品名称,去数据库表中查询商品信息 案例 环境准备 # 服务端(192.168.1.6) # 机器配置:2cpu,4 阅读全文
posted @ 2021-12-22 14:14 李成果 阅读(324) 评论(0) 推荐(0) 编辑
摘要:案例 环境准备 # 服务器 # 机器配置:2cpu,4GB内存 # 预先安装docker、sysstat包 # 客户端 # 任意linux服务器即可 在服务端执行下面的命令,模拟案例 [root@local_sa_192-168-1-6 ~]# docker run --name=app -p 10 阅读全文
posted @ 2021-12-20 15:41 李成果 阅读(1329) 评论(0) 推荐(0) 编辑
摘要:案例 环境准备 # 机器配置:2cpu,4GB内存 # 预先安装docker、sysstat包 在终端中执行下面的命令 # 执行案例进程启动命令 [root@local_sa_192-168-1-6 ~]# docker run -v /tmp:/tmp --name=app -itd feisky 阅读全文
posted @ 2021-12-17 15:04 李成果 阅读(116) 评论(0) 推荐(0) 编辑