Linux 问题的故障定位

主要介绍各种问题定位的工具以及会结合案例分析问题

1. 分析问题

  • What-现象是什么样的

  • When-什么时候发生

  • Why-为什么会发生

  • Where-哪个地方发生的问题

  • How much-耗费了多少资源

  • How to do-怎么解决问题

2. cpu 

针对应用程序,我们通常关注的是内核CPU调度器功能和性能。

线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类一般分为:

① on-CPU:执行中,执行中的时间通常又分为用户态时间 user 和系统态时间 sys

② off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。

如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于 off-cpu 状态,定位问题就会费时很多。但是仍然需要清楚一些概念:

  • 处理器

  • 硬件线程

  • CPU内存缓存

  • 时钟频率

  • 每指令周期数CPI和每周期指令数IPC

  • CPU指令

  • 使用率

  • 用户时间/内核时间

  • 调度器

  • 运行队列

  • 抢占

  • 多进程

  • 多线程

  • 字长

分析工具:

注意:

  • uptime,vmstat,mpstat,top,pidstat 只能查询到 cpu 及负载的的使用情况。

  • perf 可以跟着到进程内部具体函数耗时情况,并且可以指定内核函数进行统计

使用方式:

#查看系统cpu使用情况
top#查看所有cpu核信息
mpstat -P ALL 1#查看cpu使用情况以及平均负载
vmstat 1#进程cpu的统计信息
pidstat -u 1 -p pid#跟踪进程内部函数级cpu使用情况
perf top -p pid -e cpu-clock

3. 内存

内存是为提高效率而生,实际分析问题的时候,内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题。同样对于内存有些概念需要清楚:

  • 主存

  • 虚拟内存

  • 常驻内存

  • 地址空间

  • OOM

  • 页缓存

  • 缺页

  • 换页

  • 交换空间

  • 交换

  • 用户分配器libc、glibc、libmalloc和mtmalloc

  • LINUX内核级SLUB分配器

分析工具:

说明:

  • free,vmstat,top,pidstat,pmap 只能统计内存信息以及进程的内存使用情况。

  • valgrind 可以分析内存泄漏问题。

  • dtrace 动态跟踪,需要对内核函数有很深入的了解,通过D语言编写脚本完成跟踪。

使用方式:

#查看系统内存使用情况
free -m#虚拟内存统计信息
vmstat 1#查看系统内存情况
top# 1s采集周期,获取内存的统计信息
pidstat -p pid -r 1#查看进程的内存映像信息
pmap -d pid#检测程序内存问题
valgrind --tool=memcheck --leak-check=full --log-file=./log.txt  ./程序名

4. 磁盘IO

磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。访问硬盘和访问内存之间的速度差别是以数量级来计算的,就像1天和1分钟的差别一样。要监测 IO 性能,有必要了解一下基本原理和 Linux 是如何处理硬盘和内存之间的 IO 的。

在理解磁盘IO之前,同样我们需要理解一些概念,例如:

  • 文件系统

  • VFS

  • 文件系统缓存

  • 页缓存page cache

  • 缓冲区高速缓存buffer cache

  • 目录缓存

  • inode

  • inode缓存

  • noop调用策略

分析工具:

操作:

#查看系统io信息
iotop#统计io详细信息
iostat -d -x -k 1 10#查看进程级io的信息
pidstat -d 1 -p  pid#查看系统IO的请求,比如可以在发现系统IO异常时,可以使用该命令进行调查,就能指定到底是什么原因导致的IO异常
perf record -e block:block_rq_issue -agperf report

5. 网络

网络的监测是所有 Linux 子系统里面最复杂的,有太多的因素在里面,比如:延迟、阻塞、冲突、丢包等,更糟的是与 Linux 主机相连的路由器、交换机、无线信号都会影响到整体网络并且很难判断是因为 Linux 网络子系统的问题还是别的设备的问题,增加了监测和判断的复杂度。现在我们使用的所有网卡都称为自适应网卡,意思是说能根据网络上的不同网络设备导致的不同网络速度和工作模式进行自动调整。

分析工具:

#显示网络统计信息
netstat -s#显示当前UDP连接状况
netstat -nu#显示UDP端口号的使用情况
netstat -apu#统计机器中网络连接各个状态个数
netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'#显示TCP连接
ss -t -a#显示sockets摘要信息
ss -s#显示所有udp sockets
ss -u -a#tcp,etcp状态
sar -n TCP,ETCP 1#查看网络IO
sar -n DEV 1#抓包以包为单位进行输出
tcpdump -i eth1 host 192.168.1.1 and port 80 #抓包以流为单位显示数据内容
tcpflow -cp host 192.168.1.1

6.系统负载

Load 就是对计算机干活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)简单的说是进程队列的长度。Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load。

分析工具:

使用方式:

#查看负载情况
uptimetopvmstat#统计系统调用耗时情况
strace -c -p pid#跟踪指定的系统操作例如epoll_wait
strace -T -e epoll_wait -p pid#查看内核日志信息
dmesg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/460350.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【stomp实战】Springboot+Stomp协议实现聊天功能

本示例实现一个功能,前端通过websocket发送消息给后端服务,后端服务接收到该消息时,原样将消息返回给前端。前端技术栈htmlstomp.js,后端SpringBoot 前端代码 关于stomp客户端的开发,如果不清楚的,可以看…

运维高级篇-分库分表(拆分策略详解)

分库分表 介绍 问题分析 随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存 储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘…

DFS——剪枝

dfs在每个点(状态)的情况比较多,但是节点比较少的时候很常用,我们将每个状态的情况延伸出去,可以画出一棵搜索树。dfs会搜到每一种情况,所以我们实际上可以按照任意顺序来判否。为了优化搜索我们可以在搜索…

深度分析一款新型Linux勒索病毒

前言 DarkRadiation勒索病毒是一款全新的Linux平台下的勒索病毒,2021年5月29日首次在某平台上发布了此勒索病毒的相关的信息,6月中旬趋势科技针对这个新型的勒索病毒进行了相关的分析和报道。 DarkRadiation勒索病毒采用Bash脚本语言编写实现&#xff0…

多普勒效应的一些解释

摘自《多普勒效应教学中的几个疑问》 摘自《面向工科物理学生的多普勒效应讲解》

Zabbix 配置实时开通的LDAP认证-基于AD

介绍 本教程适用于6.4-7.0版本的Zabbix,域控(AD)使用Windows Server 2022搭建,域控等级为 2016。 域控域名为 songxwn.com 最终实现AD用户统一认证,统一改密,Zabbix用户自动添加。(6.4之前不…

1897_野火FreeRTOS教程阅读笔记_链表

1897_野火FreeRTOS教程阅读笔记_链表 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 (gitee.com) 之前我自己通过直接啃代码的方式对FreeRTOS也算是有了一点理解了,这次趁着些许闲暇翻看一下野火的FreeRTOS教程。一者算是一种复习;二者可能对自…

Python中使用opencv-python库进行颜色检测

Python中使用opencv-python库进行颜色检测 之前写过一篇VC中使用OpenCV进行颜色检测的博文,当然使用opencv-python库也可以实现。 在Python中使用opencv-python库进行颜色检测非常简单,首选读取一张彩色图像,并调用函数imgHSV cv2.cvtColor…

VScode为什么选择了Electron,而不是QT?

选择Electron而不是QT可能是基于以下几个原因: Web技术的普及和开发者生态系统:Web技术如HTML、CSS和JavaScript在开发者中非常普及,开发者生态系统庞大且活跃。使用Electron可以利用这些熟悉的Web技术和丰富的开发者社区资源。跨平台支持&am…

林浩然与杨凌芸的Java奇遇记:Lambda表达式大冒险

林浩然与杨凌芸的Java奇遇记:Lambda表达式大冒险 Lin Haoran and Yang Lingyun’s Java Adventure: The Grand Expedition of Lambda Expressions 在Java编程世界的一隅,住着一对编程界的“才子佳人”,男主角名叫林浩然,女主角唤作…

如何修复Mac的“ kernel_task” CPU使用率过高的Bug?

当计算机开始缓慢运行时,这从来都不是一件有趣的事情,但是当您弄不清它为何如此缓慢时,甚至会变得更糟。如果您已经关闭了所有程序,并且Mac上的所有内容仍然感觉像是在糖蜜中移动,这可能是令人讨厌的kernel_task导致高…

如何从iPhone15上恢复意外删除的数据文件(备忘录、通讯录、照片等)

您是否正在寻找恢复 Apple 设备上丢失数据的方法?这是最好用的 iPhone 15数据恢复软件的汇总。 iPhone 数据恢复软件允许从Apple 设备中检索丢失或删除的数据。随着越来越依赖智能手机来存储个人和专业信息,数据丢失可能是一种令人沮丧和压力很大的体验…