当前位置:主页 > 成功案例 >

成功案例

case

Linux 服务器性能出问题,排查下这些参数指标

时间:2022-05-05 00:44 点击次数:
  本文摘要:原文作者:taozj原文泉源:https://taozj.org/201701/linux-performance-basic.html 一个基于 Linux 操作系统的服务器运行的同时,也会表征出种种各样参数信息。通常来说运维人员、系统治理员会对这些数据会极为敏感,可是这些参数对于开发者来说也十分重要,尤其当你的法式非正常事情的时候,这些蛛丝马迹往往会资助快速定位跟踪问题。

万博体育APP官网下载

原文作者:taozj原文泉源:https://taozj.org/201701/linux-performance-basic.html 一个基于 Linux 操作系统的服务器运行的同时,也会表征出种种各样参数信息。通常来说运维人员、系统治理员会对这些数据会极为敏感,可是这些参数对于开发者来说也十分重要,尤其当你的法式非正常事情的时候,这些蛛丝马迹往往会资助快速定位跟踪问题。

这里只是一些简朴的工具检察系统的相关参数,固然许多工具也是通太过析加工 /proc、/sys 下的数据来事情的,而那些越发细致、专业的性能监测和调优,可能还需要越发专业的工具(perf、systemtap 等)和技术才气完成哦。究竟来说,系统性能监控自己就是个大学问。一、CPU和内存类1.1 top第一行后面的三个值是系统在之前 1、5、15 的平均负载,也可以看出系统负载是上升、平稳、下降的趋势,当这个值凌驾 CPU 可执行单元的数目,则表现 CPU 的性能已经饱和成为瓶颈了。

第二行统计了系统的任务状态信息。running 很自然不必多说,包罗正在 CPU 上运行的和将要被调理运行的;sleeping 通常是等候事件(好比 IO 操作)完成的任务,细分可以包罗 interruptible 和 uninterruptible 的类型;stopped 是一些被暂停的任务,通常发送 SIGSTOP 或者对一个前台任务操作 Ctrl-Z 可以将其暂停;zombie 僵尸任务,虽然历程终止资源会被自动接纳,可是含有退出任务的 task descriptor 需要父历程会见后才气释放,这种历程显示为 defunct 状态,无论是因为父历程提前退出还是未 wait 挪用,泛起这种历程都应该格外注意法式是否设计有误。第三行 CPU 占用率凭据类型有以下几种情况:(us) user:CPU 在低 nice 值(高优先级)用户态所占用的时间(nice<=0)。

正常情况下只要服务器不是很闲,那么大部门的 CPU 时间应该都在此执行这类法式(sy) system:CPU 处于内核态所占用的时间,操作系统通过系统挪用(system call)从用户态陷入内核态,以执行特定的服务;通常情况下该值会比力小,可是当服务器执行的 IO 比力麋集的时候,该值会比力大(ni) nice:CPU 在高 nice 值(低优先级)用户态以低优先级运行占用的时间(nice>0)。默认新启动的历程 nice=0,是不会计入这里的,除非手动通过 renice 或者 setpriority() 的方式修改法式的nice值(id) idle:CPU 在空闲状态(执行 kernel idle handler )所占用的时间(wa) iowait:等候 IO 完成做占用的时间(hi) irq:系统处置惩罚硬件中断所消耗的时间(si) softirq:系统处置惩罚软中断所消耗的时间,记着软中断分为 softirqs、tasklets (其实是前者的特例)、work queues,不知道这里是统计的是哪些的时间,究竟 work queues 的执行已经不是中断上下文了(st) steal:在虚拟机情况下才有意义,因为虚拟机下 CPU 也是共享物理 CPU 的,所以这段时间讲明虚拟机等候 hypervisor 调理 CPU 的时间,也意味着这段时间 hypervisor 将 CPU 调理给此外 CPU 执行,这个时段的 CPU 资源被“stolen”了。这个值在我 KVM 的 VPS 机械上是不为 0 的,但也只有 0.1 这个数量级,是不是可以用来判断 VPS 超售的情况?CPU 占用率高许多情况下意味着一些工具,这也给服务器 CPU 使用率过高情况下指明晰相应地排查思路:当 user 占用率过高的时候,通常是某些个体的历程占用了大量的 CPU,这时候很容易通过 top 找到该法式;此时如果怀疑法式异常,可以通过 perf 等思路找出热点挪用函数来进一步排查;当 system 占用率过高的时候,如果 IO 操作(包罗终端 IO)比力多,可能会造成这部门的 CPU 占用率高,好比在 file server、database server 等类型的服务器上,否则(好比>20%)很可能有些部门的内核、驱动模块有问题;当 nice 占用率过高的时候,通常是有意行为,当历程的提倡者知道某些历程占用较高的 CPU,会设置其 nice 值确保不会淹没其他历程对 CPU 的使用请求;当 iowait 占用率过高的时候,通常意味着某些法式的 IO 操作效率很低,或者 IO 对应设备的性能很低以至于读写操作需要很长的时间来完成;当 irq/softirq 占用率过高的时候,很可能某些外设泛起问题,导致发生大量的irq请求,这时候通过检查 /proc/interrupts 文件来深究问题所在;当 steal 占用率过高的时候,黑心厂商虚拟机超售了吧!第四行和第五行是物理内存和虚拟内存(交流分区)的信息:total = free + used + buff/cache,现在buffers和cached Mem信息总和到一起了,可是buffers和cachedMem 的关系许多地方都没说清楚。

其实通过对比数据,这两个值就是 /proc/meminfo 中的 Buffers 和 Cached 字段:Buffers 是针对 raw disk 的块缓存,主要是以 raw block 的方式缓存文件系统的元数据(好比超级块信息等),这个值一般比力小(20M左右);而 Cached 是针对于某些详细的文件举行读缓存,以增加文件的会见效率而使用的,可以说是用于文件系统中文件缓存使用。而 avail Mem 是一个新的参数值,用于指示在不举行交流的情况下,可以给新开启的法式几多内存空间,大致和 free + buff/cached 相当,而这也印证了上面的说法,free + buffers + cached Mem才是真正可用的物理内存。而且,使用交流分区不见得是坏事情,所以交流分区使用率不是什么严重的参数,可是频繁的 swap in/out 就不是好事情了,这种情况需要注意,通常表现物理内存紧缺的情况。

最后是每个法式的资源占用列表,其中 CPU 的使用率是所有 CPU core 占用率的总和。通常执行 top 的时候,自己该法式会大量的读取 /proc 操作,所以基本该 top 法式自己也会是压倒一切的。top 虽然很是强大,可是通常用于控制台实时监测系统信息,不适合长时间(几天、几个月)监测系统的负载信息,同时对于短命的历程也会遗漏无法给出统计信息。

1.2 vmstatvmstat 是除 top 之外另一个常用的系统检测工具,下面截图是我用-j4编译boost的系统负载。r 表现可运行历程数目,数据大致相符;而b表现的是 uninterruptible 睡眠的历程数目;swpd 表现使用到的虚拟内存数量,跟 top-Swap-used 的数值是一个寄义,而如手册所说,通常情况下 buffers 数目要比 cached Mem 小的多,buffers 一般20M这么个数量级;io 域的 bi、bo 讲明每秒钟向磁盘吸收和发送的块数目(blocks/s);system 域的 in 讲明每秒钟的系统中断数(包罗时钟中断),cs讲明因为历程切换导致上下文切换的数目。说到这里,想到以前许多人纠结编译 linux kernel 的时候 -j 参数究竟是 CPU Core 还是 CPU Core+1?通过上面修改 -j 参数值编译 boost 和 linux kernel 的同时开启 vmstat 监控,发现两种情况下 context switch 基本没有变化,且也只有显著增加 -j 值后 context switch 才会有显著的增加,看来不必过于纠结这个参数了,虽然详细编译时间长度我还没有测试。资料说如果不是在系统启动或者 benchmark 的状态,参数 context switch>100000 法式肯定有问题。

1.3 pidstat如果想对某个历程举行全面详细的追踪,没有什么比 pidstat 更合适的了——栈空间、缺页情况、主被动切换等信息一览无余。这个下令最有用的参数是-t,可以将历程中各个线程的详细信息枚举出来。

-r: 显示缺页错误和内存使用状况,缺页错误是法式需要会见映射在虚拟内存空间中可是还尚未被加载到物理内存中的一个分页,缺页错误两个主要类型是minflt/s 指的 minor faults,当需要会见的物理页面因为某些原因(好比共享页面、缓存机制等)已经存在于物理内存中了,只是在当前历程的页表中没有引用,MMU 只需要设置对应的 entry 就可以了,这个价格是相当小的majflt/s 指的 major faults,MMU 需要在当前可用物理内存中申请一块空闲的物理页面(如果没有可用的空闲页面,则需要将此外物理页面切换到交流空间去以释放获得空闲物理页面),然后从外部加载数据到该物理页面中,并设置好对应的 entry,这个价格是相当高的,和前者有几个数据级的差异-s:栈使用状况,包罗 StkSize 为线程保留的栈空间,以及 StkRef 实际使用的栈空间。使用ulimit -s发现CentOS 6.x上面默认栈空间是10240K,而 CentOS 7.x、Ubuntu系列默认栈空间巨细为8196K-u:CPU使用率情况,参数同前面类似-w:线程上下文切换的数目,还细分为cswch/s因为等候资源等因素导致的主动切换,以及nvcswch/s线程CPU时间导致的被动切换的统计如果每次都先ps获得法式的pid后再操作pidstat会显得很贫苦,所以这个杀手锏的-C可以指定某个字符串,然后Command中如果包罗这个字符串,那么该法式的信息就会被打印统计出来,-l可以显示完整的法式名和参数➜ ~ pidstat -w -t -C “ailaw” -l 这么看来,如果检察单个尤其是多线程的任务时候,pidstat比常用的ps更好使!1.4 其他当需要单独监测单个 CPU 情况的时候,除了 htop 还可以使用 mpstat,检察在 SMP 处置惩罚器上各个 Core 的事情量是否负载平衡,是否有某些热点线程占用 Core。➜ ~ mpstat -P ALL 1如果想直接监测某个历程占用的资源,既可以使用top -u taozj的方式过滤掉其他用户无关历程,也可以接纳下面的方式举行选择,ps下令可以自界说需要打印的条目信息:while :; do ps -eo user,pid,ni,pri,pcpu,psr,comm | grep 'ailawd'; sleep 1; done如想理清继续关系,下面一个常用的参数可以用于显示历程树结构,显示效果比pstree详细雅观的多➜ ~ ps axjf二、磁盘IO类iotop 可以直观的显示各个历程、线程的磁盘读取实时速率;lsof 不仅可以显示普通文件的打开信息(使用者),还可以操作 /dev/sda1 这类设备文件的打开信息,那么好比当分区无法 umount 的时候,就可以通过 lsof 找出磁盘该分区的使用状态了,而且添加 +fg 参数还可以分外显示文件打开 flag 标志。

2.1 iostat➜ ~ iostat -xz 1其实无论使用 iostat -xz 1 还是使用 sar -d 1,对于磁盘重要的参数是:avgqu-s:发送给设备 I/O 请求的等候行列平均长度,对于单个磁盘如果值>1讲明设备饱和,对于多个磁盘阵列的逻辑磁盘情况除外await(r_await、w_await):平均每次设备 I/O 请求操作的等候时间(ms),包罗请求排列在行列中和被服务的时间之和;svctm:发送给设备 I/O 请求的平均服务时间(ms),如果 svctm 与 await 很靠近,表现险些没有 I/O 等候,磁盘性能很好,否则磁盘行列等候时间较长,磁盘响应较差;%util:设备的使用率,讲明每秒中用于 I/O 事情时间的占比,单个磁盘当 %util>60% 的时候性能就会下降(体现在 await 也会增加),当靠近100%时候就设备饱和了,但对于有多个磁盘阵列的逻辑磁盘情况除外;另有,虽然监测到的磁盘性能比力差,可是纷歧定会对应用法式的响应造成影响,内核通常使用 I/O asynchronously 技术,使用读写缓存技术来改善性能,不外这又跟上面的物理内存的限制相制约了。上面的这些参数,对网络文件系统也是受用的。

三、网络类网络性能对于服务器的重要性不言而喻,工具 iptraf 可以直观的现实网卡的收发速度信息,比力的简练利便通过 sar -n DEV 1 也可以获得类似的吞吐量信息,而网卡都标配了最大速率信息,好比百兆网卡千兆网卡,很容易检察设备的使用率。通常,网卡的传输速率并不是网络开发中最为关切的,而是针对特定的 UDP、TCP 毗连的丢包率、重传率,以及网络延时等信息。3.1 netstat➜ ~ netstat -s显示自从系统启动以来,各个协议的总体数据信息。虽然参数信息比力富厚有用,可是累计值,除非两次运行做差才气得出当前系统的网络状态信息,亦或者使用 watch 眼睛直观其数值变化趋势。

所以netstat通常用来检测端口和毗连信息的:netstat –all(a) –numeric(n) –tcp(t) –udp(u) –timers(o) –listening(l) –program(p)–timers可以取消域名反向查询,加速显示速度;比力常用的有➜ ~ netstat -antp #列出所有TCP的毗连➜ ~ netstat -nltp #列出当地所有TCP侦听套接字,不要加-a参数3.2 sarsar 这个工具太强大了,什么 CPU、磁盘、页面交流啥都管,这里使用 -n 主要用来分析网络运动,虽然网络中它还给细分了 NFS、IP、ICMP、SOCK 等种种条理种种协议的数据信息,我们只体贴 TCP 和 UDP。下面的下令除了显示通例情况下段、数据报的收发情况,还包罗TCP➜ ~ sudo sar -n TCP,ETCP 1 active/s:当地提倡的 TCP 毗连,好比通过 connect(),TCP 的状态从CLOSED -> SYN-SENTpassive/s:由远程提倡的 TCP 毗连,好比通过 accept(),TCP 的状态从LISTEN -> SYN-RCVDretrans/s(tcpRetransSegs):每秒钟 TCP 重传数目,通常在网络质量差,或者服务器过载后丢包的情况下,凭据 TCP 简直认重传机制会发生重传操作isegerr/s(tcpInErrs):每秒钟吸收到堕落的数据包(好比 checksum 失败)UDP➜ ~ sudo sar -n UDP 1 noport/s(udpNoPorts):每秒钟吸收到的可是却没有应用法式在指定目的端口的数据报个数idgmerr/s(udpInErrors):除了上面原因之外的本机吸收到但却无法派发的数据报个数固然,这些数据一定水平上可以说明网络可靠性,但也只有同详细的业务需求场景联合起来才具有意义。3.3 tcpdumptcpdump 不得不说是个好工具。

大家都知道当地调试的时候喜欢使用 wireshark,可是线上服务端泛起问题怎么弄呢?附录的参考文献给出了思路:回复情况,使用 tcpdump 举行抓包,当问题复现(好比日志显示或者某个状态显现)的时候,就可以竣事抓包了,而且 tcpdump 自己带有 -C/-W 参数,可以限制抓取包存储文件的巨细,当到达这个这个限制的时候生存的包数据自动 rotate,所以抓包数量总体还是可控的。今后将数据包拿下线来,用 wireshark 想怎么看就怎么看,岂不乐哉!tcpdump 虽然没有 GUI 界面,可是抓包的功效丝绝不弱,可以指定网卡、主机、端口、协议等各项过滤参数,抓下来的包完整又带有时间戳,所以线上法式的数据包分析也可以这么简朴。下面就是一个小的测试,可见 Chrome 启动时候自动向 Webserver 提倡建设了三条毗连,由于这里限制了 dst port 参数,所以服务端的应答包被过滤掉了,拿下来用 wireshark 打开,SYNC、ACK 建设毗连的历程还是很显着的!在使用 tcpdump 的时候,需要尽可能的设置抓取的过滤条件,一方面便于接下来的分析,二则 tcpdump 开启后对网卡和系统的性能会有影响,进而会影响到在线业务的性能。


本文关键词:Linux,服务器,性能,出问题,万博体育APP官网下载,排查,下,这些,参数

本文来源:万博体育APP官网下载-www.gzxjmf.com

Copyright © 2001-2022 www.gzxjmf.com. 万博体育APP官网下载科技 版权所有 备案号:ICP备18768107号-5

在线客服 联系方式 二维码

服务热线

041-21345349

扫一扫,关注我们