• Linux问题故障定位


    CPU

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

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

    a. on-CPU:执行中,执行中的时间通常又分为用户态时间user和系统态时间sys。
    b. off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态可以细分为可执行、匿名换页、睡眠、锁、空闲等状态。

    如果大量时间花在CPU上,对CPU的剖析能够迅速解释原因;如果系统时间大量处于off-cpu状态,定位问题就会费时很多。

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

    内存

    内存出现问题可能不只是影响性能,而是影响服务或者引起其他问题

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

    磁盘IO

    磁盘通常是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,因为磁盘离 CPU 距离最远而且 CPU 访问磁盘要涉及到机械操作,比如转轴、寻轨等。

    //查看系统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 -ag
    ^C
    perf report

    网络

    网络的监测是所有 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

    系统负载

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

    参考链接:https://www.jianshu.com/p/0bbac570fa4c

  • 相关阅读:
    分享动态生成文字图片解决方案
    文本框的回车添加事件
    最小化到系统托盘代码
    匹配所有html标记 正则
    根据字体文件创建字体
    获取或设置当用户按 Enter 键时所单击的窗体上的按钮。
    c#webBrowser 实现自动填入选择下拉列表
    [08] Docker_2
    [07] Docker_1
    查了一下平板电视的价格行情
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/9957955.html
Copyright © 2020-2023  润新知