线上cpu飙高排查之常用命令

平均负载

什么是平均负载?
是指单位时间内系统处于可运行状态(使用cpu或者等待cpu)或者不可中断状态的平均进程数

uptime命令

查看cpu的平均负载

[lciptv@ipcqa-02 ~]$ uptime
 23:11:02 up 15 days, 13:31,  3 users,  load average: 0.00, 0.00, 0.00
含义
23:11:02 系统时间
up 15 days, 13:31 系统运行时间
3 user 用户数
load average: 0.00, 0.00, 0.0 系统过去1分钟,5分钟,15分钟的平均负载

top交互命令

命令 含义
N 按PID由高到低排列
M 根据内存资源使用大小进行排序
P 根据CPU资源使用大小进行排序
c 显示完整的进程信息
1(数字) 显示每个逻辑CPU的详细情况

cpu状态信息:

top命令顶部.jpg
含义
us 用户态cpu使用的占比(没有通过 nice 调度)
sy 内核态cpu使用的占比
ni 改变过优先级的进程占用CPU的百分比,表示用户进程中,通过 CPU 调度(nice)过的使用时间
id 空闲cpu占比
wa IO等待占用CPU的百分比
hi 硬中断(Hardware IRQ)占用CPU的百分比
si 软中断(Software Interrupts)占用CPU的百分比

Cpu(s)与%CPU区别:

Cpu(s): us: 在一定的时间间隔内,用户空间占用CPU时间百分比,是多核心cpu的一个平均值。
%CPU:上次更新到现在的CPU时间占用百分比,多线程情况下,如果是多核,占比可能大于100%

内存信息:

  • free +buff/cache = 可用内存
  • buffer:写磁盘先将数据保存在磁盘缓冲区(buffer),然后写入磁盘
  • cache:将磁盘数据暂存在磁盘缓冲区(cache),供后续程序使用
  • avail Mem:可以分配和使用的内存量,而不会导致更多的交换
  • swap used:swap交换分区的used,如果这个数值在不断的变化,说明内核在不断进行内存和swap的数据交换,这是真正的内存不够用了

释放内存:

  • 管理内存的三种方式:

    0:是系统默认值,默认情况下表示不释放内存,由操作系统自动管理  
    1:释放页缓存 
    2:释放dentries和inodes
    3:释放所有缓存

  • 手动释放缓冲区的内存到free

(1)手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)
(2)释放 echo 3 > /proc/sys/vm/drop_caches 
(3)如果现在想让操作系统重新分配内存,那么设置drop_caches的值为0即可 echo 0 > /proc/sys/vm/drop_caches

  • 操作系统释放缓冲区内存到free
top命令中部.jpg

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

cpu上下文切换

什么是cpu上下文切换?
频繁的上下文切换,会将CPU都消耗在CPU上下文的保存和恢复上,导致任务运行时间变短,影响系统性能。

vmstat命令

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   3084 472340   3352 12038260    0    0     4     2    9    3  0  0 100  0  0
含义
in 每秒中断的次数
cs 每秒上下文切换的次数

jstack命令

jstack命令工具可以得到线程堆栈信息,根据这些线程堆栈信息,我们可以去检查Java程序出现的问题,如检测死锁,并输出死锁的信息的排查

1、打印进程下面的线程列表

ps -mp pid(进程id) -o THREAD,tid(线程id),time

[lciptv@ipcqa-02 ~]$ ps -mp 126242 -o THREAD,tid,time
USER     %CPU PRI SCNT WCHAN  USER SYSTEM     TID     TIME
lciptv    0.1   -    - -         -      -       - 00:05:05
lciptv    0.0  19    - -         -      -  126242 00:00:00
lciptv    0.0  19    - -         -      -  126243 00:00:03

2、将需要的线程ID转换为16进制格式

printf "%x\n" tid(线程id)

[lciptv@ipcqa-02 ~]$ printf "%x\n" 126242
1ed22

3、打印线程的堆栈信息

jstack pid(进程id) |grep tid -A 100

jstack pid |grep tid -A 100

ps命令

  • aux 关注线程本身a:显示一个终端所有的进程u:显示进程的归属用户及内存使用情况x:显示没有关联控制终端的进程

  • axjf 关注线程之间的关系j:显示进程归属的进程组id、会话id、父进程idf:以ascii的形式显示出进程的层次关系

  • ef

    e:显示所有进程

    -f : 全格式

[lciptv@ipcqa-04 ~] $ ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 191204  3592 ?        Ss   6月27   0:40 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    6月27   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        S<   6月27   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    6月27   0:02 [ksoftirqd/0]
  • USER:进程是哪个用户产生的

  • PID:进程的身份证号码

  • %CPU:指进程对CPU的占用率

  • %MEM:进程占用内存的百分比

  • VSZ:进程使用虚拟内存的大小

  • RSS:进程使用物理内存的大小

  • TTY:进程关联的终端

  • STAT:进程当前状态

    -D:不可被唤醒的睡眠状态,通常用于I/O情况
    -R:该线程正在运行
    -S:该线程处于睡眠状态,可被唤醒
    -T:停止状态,可能在后台暂停或者进程处于出错状态
    -X:死掉的进程
    -Z:僵尸状态
    -N:低优先级
    -l:多线程
    -+:位于后台
    
  • START:进程的启动时间

  • TIME:进程运行的时间

  • COMMAND:当前进程执行的是哪个程序

[lciptv@ipcqa-04 ~] $ ps -axjf
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     2     0     0 ?           -1 S        0   0:00 [kthreadd]
    2     4     0     0 ?           -1 S<       0   0:00  \_ [kworker/0:0H]

PPID:当前进程父进程的idPID:当前进程的idPGID:当前进程所在的进程组的IDSID:进程所在的会话的IDTTY:进程所关联的终端TPGID:判断进程是否为守护进程(-1则为守护进程)STAT:进程当前状态UID:用户ID,记录进程是哪个用户启动的TIME:进程运行的时间COMMAND:记录进程之间的层次关系(和上边不同)

ps -ef | grep java 命令详解

[lciptv@ipcqa-04 ~] $ ps -ef | grep java
lciptv    2948     1  0 6月27 ?        00:20:40 /home/lciptv/app/jdk8/bin/java -classpath . -Dtarget=cqcu_serviceauth-service -Dspring.profiles.active=dev -jar iptv.serviceauth-4.0.0.BUILD-SNAPSHOT.jar

UID :程序被该 UID 所拥有
PID :就是这个程序的 ID
PPID :则是其上级父程序的ID
C :CPU使用的资源百分比
STIME :系统启动时间
TTY :登入者的终端机位置
TIME :使用掉的CPU时间
CMD :所下达的是什么指令

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容