共计 3589 个字符,预计需要花费 9 分钟才能阅读完成。
这期内容当中丸趣 TV 小编将会给大家带来有关如何采用分段排查法诊断服务器性能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
在日常性能测试中,我们需要掌握一些常用的策略以及有必要了解和掌握查看服务器性能的命令,来排查诊断服务器性能。
今天,就和大家分享一下在压测过程中,采用分段排查法快速利用命令去诊断服务器的性能。
Linux 服务器分段排查的方法,按照 CPU、内存、磁盘 IO、网络的先后顺序依次排除。参考流程图如下:
分析步骤:
Step1 用 top 查看系统大致情况:
关注 cpu(sys+us)使用率,若此值持续大于 80%,可以观察进程视图,是否是非核心应用进程占用大量 CPU 资源,若能排除非核心应用进程的影响,则基本能确定该系统 cpu 资源面临短缺,此时结合 vmstat 监控观察到 proc 列 r 值应该较大; 同理,当 cpu 利用率很低,但运行进程队列 (r 值) 却很大时,表面 cpu 存在阻塞
关注 %idle(cpu 空闲时间的百分比),若此值较高但系统响应却很慢时,有可能是 CPU 在等待分配内存,此时应关注内存使用情况 (见 step3); 如果空闲时间 %idle 持续为 0 并且系统时间(cpu sy) 是用户时间 (cpu us) 的两倍,系统则面临着 CPU 资源的短缺.
关注 %wait(cpu 等待 IO 的时间的百分比),在 cpu 资源尚未耗尽情况下,若此值持续很高表示系统存储 IO 可能存在瓶颈; 问题原因可能是:(1)系统存在一个应用程序问题 (应用本身有许多 IO 请求);(2) 物理内存不足; (3)低效的 I/O 子系统配置; 此时应先排查是否是应用程序问题,然后检查系统内存使用情况,若是交换分页多,则确定是由物理内存不足引发的磁盘 IO 问题(见 step3); 若不是,则检查系统磁盘,结合 iostat 来验证此现象是由应用 IO 过多造成(见 step4).
Step2 结合 vmstat、sar 监控 cpu:
主要关注报告中的 4 个 cpu 列和 2 个 procs(内核线程)列
r:等待在 CPU 资源的进程数。这个数据比平均负载更加能够体现 CPU 负载情况,数据中不包含等待 IO 的进程。如果这个数值大于系统中的逻辑 CPU 核数,表示系统现在运行比较慢, 有多数的进程等待 CPU,那么系统的 CPU 资源已经饱和。
us, sy, id, wa, st:这些都代表了 CPU 时间的消耗,它们分别表示用户时间 (user)、系统(内核) 时间 (sys)、空闲时间(idle)、IO 等待时间(wait) 和被偷走的时间(stolen,一般被其他虚拟机消耗)。上述这些 CPU 时间,可以让我们很快了解 CPU 是否出于繁忙状态。一般情况下,如果用户时间和系统时间相加非常大,CPU 出于忙于执行指令。如果 IO 等待时间很长,那么系统的瓶颈可能在磁盘 IO。
sar ndash;P ALL : 对 cpu 分开查询,统计每个 cpu 的使用情况,检查多个 cpu 的负载是否平衡
通过前两步,已能基本确定 cpu 是否存在瓶颈:
若 cpu 资源不足,可以调整应用程序对 CPU 的占用情况,使得应用程序能够更有效的使用 CPU,同时可以考虑增加更多的 CPU;
若 cpu 不是瓶颈,则着重查看系统内存。
Step3 用 vmstat 查看内存使用情况:
每行会输出一些系统核心指标,这些指标可以让我们更详细的了解系统状态。后面跟的参数 1,表示每秒输出一次统计信息,参数 2,表示一共输出 2 次统计信息。表头提示了每一列的含义,这只介绍一些和内存性能调优相关的列:
Memory 区域
swpd:表示切换到内存交换区的内存大小,即虚拟内存已使用的大小(单位 KB),如果大于 0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free:表示当前空闲的物理内存(以千字节为单位), 如果剩余内存不足,也会导致系统性能问题。
buff:表示 baffers cached 内存大小,也就是缓冲大小,一般对块设备的读写才需要缓冲。
Cache:表示 page cached 的内存大小,也就是缓存大小,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存,如果 cache 值非常大说明缓存文件比较多,如果此时 io 中的 bi 比较小,说明文件系统效率比较好。
Swap 区域
si:表示有磁盘调入内存,也就是内存进入内存交换区的内存大小; 通俗的讲就是 每秒从磁盘读入虚拟内存的大小,如果这个值大于 0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so:表示由内存进入磁盘,也就是由内存交换区进入内存的内存大小。
注意:一般情况下 si、so 的值都为 0,如果 si、so 的值长期不为 0,则说明系统内存不足,需要增加系统内存。
Step4 用 iostat 查看磁盘 IO
tps:该设备每秒的传输次数(Indicate the number of transfers persecond that were issued to the device.)。一次传输 意思是 一次 I / O 请求。多个逻辑请求可能会被合并为 一次 I / O 请求。一次传输 请求的大小是未知的。
kB_read/s:每秒从设备 (drive expressed) 读取的数据量;
kB_wrtn/s:每秒向设备 (drive expressed) 写入的数据量;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量; 这些单位都为 Kilobytes
关注 %iowait,如果 CPU 和内存受限的情况不存在,并且 %iowait 长时间大于 25%,则认为 IO 存在瓶颈。
收集磁盘 IO 数据吞吐量(iostat ndash;d -k),大致估计系统数据吞吐量与应用负载是否相匹配,排查是否有与业务无关的大量 IO 操作。
Step5 使用 sar ndash;d 查看磁盘读写:
其中:
tps: 每秒从物理磁盘 I / O 的次数. 多个逻辑请求会被合并为一个 I / O 磁盘请求, 一次传输的大小是不确定的。
rd_sec/s: 每秒读扇区的次数。
wr_sec/s: 每秒写扇区的次数。
avgrq-sz: 平均每次设备 I / O 操作的数据大小(扇区)。
avgqu-sz: 磁盘请求队列的平均长度。
await: 从请求磁盘操作到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1 秒 =1000 毫秒)。
svctm: 系统处理每次请求的平均时间,不包括在请求队列中消耗的时间。
%util:I/ O 请求占 CPU 的百分比,比率越大,说明越饱和。
正常情况下 avserv 应该是小于 avwait 值的, 如果 avserv 的值与 avwait 很接近,表示几乎没有 I / O 等待,磁盘性能很好; 如果 avwait 的值远高于 avserv 的值,则表示 I / O 队列等待太长,系统上运行的应用程序将变慢,磁盘 IO 为系统瓶颈。
Step6 使用 netstat 查看网络:
1、通过 ping 命令检测网络的连通性
2、通过 netstat ndash;nltp 组合检测网络接口状况
-u (udp)仅显示 udp 相关选项
-l 仅列出有在 Listen (监听) 的服务状态
-n 拒绝显示别名,能显示数字的全部转化成数字。
-t (tcp)仅显示 tcp 相关选项
-p 显示建立相关链接的程序名,
3、通过 netstat ndash;r 组合检测系统的路由表信息
cpu 瓶颈常见征兆:
很慢的响应时间
cpu 空闲时间为零
过高的用户占用 cpu 时间
过高的系统占用 cpu 时间
长时间的有很长的运行进程队列
cpu 调优方法:
平衡系统负载,在不同的期间运行进程,从而更有效地利用每天的 24 小时。
使用 nice 或 renice 优化调度程序 mdash; mdash; 可为运行进程分配不同的优先级,以避免占用大量 cpu 资源。
增加资源,添加更多的 cpu
内存瓶颈常见征兆:
很高的换页率
交换空间使用率很高
进程进入不活动状态;
交换区所有磁盘的活动次数很高;
很高的全局系统 CPU 利用率;
内存不够出错
内存调优方法:
保证交换空间分配合理(分配足够多的交换空间、每个交换空间大小相同、每个交换空间分配在不同的硬盘上)
参数调整,调整内存参数阀值
增加内存资源
IO 瓶颈常见征兆:
过高的磁盘利用率
太长的磁盘等待队列
等待磁盘 I / O 的时间所占的百分率太高
太高的物理 I / O 速率
过低的缓存 *** 率
太长的运行进程队列,但 CPU 却空闲
IO 调优方法:
一般来说,高的 %iowait 表明系统至少存在一个应用程序问题、缺少内存问题或低效的 I/O 子系统配置;
应检查应用程序产生大量 IO 请求是否正常;
检查是否是由于内存交换空间频繁换页引起的 IO 问题;
检查磁盘配置情况是否合理
针对磁盘 IO 本身的优化来说,尽管存在一些 I/O 优化参数的虚拟内存等价项,但是提高磁盘 I/O 性能的方法仍然是正确地配置 Linux 系统,而不仅仅是优化相关的参数。
上述就是丸趣 TV 小编为大家分享的如何采用分段排查法诊断服务器性能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注丸趣 TV 行业资讯频道。