云平台 Linux 服务器问题场景分析思路及工具箱
source link: https://www.infoq.cn/article/iugbKK9-otT4xQquoRTp?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
前言
本文主要结合笔者在苏宁云平台支撑工作中的实践,以基于经验切实有效的判定分析方式贯穿, 整理了云平台 Linux 服务器(下文中区分了物理机及虚拟机)运维中的常见问题场景、分析工具箱及判别思路。主要包含以下三部分:
- Linux 服务器 CPU、I/O、内存性能异常的常用工具、判定标准、以及分析思路。
- Linux 服务器异常宕机的故障可能的原因、定位方法与常规分析思路。
- Linux 服务器丢包的问题可能的原因、定位方法与常规分析思路。
读者范围:中高级 linux 服务器运维人员
注:本文结合问题图景枚举了各个 tool 与分析关联较大的参数及用法,以起到一个示例说明,各工具的详细用法需要自行阅读研习 man 手册。
Linux 服务器 CPU、I/O、内存性能异常
CPU 异常
top
复制代码
top -H -d1-c 高亮列及运行进程 zxy 选择 shift+L/Rarrow
pidstat
• -d 磁盘读写报告 I/O 统计
• -r 内存使用及缺页
• -u CPU
• -l 展示命令行及参数
• -w switch
• -t 显示线程的统计
• -T
复制代码
每秒展示活动进程的 CPU 使用率 pidstat -u1 按线程组关系聚合展示 CPU 消耗时间,帮助找出 busy 线程 pidstat -t1-T ALL
sar
• -b 块统计
• -B 页面
• -r 页面使用统计
• -R 页面回收统计
• -d 磁盘使用统计
• -q 调度统计
• -S swap
• -m 运行频率
• -v 文件 inode dentry 活动统计
• -w 调度 switch
• -W 换入换出统计
• -n 网络 DEV, EDEV, NFS, NFSD, SOCK, IP, EIP, ICMP, EICMP, TCP, ETCP, UDP, SOCK6, IP6, EIP6, ICMP6, EICMP6 and UDP6
• -s 00:00:00 -e 00:21:00 指明要查看的开始结束时间
iotop
iostat
Nmon 分析 NMON Visulizar
NMON Visulizar 是来自于 IBM 的 Nmon 可视化分析工具
sysrq
复制代码
开启开关 echo1> /proc/sys/kernel/sysrq 打印进程堆栈 echo t > /proc/sysrq-trigger eg. 如果已经softlockup且业务影响已然明显, 停业务后用下面命令产生一个vmcore echoc> /proc/sysrq-trigger
strace
• -c 统计系统调用次数及时间
• -f 也 trace 子进程调用
• -e 指明关心的调用 eg. -e open,write
eg:
复制代码
命令执行时挂起,了解进程挂在哪个 syscall stracecmd arg 进程系统调用开销较大,获取 syscall 统计 strace-p PID -c
gdb
• bt 查看执行堆栈
• frame 切换工作帧
复制代码
用户进程的 cpu 消耗影响系统整体使用,配合 debuginfo 及代码可大致梳理出占用逻辑,attach 后,进程会 STOP gdb -pPID
perf
perf top 在线采样及展示:
• -e 指明事件,默认是 cycle,全部时间可 perf list 查询
• -G 调用图
• -F 采样频率
• -d 刷新间隔
• -p 特定进程
• -C 特定核
复制代码
perftop -d1 -G -F 99 -z shift+ e 可展开堆栈视图 shift+ c 可折叠堆栈视图
perf record/report
• record 输出采样文件 perf.data 文件
• report 解析
复制代码
perf record -F99-a-g -pPID -C6sleep5 perf report
内存异常
一般检查
复制代码
free cat /proc/self/status cat /proc/self/smaps numastat -m numactl --hardware cat /proc/meminfo
zoneinfo
复制代码
cat /proc/zoneinfo |egrep "zone|min|low|high|free|present" .... Node 0,zoneNormal pagesfree 3195167 min 13740 low 17175 high 20610 present 3361280 nr_free_pages 3195167 high: 186 high: 186
三条水线
sysctl -a|grep extra_free_kbytes min_free_kbytes extra_free_kbytes 的组合值构成三个水线。
• 直接回收线 MIN min_free_kbytes
• 后台回收线 LOW 5/4*min_free_kbytes + extra_free_kbytes
• 后台回收停止 HIGH 3/2 * min_free_kbytes + extra_free_kbytes
物理页面情况
复制代码
Node 0, zone DMA 2 2 1 1 1 0 1 0 1 1 3 Node 0, zone DMA32 730 596 414 339 277 214 159 127 85 68 557 Node 0, zone Normal 447 558 348 166 72 45 1021 888 607 252 2661
内核结构缓冲
复制代码
slabtop 了解当前内核数据结构内存消耗
I/O 异常
io scheduler
cfq deadline noop
blktrace & blkparser
当意外的 I/O 延迟发生,需要深入了解 I/O 延迟分布,需要使用 blktrace & blkparser 工具进行细致分析。
dd
学会合理使用 oflag 标志 sync 同步刷出数据 direct 绕过 pagecache。
fio
用来标定系统 I/O 能力的便捷工具:
复制代码
fio-filename=/dev/mapper/vg_os-testlv-direct=1 -iodepth 1 -thread-rw=randwrite-ioengine=psync-bs=8k-size=100G-numjobs=96-runtime=60 -group_reporting-name=mytest
du & df
面向块占用及文件系统占用的查询分析:
strace 可以看出两个命令原理的差异:df 读取文件系统信息,du stat 各个文件然后累加。
复制代码
两者出入较大需进一步考察: 是否存在空洞? 是否一个文件用户已经看不到但是文件系统还没有真正删除?(就是打开文件被删除的情况 lsof +L1) 是否被某些挂载点隐藏了之前的目录文件? df 显示错误的话怀疑是否fs损坏?
网络异常场景
ethtool
复制代码
ethtool -S 关注droperror
tc 统计检查
复制代码
tc-s -d qd 关注包drop情况
ss netstat iftop
复制代码
常用连接查看 netstat-ntp netstat-ntpl ss-ie
tcpdump
• -i 待抓取的网口名字
• -w 抓包文件,可以是时间格式化串
• -G 回滚时长,单位秒
• -c 抓取多少个包后退出
• -s 抓取部分报文,单位字节
• -r 读取抓包文件离线分析
• -z 调用 gzip 等工具做压缩
• -Z 切换 user 运行,默认是 tcpdump
• -B 设置 buf 大小,不然抓不全单位 KB 10240
复制代码
eg. tcpdump tcpport80andhost tcpdump -s0 -w %m_%d_%H_%M_%S.pcap -G 5 -z gzip -Z root -c 100000 -i any
宕机场景分析
dropwatch
crash 工具
• log 查看宕机关联日志
• bt 查看宕机位置
• sys 查看基本信息
复制代码
crashvmcore vmlinux vmlinux来自于 kernel debuginfo 包,是带调试信息的二进制内核镜像 如果系统未正确生成vmcore, 需检查 /etc/kdump.conf 配置及其中的设定 vmcore 路径 此处讨论已开始涉及内核态问题,常见异常分析领域不再展开
总结
本文场景化地总结了云平台几类常见的 Linux 服务器异常分析思路及 toolset, 篇幅所限无法面面俱到,但如开篇提到,真正的快速有效的问题判别定位离不开对系统领域的熟悉与细致缜密的判断,以场景化方式灵活地运用好工具箱,达到由表及里、由浅入深的理解系统,快速高效解决线上问题。
作者简介
谢英豪,苏宁科技集团云平台中心高级工程师,长期耕耘于 Linux 内核及操作系统的支撑领域,保障苏宁云环境线上海量 kvm server farm 的稳定高效运行。
Recommend
-
5
换个思路,在touchbar上跟踪服务器状态 一直对MacbookPro的touchbar系列很疑惑,翻了网上的各种教程资料,最多的用法也就是将常用功能映射成一个个图标放到to...
-
3
服务器日志备份超节省空间的思路 | 张戈博客Jager · 7月10日 · 2014年压缩备份 · 远程备份 365次已读...
-
3
为什么要扩容说人话就是, 无论如何优化性能,能达到的最大值是一定的,对于一个用户量大的应用,可以对服务器进行各种优化,诸如限流、资源隔离,但是上限还是在那里,这时候就应该改变我们的硬件,例如使用更强的CPU、更大的内存,在前文中举了一个学生食堂打...
-
1
服务器性能工具箱 (2)- DNS Peng Rong, 2016-01-06 接着上次的网络带宽继续说,网络带宽问题解决完了,但用户反馈还是很慢,时好时坏,怎么办? 做为服务器端开发者,最禁...
-
2
服务器性能工具箱 (1)- 网络带宽 Peng Rong, 2015-12-27 工欲善其事必先利其器,服务器端性能工具箱从“器”出发,本系列文章介绍我遇到的听到的一些关于性能优化的故事 有时候客户端出现访...
-
1
背景 提到静态分析,大家第一反应可能是Sonar、FindBugs等静态代码检查工具,它通过对源码的分析,不实际运行代码,检查代码是否符合编码规范,发现源码中潜在的漏洞。这当中主要通过静态编译相关技术,其实大家在日常的业务代码开发过程...
-
5
Linux性能问题分析流程与性能优化思路-51CTO.COM Linux性能问题分析流程与性能优化思路 作者:华仔聊技术 2022-07-15 08:52:03 除了性能分析外,很多时候,我们还需要对系统性能进行...
-
3
服务器遭受攻击之后的常见思路 哈喽大家好,我是咸...
-
12
V2EX › 问与答 Win11 下 WSA 工具箱无法连接到 ADB(ADB 服务器已启动,但 58526 端口未打开),有无不重启的技术角度解决办法?...
-
6
游戏服务器分布式数据的一种同步的思路 在游戏服务器的分布式设计中,我们通常避免将密切交互或存在数据强耦合的两个模块分别实现在不同的进程中。 然而,在某些...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK