性能监控和优化

CPU

查看 CPU 型号和个数:grep 'model name' /proc/cpuinfo

uptime

[biocloo@app2 ~]$ uptime
 11:22:44 up 99 days, 14:53,  2 users,  load average: 2.03, 1.70, 1.61
 
// 11:22:44 当前时间
// up 99 days, 14:53 系统运行时间
// 2 users  正在登陆的用户数
// load average 后面的三个数字分别是过去 1分钟,5分钟,15分钟的平均负载

top:系统摘要信息以及当前由Linux内核管理的进程或线程列表

# 第一行的含义与使用 uptime 返回的一样。

# 第二行表示总进程数和线程数,和分类。

# 第三行表示 CPU 状态百分比
# user(通常缩写为 us),代表用户态 CPU 时间。注意,它不包括下面的 nice 时间,但包括了 guest 时间。
# system(通常缩写为 sy),代表内核态 CPU 时间。
# nice(通常缩写为 ni),代表低优先级用户态 CPU 时间,也就是进程的 nice 值被调整为 1-19 之间时的 CPU 时间。这里注意,nice 可取值范围是 -20 到 19,数值越大,优先级反而越低。
# idle(通常缩写为 id),代表空闲时间。注意,它不包括等待 I/O 的时间(iowait)。
# iowait(通常缩写为 wa),代表等待 I/O 的 CPU 时间。
# irq(通常缩写为 hi),代表处理硬中断的 CPU 时间。
# softirq(通常缩写为 si),代表处理软中断的 CPU 时间。
# steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的 CPU 时间。

# 第四行反应物理内存使用情况,单位为千字节

# 第五行反应虚拟内存。

# 第六行
# PID 进程ID
# USER 任务所有者
# PR 优先级。rt 表示实时。
# NI 任务的 nice value。负的意味着更高的优先级,而正的意味着更低的优先级。 此字段中的零值仅表示在确定任务的调度能力时不会调整优先级。
# VIRT 虚拟内存大小。此任务已使用的虚拟内存总量。它包括所有代码,数据和共享库以及已换出的页面和已映射但未使用的页面。
# RES 驻留内存大小。任务正在使用的非交换物理内存。
# SHR 共享内存大小。可用于任务的共享内存量,并非所有内容通常都是驻留的。 它只是反映了可能与其他进程共享的内存。
# S 进程状态。D 不间断睡眠。R 运行。S 睡眠。T 被作业控制信号停止。t 在 debug 被停止。Z 僵尸。
# %CPU CPU 使用率 
# %MEM 内存使用率
# TIME+ 自任务启动使用总 CPU 时间。

[biocloo@app2 ~]$ top
top - 15:47:57 up 99 days, 19:18,  1 user,  load average: 0.49, 1.15, 1.61
Tasks:  89 total,   1 running,  88 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.3 us,  0.8 sy,  0.0 ni, 93.2 id,  0.1 wa,  0.0 hi,  0.6 si,  0.0 st
KiB Mem : 16267724 total,   572080 free,  7713840 used,  7981804 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  8153176 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                           
26703 biocloo   20   0 7892880 2.026g   7244 S  20.0 13.1   1727:22 java                                              
25533 biocloo   20   0 1264128 143588   4200 S   2.7  0.9   3269:04 filebeat                                          
13217 biocloo   20   0 10.663g 1.859g   8148 S   1.3 12.0 227:15.47 java                                              
 1168 root      20   0 2531604  85292   3016 S   1.0  0.5 616:51.62 java                                              
    9 root      20   0       0      0      0 S   0.3  0.0 157:15.55 rcu_sched                                         
 1091 root      20   0  122040    892    296 S   0.3  0.0  48:07.98 wrapper                                           
 9269 root       0 -20  128384   9228   4652 S   0.3  0.1 194:31.22 AliYunDun                                         
26855 biocloo   20   0 7895992 2.784g   7216 S   0.3 17.9   1287:51 java                                              
    1 root      20   0   43392   2888   1556 S   0.0  0.0   1:30.58 systemd                                           
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.27 kthreadd                                          
    3 root      20   0       0      0      0 S   0.0  0.0   5:34.81 ksoftirqd/0                                       
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                      
    7 root      rt   0       0      0      0 S   0.0  0.0   0:28.66 migration/0                                       
    8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                            
   10 root      rt   0       0      0      0 S   0.0  0.0   0:21.78 watchdog/0                                        
   11 root      rt   0       0      0      0 S   0.0  0.0   0:17.62 watchdog/1                                        
   12 root      rt   0       0      0      0 S   0.0  0.0   0:30.18 migration/1                                       
   13 root      20   0       0      0      0 S   0.0  0.0  16:33.84 ksoftirqd/1                                       
   15 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H                                      
   16 root      rt   0       0      0      0 S   0.0  0.0   0:18.12 watchdog/2                                        
   17 root      rt   0       0      0      0 S   0.0  0.0   0:27.21 migration/2                                       
   18 root      20   0       0      0      0 S   0.0  0.0   5:39.52 ksoftirqd/2                                       
   20 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/2:0H                                      
   21 root      rt   0       0      0      0 S   0.0  0.0   0:17.55 watchdog/3                                        
   22 root      rt   0       0      0      0 S   0.0  0.0   0:29.42 migration/3 

mpstat:每个可用CPU的活动,默认是CPU利用率报告。

// -P ALL 表示监控所有 CPU,后面数字 5 表示间隔 5 秒后输出一组数据
[biocloo@app2 ~]$ mpstat -P ALL 5
Linux 3.10.0-693.2.2.el7.x86_64 (app2)  2019年03月08日     _x86_64_    (4 CPU)

11时26分39秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11时26分44秒  all    8.42    0.00    1.20    0.10    0.00    0.80    0.00    0.00    0.00   89.48
11时26分44秒    0    9.05    0.00    1.21    0.00    0.00    0.40    0.00    0.00    0.00   89.34
11时26分44秒    1    7.26    0.00    1.01    0.00    0.00    0.81    0.00    0.00    0.00   90.93
11时26分44秒    2    9.60    0.00    1.40    0.20    0.00    0.80    0.00    0.00    0.00   88.00
11时26分44秒    3    7.78    0.00    1.40    0.00    0.00    1.00    0.00    0.00    0.00   89.82

11时26分44秒  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
11时26分49秒  all    7.15    0.00    1.11    0.10    0.00    0.81    0.00    0.00    0.00   90.84
11时26分49秒    0    8.25    0.00    1.21    0.20    0.00    0.80    0.00    0.00    0.00   89.54
11时26分49秒    1    4.23    0.00    0.60    0.00    0.00    0.60    0.00    0.00    0.00   94.56
11时26分49秒    2    9.22    0.00    1.40    0.20    0.00    0.80    0.00    0.00    0.00   88.38
11时26分49秒    3    7.09    0.00    0.81    0.00    0.00    1.01    0.00    0.00    0.00   91.09

pidstat:用于监控当前由Linux内核管理的各个任务

-u 查看 cpu 使用指标

-w 查看进程切换指标

-t 与所选任务关联的线程的统计信息。

# UID 用户ID
# PID 任务ID
# %usr:用户态 CPU 使用率。
# %system:内核态 CPU 使用率。
# %guest 运行虚拟机 CPU 使用率。
# %wait 等待 CPU 使用率。
# %CPU 以及总的 CPU 使用率。
# CPU 任务在第几个 CPU 上运行。

# 每间隔5秒输出一组数据,一共输出3组。
[biocloo@app2 ~]$ pidstat -u 5 3
Linux 3.10.0-693.2.2.el7.x86_64 (app2)  2019年03月08日     _x86_64_    (4 CPU)

11时32分31秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
11时32分36秒     0        41    0.00    0.20    0.00    0.20     2  kswapd0
11时32分36秒     0       281    0.00    0.20    0.00    0.20     3  jbd2/vda1-8
11时32分36秒     0      1168    0.20    0.00    0.00    0.20     1  java
11时32分36秒     0      1312    0.20    0.00    0.00    0.20     1  aliyun-service
11时32分36秒     0      9269    0.20    0.20    0.00    0.40     0  AliYunDun
11时32分36秒  1000     13217    3.19    0.60    0.00    3.79     0  java
11时32分36秒  1000     25533    3.59    0.20    0.00    3.79     2  filebeat
11时32分36秒  1000     26703   24.95    3.59    0.00   28.54     0  java
11时32分36秒  1000     26855    0.20    0.00    0.00    0.20     2  java

11时32分36秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
11时32分41秒     0         9    0.00    0.20    0.00    0.20     1  rcu_sched
11时32分41秒     0      1168    0.20    0.20    0.00    0.40     1  java
11时32分41秒  1000      4153    0.00    0.20    0.00    0.20     1  pidstat
11时32分41秒     0      9269    0.00    0.20    0.00    0.20     1  AliYunDun
11时32分41秒  1000     13217    3.40    0.40    0.00    3.80     0  java
11时32分41秒  1000     25533    3.60    1.00    0.00    4.60     2  filebeat
11时32分41秒  1000     26703   27.40    4.20    0.00   31.60     0  java
11时32分41秒  1000     26855    0.00    0.20    0.00    0.20     2  java

11时32分41秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
11时32分46秒     0         9    0.00    0.20    0.00    0.20     1  rcu_sched
11时32分46秒     0      1168    0.60    0.00    0.00    0.60     1  java
11时32分46秒     0      9269    0.20    0.00    0.00    0.20     1  AliYunDun
11时32分46秒  1000     13217    1.80    0.40    0.00    2.20     0  java
11时32分46秒  1000     25533    3.80    0.00    0.00    3.80     2  filebeat
11时32分46秒  1000     26703   27.60    2.60    0.00   30.20     0  java

平均时间:   UID       PID    %usr %system  %guest    %CPU   CPU  Command
平均时间:     0         9    0.00    0.13    0.00    0.13     -  rcu_sched
平均时间:     0        41    0.00    0.07    0.00    0.07     -  kswapd0
平均时间:     0       281    0.00    0.07    0.00    0.07     -  jbd2/vda1-8
平均时间:     0      1168    0.33    0.07    0.00    0.40     -  java
平均时间:     0      1312    0.07    0.00    0.00    0.07     -  aliyun-service
平均时间:  1000      4153    0.00    0.07    0.00    0.07     -  pidstat
平均时间:     0      9269    0.13    0.13    0.00    0.27     -  AliYunDun
平均时间:  1000     13217    2.80    0.47    0.00    3.26     -  java
平均时间:  1000     25533    3.66    0.40    0.00    4.06     -  filebeat
平均时间:  1000     26703   26.65    3.46    0.00   30.11     -  java
平均时间:  1000     26855    0.07    0.07    0.00    0.13     -  java

vmstat:虚拟内存,上下文切换统计信息。

//* r(Running or Runnable):是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
//* b(Blocked):则是处于不可中断睡眠状态的进程数。

// swpd:使用的虚拟内存量。
// free:空闲内存量。
// buff:用作缓冲区的内存量。
// cache:用作缓存的内存量。

// si:从磁盘交换的内存量。
// so:交换到磁盘的内存量。

// bi:从块设备接收的块。
// bo:发送到块设备的块。

//* in(interrupt)则是每秒中断的次数。
//* cs(context switch)是每秒上下文切换的次数。

// us:运行非内核代码所花费的时间。
// sy:运行内核代码所花费的时间。
// id:空闲时间。在Linux 2.5.41之前,这包括IO等待时间。
// wa:等待IO的时间。在Linux 2.5.41之前,包含在空闲状态。
// st:从虚拟机中窃取的时间。在Linux 2.6.11之前,未知。

// 每隔 1 秒统计一次,共统计一次。
[biocloo@app2 ~]$ vmstat 1 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 382140 255512 7938204    0    0    19   103    0    1  6  1 93  0  0
 2  0      0 379664 255520 7940528    0    0     0   113 7891 6022  8  2 91  0  0
 0  0      0 380408 255512 7940004    0    0     0   154 7483 5758  7  2 91  0  0
 0  0      0 383244 255476 7938936    0    0     0  2791 9373 7165  9  2 88  0  0
 0  0      0 384320 255484 7941596    0    0     0   103 9010 6962  9  2 89  0  0

perf:Linux 性能分析

Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。
Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。
Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

[root@centos ~]# perf top
Samples: 625  of event 'cpu-clock', Event count (approx.): 130078096
Overhead  Shared Object                    Symbol
  11.45%  [kernel]                         [k] _raw_spin_unlock_irqrestore
   4.41%  [kernel]                         [k] finish_task_switch
   3.48%  [kernel]                         [k] tick_nohz_idle_enter
   3.24%  [kernel]                         [k] module_get_kallsym
   3.09%  [kernel]                         [k] __memcpy
   3.09%  [kernel]                         [k] kallsyms_expand_symbol.constprop.1
   2.83%  perf                             [.] __symbols__insert
   2.80%  [kernel]                         [k] vsnprintf
   2.67%  [kernel]                         [k] format_decode
   2.32%  perf                             [.] rb_next
   2.26%  [kernel]                         [k] clear_page_c
   1.95%  perf                             [.] rb_insert_color
   1.91%  perf                             [.] __dso__load_kallsyms
   1.79%  libc-2.17.so                     [.] _int_malloc
   1.77%  [kernel]                         [k] number.isra.2
   1.62%  libc-2.17.so                     [.] __strcmp_sse42
   1.32%  [kernel]                         [k] string.isra.7
   1.32%  perf                             [.] 0x00000000000ca264
   1.25%  beam.smp                         [.] sched_spin_wait
   1.23%  [kernel]                         [k] rcu_gp_kthread
   1.18%  [kernel]                         [k] strnlen
   1.18%  perf                             [.] 0x00000000000ca277
   1.08%  [kernel]                         [k] rcu_process_callbacks
   1.03%  libc-2.17.so                     [.] _IO_getdelim
   1.03%  libc-2.17.so                     [.] __memcpy_sse2
   1.03%  perf                             [.] hex2u64
   0.97%  perf                             [.] 0x000000000019bc27
   0.95%  libc-2.17.so                     [.] __libc_calloc
   0.88%  [kernel]                         [k] pointer.isra.19

perf top 是实时的,不能保存数据,perf record采样数据。使用 perf report 查看保存的数据。

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

推荐阅读更多精彩内容