阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

云平台 Linux 服务器问题场景分析思路及工具箱

  • 2019-05-04
  • 本文字数:2641 字

    阅读完需:约 9 分钟

云平台 Linux 服务器问题场景分析思路及工具箱

前言

本文主要结合笔者在苏宁云平台支撑工作中的实践,以基于经验切实有效的判定分析方式贯穿, 整理了云平台 Linux 服务器(下文中区分了物理机及虚拟机)运维中的常见问题场景、分析工具箱及判别思路。主要包含以下三部分:


  1. Linux 服务器 CPU、I/O、内存性能异常的常用工具、判定标准、以及分析思路。

  2. Linux 服务器异常宕机的故障可能的原因、定位方法与常规分析思路。

  3. Linux 服务器丢包的问题可能的原因、定位方法与常规分析思路。


读者范围:中高级 linux 服务器运维人员


注:本文结合问题图景枚举了各个 tool 与分析关联较大的参数及用法,以起到一个示例说明,各工具的详细用法需要自行阅读研习 man 手册。

Linux 服务器 CPU、I/O、内存性能异常

CPU 异常


图 1 CPU 异常分解

top

top -H -d 1 -c
高亮列及运行进程 z x y选择 shift+L/Rarrow
复制代码

pidstat

• -d 磁盘读写报告 I/O 统计


• -r 内存使用及缺页


• -u CPU


• -l 展示命令行及参数


• -w switch


• -t 显示线程的统计


• -T


每秒展示活动进程的CPU使用率pidstat -u 1按线程组关系聚合展示CPU消耗时间,帮助找出busy 线程pidstat  -t 1 -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

开启开关echo 1 > /proc/sys/kernel/sysrq打印进程堆栈echo t > /proc/sysrq-triggereg.如果已经softlockup 且业务影响已然明显,停业务后用下面命令产生一个vmcoreecho c > /proc/sysrq-trigger
复制代码

strace

• -c 统计系统调用次数及时间


• -f 也 trace 子进程调用


• -e 指明关心的调用 eg. -e open,write


eg:


命令执行时挂起,了解进程挂在哪个syscallstrace cmd arg进程系统调用开销较大,获取syscall统计strace -p PID -c
复制代码

gdb

• bt 查看执行堆栈


• frame 切换工作帧


用户进程的cpu消耗影响系统整体使用,配合debuginfo及代码可大致梳理出占用逻辑,attach后,进程会STOPgdb -p PID
复制代码

perf

perf top 在线采样及展示:


• -e 指明事件,默认是 cycle,全部时间可 perf list 查询


• -G 调用图


• -F 采样频率


• -d 刷新间隔


• -p 特定进程


• -C 特定核


perf top -d1 -G -F 99 -zshift + e 可展开堆栈视图shift + c 可折叠堆栈视图
复制代码


perf record/report


• record 输出采样文件 perf.data 文件


• report 解析


perf record -F 99 -a -g -p PID -C 6 sleep 5perf report
复制代码

内存异常


图 2 内存异常分解

一般检查

free
cat /proc/self/statuscat /proc/self/smaps
numastat -m
numactl --hardware
cat /proc/meminfo
复制代码

zoneinfo

cat /proc/zoneinfo |egrep "zone|min|low|high|free|present"....Node 0, zone   Normal  pages free     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 异常


图 3 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损坏?
复制代码

网络异常场景


图 4 网络异常分析

ethtool

ethtool -S关注drop  error 
复制代码

tc 统计检查

tc -s -d qd关注包drop情况
复制代码

ss netstat iftop

常用连接查看netstat -ntpnetstat -ntplss -ie
复制代码

tcpdump

• -i 待抓取的网口名字


• -w 抓包文件,可以是时间格式化串


• -G 回滚时长,单位秒


• -c 抓取多少个包后退出


• -s 抓取部分报文,单位字节


• -r 读取抓包文件离线分析


• -z 调用 gzip 等工具做压缩


• -Z 切换 user 运行,默认是 tcpdump


• -B 设置 buf 大小,不然抓不全单位 KB 10240


eg.
tcpdump tcp port 80 and host tcpdump -s0 -w %m_%d_%H_%M_%S.pcap -G 5 -z gzip -Z root -c 100000 -i any
复制代码

宕机场景分析


图 5 宕机场景分析

dropwatch

crash 工具

• log 查看宕机关联日志


• bt 查看宕机位置


• sys 查看基本信息


crash  vmcore  vmlinuxvmlinux 来自于kernel debuginfo包,是带调试信息的二进制内核镜像
如果系统未正确生成vmcore, 需检查 /etc/kdump.conf 配置及其中的设定vmcore 路径此处讨论已开始涉及内核态问题,常见异常分析领域不再展开
复制代码

总结

本文场景化地总结了云平台几类常见的 Linux 服务器异常分析思路及 toolset, 篇幅所限无法面面俱到,但如开篇提到,真正的快速有效的问题判别定位离不开对系统领域的熟悉与细致缜密的判断,以场景化方式灵活地运用好工具箱,达到由表及里、由浅入深的理解系统,快速高效解决线上问题。




作者简介


谢英豪,苏宁科技集团云平台中心高级工程师,长期耕耘于 Linux 内核及操作系统的支撑领域,保障苏宁云环境线上海量 KVM Server Farm 的稳定高效运行。


2019-05-04 11:005445

评论 2 条评论

发布
用户头像
写得还挺像样的
2019-05-05 10:12
回复
用户头像
收藏了!!
2019-05-04 21:47
回复
没有更多了
发现更多内容

MySQL连接数管理

Simon

MySQL

mPaaS 月度小报 | CodeDay#6 成都站落幕,下一站北京;上新季:新容器、新官网、新视觉

蚂蚁集团移动开发平台 mPaaS

移动开发 mPaaS

开源即巅峰!阿里首次分享:Java架构师全栈“成长笔记”

Java架构师迁哥

记某百亿级mongodb集群数据过期性能优化实践

杨亚洲(专注MongoDB及高性能中间件)

Java MySQL 数据库 mongodb 分布式数据库mongodb

Java项目实战营总结

eoeoeo

对EF Core进行扩展使支持批量操作/复杂查询

Spook

EF Core

字节跳动有状态应用云原生实践

火山引擎开发者社区

云原生 后端

部分简单网页的基础了解

Emotion

html html5 Html报文解析 内部样式、 CSS语法

Hive学习笔记(一)

五分钟学大数据

hive 7月日更

云原生打包工具:Buildpacks

QiLab

Docker 云原生 k8s buildpacks

银行4.0时代的营销与风控之路

索信达控股

大数据 金融科技 数字化转型 银行数字化转型 营销数字化

监测生命体征、活动水平的可穿戴电子产品设计方案

不脱发的程序猿

物联网 ADI 可穿戴电子产品设计方案 监测生命体征、活动水平 智能传感器

CDH 安装搭建(二)

大数据技术指南

CDH 7月日更

手机如果能折叠能卷的话,电脑为什么不能呢?

船医特拉法尔加

开发者 工具 柔性屏

渗透工程师必看-网络安全法条例-国家安全法介绍和案例

学神来啦

运维 黑客 安全 渗透

数据归档 - 冷热数据处理大师

趣链科技

数据处理 区块链+

程序员如何提高开发效率?

万事ONES

项目管理 程序员 敏捷开发 ONES

手把手教你实现聚光灯效果

ThingJS数字孪生引擎

大前端 可视化 智能灯控 数字孪生

QuFi挖矿APP开发|QuFi挖矿系统软件开发

Go 学习笔记之 字符串数据类型

架构精进之路

Go 语言 7月日更

共36万字!为上岸Alibaba,我把Github上Java面试题都整理了一遍

Java 编程 程序员 架构 面试

卧薪尝胆30天!啃透京东大牛的高并发设计进阶手册,终获P7意向书

Java 编程 程序员 架构 面试

这套获50w+星标的算法神仙文档,足你解决90%的对手,牛逼

编程 程序员 架构 面试

云图说|应用魔方AppCube:揭秘码农防脱神器

华为云开发者联盟

低代码 华为云 AppCube 云图说 应用魔方

区块链时代下,企业如何打造数据要素的“新竞争力”?

旺链科技

大数据 产业区块链

云端赛车-Amazon DeepRacer 的前世今生

亚马逊云科技 (Amazon Web Services)

人工智能 开源

JAVA 九种排序算法详解(下)

加百利

Java 数组 排序 7月日更

阿里的架构师一致好评!IT界首版全栈架构师全栈“成长笔记”开源!

Java架构追梦

Java 阿里巴巴 架构 面试 成长笔记

腾讯上线零点巡航,用Java手撕一个人脸识别系统

北游学Java

Java 腾讯 人脸识别

爱了!阿里巴巴 Java 面试参考权威指南(泰山版)5月版开源

Java 编程 程序员 架构 面试

linux网络编程—7层网络以及5种Linux IO模型以及相应IO基础

Linux服务器开发

后端 网络编程 Linux服务器开发 网络模型 IO模型

云平台 Linux 服务器问题场景分析思路及工具箱_开源_谢英豪_InfoQ精选文章