加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

Linux问题故障定位,看这一篇就够了

发布时间:2019-04-02 18:21:01 所属栏目:Windows 来源:Lucien_168
导读:副标题#e# 1. 背景 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以,分析问题和踩

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

7.2 分析工具

7.3 使用方式

  1. //显示网络统计信息 
  2. netstat -s 
  3.  
  4. //显示当前UDP连接状况 
  5. netstat -nu 
  6.  
  7. //显示UDP端口号的使用情况 
  8. netstat -apu 
  9.  
  10. //统计机器中网络连接各个状态个数 
  11. netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 
  12.  
  13. //显示TCP连接 
  14. ss -t -a 
  15.  
  16. //显示sockets摘要信息 
  17. ss -s 
  18.  
  19. //显示所有udp sockets 
  20. ss -u -a 
  21.  
  22. //tcp,etcp状态 
  23. sar -n TCP,ETCP 1 
  24.  
  25. //查看网络IO 
  26. sar -n DEV 1 
  27.  
  28. //抓包以包为单位进行输出 
  29. tcpdump -i eth1 host 192.168.1.1 and port 80  
  30.  
  31. //抓包以流为单位显示数据内容 
  32. tcpflow -cp host 192.168.1.1 

8. 系统负载

8.1 说明

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。

8.2 分析工具

8.3 使用方式

  1. //查看负载情况 
  2. uptime 
  3.  
  4. top 
  5.  
  6. vmstat 
  7.  
  8. //统计系统调用耗时情况 
  9. strace -c -p pid 
  10.  
  11. //跟踪指定的系统操作例如epoll_wait 
  12. strace -T -e epoll_wait -p pid 
  13.  
  14. //查看内核日志信息 
  15. dmesg 

9. 火焰图

9.1 说明

火焰图(Flame Graph是 Bredan Gregg 创建的一种性能分析图表,因为它的样子近似 ?而得名。

火焰图主要是用来展示 CPU的调用栈。

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有”平顶”(plateaus),就表示该函数可能存在性能问题。颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

常见的火焰图类型有On-CPU、Off-CPU、Memory、Hot/Cold、Differential等等。

9.2 安装依赖库

  1. //安装systemtap,默认系统已安装 
  2. yum install systemtap systemtap-runtime 
  3.  
  4. //内核调试库必须跟内核版本对应,,例如:uname -r 2.6.18-308.el5 
  5. kernel-debuginfo-2.6.18-308.el5.x86_64.rpm 
  6. kernel-devel-2.6.18-308.el5.x86_64.rpm 
  7. kernel-debuginfo-common-2.6.18-308.el5.x86_64.rpm 
  8.  
  9. //安装内核调试库 
  10. debuginfo-install --enablerepo=debuginfo search kernel 
  11. debuginfo-install --enablerepo=debuginfo  search glibc 

9.3 安装

  1. git clone https://github.com/lidaohang/quick_location.git 
  2. cd quick_location 

9.4 CPU级别火焰图

cpu占用过高,或者使用率提不上来,你能快速定位到代码的哪块有问题吗?

一般的做法可能就是通过日志等方式去确定问题。现在我们有了火焰图,能够非常清晰的发现哪个函数占用cpu过高,或者过低导致的问题。

9.4.1 on-CPU

cpu占用过高,执行中的时间通常又分为用户态时间user和系统态时间sys。

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读