• 线上服务CPU 100%了常用的Linux命令详解


    前言

    经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学可能登上服务器一通手忙脚乱,定位过程百转千回。

    对此,也有不少同学曾经整理过相关流程或方法论,类似把大象放进冰箱要几步,传统的方案一般是4步:

    1、 top 查看占用CPU资源最高的进程

    top
    

    2、 查看进程中,占用CPU资源最高的线程PID

    top -Hp 进程PID
    

    3、 十进制线程ID转十六进制线程ID

    printf "0x%x
    " 线程PID
    

    4、查看Java进程内的占用CPU资源最高的线程堆栈信息

    jstack 进程PID | vim +/十六进制线程PID -
    

    注意结尾的 - 不要漏!

    top

    top 程序提供运行系统的动态实时视图。它可以显示系统摘要信息以及当前由Linux内核管理的 进程线程 的列表。

    因此,个人理解 top 可以帮助我们观察 进程 或者 线程 占用的 CPU,内存资源的情况。通过 man top 指令可以查看更多关于 top 的简介。

    -H 参数: 指示top程序显示各个线程。如果没有此命令行选项,则显示每个进程中所有线程的总和。

    -p 参数: 仅监视具有指定进程ID的进程。

    top -p 进程PID 或者 top -p进程PID 都是合法的。-p 可以和进程PID之间空一个空格,也可以不加空格。
    top -p进程PID -Htop -H -p进程PIDtop -Hp 进程PID 是等效的。区别就是将 top 命令的参数合并在一起还是将参数分开。

    printf

    printf 是C语言中常用的输出函数。

    %x 以十六进制的形式输出。

    命令 输出 备注
    printf "%x" 31 1f 字母小写
    printf "%X" 31 1F 字母大写
    printf "%#x" 31 0x1f 字母小写,并以0x为前缀
    printf "%#X" 31 0X1F 字母大写,并以0X为前缀

    jstack

    通过 jstack -help 可以查看 jstack 的用法和参数。

    jstack 主要用来查看某个Java进程内的线程堆栈信息。

    最常用的语法格式:

    jstack [option] <pid>
    

    如果会打印出额外的锁信息,在发生死锁时可以用 jstack -l

    jstack -l <pid>
    

    管道符 |

    利用管道符|:可将一个命令的 stdout 重定向成为另外一个命令的 stdin

    vim

    通过 vim -help 可以查看更多关于 vim 参数的介绍。

    上面这张图解释了为什么在 jstack 进程PID | vim +/十六进制线程PID - 组合命令中一定要在结尾加上 - !!

    因为 jstack 命令的内容本来是 stdout,现在通过管道符 | 重定向作为 vim 命令的 stdin。如果不加 - ,那就没有输入了。

    vim +/string -: 从标准输入(stdin)读取文本,并将光标停留在第一个找到的string上。

    参考文档

    老公,人家线上服务CPU 100%了,肿么办嘛 跳转 click here

    printf用法大全,C语言printf格式控制符一览表 跳转 click here

    linux 管道符输入,linux/unix管道符和stdout、stdin 跳转 click here

    vim 操作命令大全 跳转 click here

  • 相关阅读:
    Oracle 数据块,文件块转换,查看数据块对像
    逆向与汇编视频(36课) IDA 使用
    VC++消息钩子编程
    VS2008中opengl配置
    BSP技术详解3有图有真相
    BSP技术详解1有图有真相
    oracle 跟踪文件和转储命令
    BSP技术详解2有图有真相
    Recognizing and Learning Object Categories 连接放送
    自学MVC看这里——全网最全ASP.NET MVC 教程汇总
  • 原文地址:https://www.cnblogs.com/kendoziyu/p/14813879.html
Copyright © 2020-2023  润新知