一、优化内核相关参数⚙️内存管理参数vm.swappiness:控制系统使用swap的倾向,默认60。若内存充足可调低至10,减少swap依赖。 -应用场景-高并发Web服务、数据库、消息队列等场景需显著提高这些限制##三、磁盘调度策略Linux支持多种I/O调度器,不同场景选择不同策略:-noop-简单FIFO队列,不做排序,适合SSD等无需优化寻道的设备 -mq-deadline/kyber(现代内核)-针对多队列设备优化,适合NVMeSSD和高并发场景。 /bin/bashLinux性能优化一键脚本set-eecho">>>开始Linux性能优化..."一、优化内核参数echo">>>优化内核参数..." ```总结内核参数优化→控制内存/网络行为,减少瓶颈。资源限制提升→保证高并发应用不因系统默认限制崩溃。磁盘调度策略→根据硬件特性选择最优算法,提升I/O性能。
buff Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是 Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。) bi 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试 us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。
性能优化 性能指标 高并发和响应快对应着性能优化的两个核心指标:吞吐和延时 应用负载角度:直接影响了产品终端的用户体验 系统资源角度:资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快 下面是常用的Linux Performance Tools以及对应分析的性能问题类型。 性能报告显示确实时stress占用了大量的CPU,通过修复权限问题来优化解决即可. 系统中出现大量不可中断进程和僵尸进程怎么办? 如果是软中断导致用/proc/softirqs CPU优化 应用程序优化 编译器优化: 编译阶段开启优化选项, 如gcc -O2 算法优化 异步处理: 避免程序因为等待某个资源而一直阻塞,提升程序的并发处理能力 多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
2)内核进程: 3)用户进程: ## 1. context switches:上下文切换 大多数的处理器在同一时刻只能运行一个进程,在多核处理器中,linux内核将每一个core 比如当前系统核数是2,有两个线程正在执行行,还有4个线程在运行队列里面,那么它的load=2+4 ## 3.cpu utilizaion CPU的利用率。 time: 用户空间的使用时间 system time: 内核空间的使用时间 wait io: 等待IO的时间(阻塞并等待IO) idle: 空闲时间 ## 4.cpu性能监控 30%-35%的system time 0%-5%的idle time context switches:这个值与cpu利用率相关 ## 5.cpu性能监控相关工具 ## 6.性能排查实例 实例1: ? 高的中断数量,少的上下文切换数量,说明是单个进程在访问硬件设备。
大多数Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数。可以修改这些参数来分配更多的内存,从而改进网络性能。 因此,花一些时间对磁盘硬件进行优化是有意义的。 首先要做的是,确保在文件系统上禁用 atime 日志记录特性。atime 是最近访问文件的时间,每当访问文件时,底层文件系统必须记录这个时间戳。 为提高性能,可以根据设备资源情况, 设置各linux 用户的最大进程数,下面我把某linux用户的最大进程数设为10000个: ulimit -u 10000 对于需要做许多 socket 修改2个文件。 1. 如何预防性能下降 如下的sysctl命令用于改变安全设置,但是它也可以防止网络性能的下降。这些命令被设置为缺省值。
Linux 性能优化是个系统工程,除了要学习那些基础知识点之外,还有 2 点比较重要: 掌握性能优化的思路和方法,尝试大量 Linux 性能工具; 从学习到输出,说白了就是不断实践,从实践中总结经验。 我相信你一定见过他所描绘的 Linux 性能工具图谱: △ 图片来自 brendangregg.com 这个图是 Linux 性能分析最重要的参考资料之一,它告诉你在 Linux 不同子系统出现性能问题后 为了让你对性能有个全面的认识,可以看看下面这张思维导图,里面涵盖了大部分性能分析和优化都会包含的知识。 △ Linux 性能优化思维导图 另外,我还要特别强调一点,就是性能工具的选用。 去年年末那会儿,我看极客时间出了个《Linux 性能优化实战》专栏,作者是倪朋飞,上面那张详细的知识图谱就是他画的。 哥们有着近 10 年的云计算工作经验,所以对 Linux 性能优化这套东西有一些自己的思考和沉淀。
Linux 软中断 使用hping3 来模拟SYN攻击观察软中断 # hping3 -S -p 80 -i u10 10.0.0.31 观察发现CPU使用率比较低,到底是什么原因导致被测试机器比较卡呢
什么是上下文切换 根据任务的不同 CPU上下文切换可以分为进程上下文切换 线程上下文切换和中断上下文切换 CPU上下文切换是保证Linux系统正常工作的核心功能之一,Linux多任务操作系统主要原因之一就是因为将 频繁的上下文切换会把时间用在寄存器/内核栈/以及虚拟内存等数据的保存和恢复上,从而缩短进程真正执行的时间,导致系统的整体性能下降 系统调用完成的是用户到内核态的转变,系统调用需要将用户态的指令位置先保存起来
1、mii-tool -v eth0 查看物理网卡的协商方式,相关信息 image.png 2、ethtool ens33 image.png 3、ifconfig 4、ip -s link
也会导致平均负载升高,但CPU使用率不一定会很高 大量等待CPU的进程调度也会导致平均负载升高,此时CPU使用率也会比较高 1.5 总结 平均负载产生的意义,快速查看整个系统整体性能手段 日常工作中 可以以这个负载做为一个快速发生系统是否有负载问题的指标,另外可以以监控的方式覆盖 CPU报警,当然监控越细越好,不同的负载 1.6 推荐命令工具 stress 用来模拟 Linux 系统压测工具 另外,当进程只有一个线程的时候 大家可以理解就是线程切换 根据 Tsuna 的测试报告,每次上下文切换都需要几十纳秒到数微秒的CPU时间,所以优化这个切换非常重要。 top默认为3s,ps使用的是进程运行时间 7、top vmstat mpstat 等命令关于cpu性能相关指标的含义 8、pidstat 命令含义 9、perf 使用说明 perf top 1、对CPU有更好的认识及领悟 2、合理的利用CPU资源,合理的进行应用程序进行压测
学习性能优化第一步了解性能指标 我们最常见的两个核心指标 “吞吐” 和“时延” [image.png] 性能问题的本质就是系统资源已经达到了瓶颈,但是请求资源还不够快,无法支撑更多的请求。 性能分析 其实就是找出 系统资源 或者 应用程序 的瓶颈,并设法去避免或者缓解它们,更 高效地利用系统资源去处理更多的请求。 这包含了一些列的步骤,比如以下的步骤: 选择指标评估应用程序和系统性能 为应用程序和系统性能设定目标 进行性能基准测试 性能分析定位瓶颈 优化系统和应用程序 性能的监控和告警 说到 性能分析 必须要提大师 布伦丹·格雷格(Brendan Gregg)以及其相关的一张经典图 可以查看详细链接http://www.brendangregg.com/Perf/linux_perf_tools_full.png
CPU 高负责 #top Tasks: 75 total, 2 running, 73 sleeping, 0 stopped, 0 zombie %Cpu0 : 0.0 us, MEM TIME+ COMMAND 1 root 20 0 188596 3636 2416 S 0.0 0.1 0:28.13 systemd 2 只有找到它,才能更高效、更针对性地进行优化。 GDB(The GNU Project Debugger), 这个功能强大的程序调试利器;但是GDB调试会导致程序中断,不适合生产环境直接调试 Linux perf 神器 http://www.brendangregg.com 重新启动容器进行压测结果如下: [image.png] 性能百倍增加
1、ldd /bin/ls #查看ls依赖于哪些库 2、objdump -T /xx.so #查看库文件提供哪些接口 objdump -T /usr/lib/libplumbgpl.so image.png 3、gcc -g1/2/3 -o progname source.c 默认2,3比2详细,-g 生成调试信息 4、gdb:http://witmax.cn/gdb-usage.html 应用程序问题分析: 1、内存是否有问题:top 2、启动时间是否有问题:time .
1、磁盘IO总的统计信息:vmstat -D 2、vmstat -d //每个磁盘的读写统计 image.png wa等待IO image.png 3、iostat -d image.png
Linux内核高性能优化 目录 解释 部分子目录 kernel 内核管理相关,进程调度等 sched/fork等 fs 文件子系统 ext4/f2fs/fuse/debugfs/proc等 mm 内存子系统 20-1 fs.file-max = 1048575 # 网络层优化 # listen()的默认参数,挂起请求的最大数量,默认128 net.core.somaxconn = 1024 # 增加Linux tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 0 # 表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项 = 2 # 减少处于FIN-WAIT-2连接状态的时间,使系统可以处理更多的连接。 .neigh.default.gc_thresh2 = 512 net.ipv4.neigh.default.gc_thresh3 = 4096 #——内核优化结束——– 更多linux内核参数解释说明
Linux 通过/proc虚拟文件系统向用户控件提供系统内部状态信息,其中/proc/stat则是 CPU 和任务信息统计。 性能优化往往是多方面的,CPU、内存、网络等都是有关联的,这里暂且给出 CPU 优化的思路,以供参考。 程序优化 基本优化:程序逻辑的优化比如减少循环次数、减少内存分配,减少递归等等。 编译器优化:开启编译器优化选项例如gcc -O2对程序代码优化。 为进程设置资源限制:使用 Linux cgroups 来设置进程的 CPU 使用上限,可以防止由于某个应用自身的问题,而耗尽系统资源。 参考 极客时间:Linux 性能优化实战 ?
# 每隔5秒输出1组数据 $ pidstat -w 5 Linux 4.15.0 (ubuntu) 09/23/18 _x86_64_ (2 CPU) 08:18:26 UID 12 | 套路篇:CPU 性能优化的几个思路 系统层面的 CPU 优化方法 CPU 绑定:把进程绑定到一个或者多个 CPU 上,可以提高 CPU 缓存的命中率,减少跨 CPU 调度带来的上下文切换问题。 过早优化是万恶之源 性能优化最好是逐步完善,动态进行,不追求一步到位,而要首先保证能满足当前的性能要求。当发现性能不满足要求或者出现性能瓶颈时,再根据性能评估的结果,选择最重要的性能问题进行优化。 它为我们呈现了系统内部的运行状态,同时也是很多性能工具的数据来源,是辅助排查性能问题的好方法。 17 | 案例篇:如何利用系统缓存优化程序的运行效率? 再或者,使用 Redis 这类外部缓存服务,优化数据的访问效率。 19 | 案例篇:为什么系统的Swap变高了(上) Linux 的 Swap 机制。
一、引言Linux作为一个强大的开源操作系统,广泛应用于服务器、桌面、嵌入式设备等领域。然而,随着应用复杂性的增加和硬件资源的有限,Linux系统性能优化变得越来越重要。 本文将从多个方面详细探讨Linux性能优化的方法和技巧,帮助读者更好地发挥系统的潜力。二、系统资源监控top命令:实时显示系统中各个进程的资源占用情况,包括CPU、内存、I/O等。 四、内存优化Swap空间调整:Swap空间是Linux系统中的虚拟内存,当物理内存不足时,系统会使用Swap空间。合理设置Swap空间的大小,可以避免内存溢出导致的性能下降。 五、磁盘I/O优化文件系统选择:Linux支持多种文件系统,如Ext4、XFS、Btrfs等。不同文件系统在性能、稳定性和扩展性方面有所差异,选择合适的文件系统可以提高磁盘I/O性能。 八、总结与建议本文从系统资源监控、CPU优化、内存优化、磁盘I/O优化、网络优化和内核参数优化等方面探讨了Linux性能优化的方法和技巧。
用第二步得到的吞吐量执行 5 分钟,然后在第四步得到的极限值执行 1 分钟,再回到第二步的吞吐量执行 5 分钟,再到第四步的权限值执行 1 分钟,如此往复个一段时间,比如 2 天。 系统 系统相关的点实在是太多了,这里简单介绍几种常见的情况: 1)Linux文件描述符限制,有时候默认的值比较低,影响并发。2)Linux中Swap强烈建议关闭,打开坏处多于好处,会有意想不到的问题。 2)锁竞争:单机环境下,锁的使用可能会带来大量的线程资源浪费,从而给系统带来性能开销;而分布式环境下,使用分布式锁也可能造成大量的请求堆积,影响整个系统性能。 需要着重强调的是任何的性能优化都得结合业务场景明确已知的性能问题和性能目标,不能为了优化而优化。 ---- - 相关阅读 - 性能优化那些事儿(1) 浅谈机器学习模型推理性能优化 点击【阅读原文】可至洞见网站查看原文&加粗字体部分的相关链接。
1、进程管理:进程调度、中断处理、信号、进程优先级、进程切换、进程状态、进程内存 image.png 2、nice 可以改变的范围19- -20,-20为最高 3、上下文切换 image.png image.png image.png 7、内存,分页大小4KB image.png image.png 8、vmstat -v 活跃与非活跃分页 image.png 9、存储器层次结构:L1,L2, 、文件服务器 image.png NOOP:适用于SSD Anticipatory:不要使用 11、防火墙 image.png 12、三次握手四次挥手 image.png 13、cpu性能 image.png 14、内存性能 image.png image.png 15、IO性能 image.png 16、网络性能