2018-08-30 16:46:18 zxgravity 阅读数 6601
  • Shell脚本编写实战

    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。 课程内容如下: 1.编写Shell脚本注意事项与编写打印字体颜色函数 2.批量创建用户 3.监控主机存活状态 4.监控CPU、内存、硬盘和网卡流量利用率 5.监控网站可用性

    2778 人正在学习 去看看 李振良




htop 简介


htop类似于 top 命令,但可以让你在垂直和水平方向上滚动,所以你可以看到系统上运行的所有进程,以及他们完整的命令行。可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing)。htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台或者X终端中),需要ncurses。与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。与top相比,htop有以下优点:

  • 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
  • 在启动上,比top 更快。
  • 杀进程时不需要输入进程号。
  • htop 支持鼠标操作。
  • top 已经很老了。

htop 官网:http://htop.sourceforge.net/




htop 参数


可以使用命令:apt-get install htop 来安装 htop,安装完成之后,键入 htop 命令,打开htop。




可以看到总共分四个区域:

  • 第一区域:CPU、内存、Swap的使用情况;
  • 第二区域:任务、线程、平均负载及系统运行时间的信息。平均负载部分提供了三个数字,这仅仅表示的是过去的5分钟、10分钟和15分钟系统的平均负载而已,在单核的系统中平均负载为1表示的是百分之百的 CPU 利用率。最后,运行时间 (uptime)标示的数字是从系统启动起到当前的运行总时间。
  • 第三区域:当前系统中的所有进程。各列说明:
    PID:进程标志号,是非零正整数
    USER:进程所有者的用户名
    PR:进程的优先级别
    NI:进程的优先级别数值
    VIRT:进程占用的虚拟内存值
    RES:进程占用的物理内存值
    SHR:进程使用的共享内存值
    S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
    %CPU:该进程占用的CPU使用率
    %MEM:该进程占用的物理内存和总内存的百分比
    TIME+:该进程启动后占用的总的CPU时间
    COMMAND:进程启动的启动命令名称
  • 第四区域:当前界面中F1-F10功能键中定义的快捷功能。即 底部菜单栏。

交互命令用上档键shift。常用命令,shift+m 按照内存大小排序。shift+h 收缩线程。q 退出
下面是 F1~F10 的功能和对应的字母快捷键。
Shortcut Key Function Key Description 中文说明
h, ? F1 Invoke htop Help 查看htop使用说明
S F2 Htop Setup Menu htop 设定
/ F3 Search for a Process 搜索进程
\ F4 Incremental process filtering 增量进程过滤器
t F5 Tree View 显示树形结构
<, > F6 Sort by a column 选择排序方式
[ F7 Nice - (change priority) 可减少nice值,这样就可以提高对应进程的优先级
] F8 Nice + (change priority) 可增加nice值,这样就可以降低对应进程的优先级
k F9 Kill a Process 可对进程传递信号
q F10 Quit htop 结束htop
命令行选项(COMMAND-LINE OPTIONS)
-C –no-color        使用一个单色的配色方案(设置界面为无颜色
-d –delay=DELAY     设置延迟更新时间,单位秒(设置刷新时间,单位为秒)
-h –help           显示htop 命令帮助信息
-u –user=USERNAME    只显示一个给定的用户的过程(显示指定用户的进程
-p –pid=PID,PID…       只显示给定的PIDs
-s –sort-key COLUMN     依此列来排序(以指定的列排序
-v –version          显示版本信息
交互式命令(INTERACTIVE COMMANDS)
上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程;
Space    标记/取消标记一个进程。命令可以作用于多个进程,例如 “kill”,将应用于所有已标记的进程
U     取消所有选中的进程
s     选择某一进程,按s:用strace追踪进程的系统调用。(s:显示光标所在进程执行的系统调用;
l      显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
I     倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然
+, -    When in tree view mode, expand or collapse subtree. When a subtree is collapsed a “+” sign shows to the left of the process name.
a (在有多处理器的机器上)    设置 CPU affinity: 标记一个进程允许使用哪些CPU
u    显示特定用户进程
   按照内存使用百分比排序,对应MEM%列;
P     按照CPU使用百分比排序,对应CPU%列;
    按照进程运行的时间排序,对应TIME+列;
F    跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。
K    显示/隐藏内核线程
   显示/隐藏用户线程
#    快速定位光标到PID所指定的进程上。
Ctrl-L    刷新
Numbers    PID 查找: 输入PID,光标将移动到相应的进程上



htop 使用


显示自带帮助:鼠标点击Help或者按F1 显示自带帮助

htop 设定:鼠标点击Setup或者按下F2 之后进入htop 设定的页面。只需使用箭头键选择和更改特定的设置。

Setup 选项下的:
1.Meters
设定顶端的显示信息,分为左右两侧,Left column 表示左侧的显示的信息,Right column表示右侧显示的信息,如果要新加选项,可以选择Available meters添加,F5新增到上方左侧,F6新增到上方右侧。Left column和Right column下面的选项,可以选定信息的显示方式,有LED、Bar(进度条)、Text(文本模式),可以根据个人喜好进行设置
2. Display options
选择要显示的内容,按空格 x表示显示,选择完后,按F10保存
3.Colors
设定界面以什么颜色来显示,个人认为用处不大,各人喜好不同
4.Colums
作用是增加或取消要显示的各项内容,选择后F7(向上移动)、F8(向下移动)、F9(取消显示、F10(保存更改))此处增加了PPID、PGRP,根据各人需求,显示那些信息。


Meters 页面设定了顶端的一些信息显示,顶端的显示又分为左右两侧,到底能显示些什么可以在最右侧那栏新增,要新增到上方左侧(F5)或是右侧(F6)都可以,这就是个人设定的范围了。这里多加了一个时钟。


我们也可以自定义进程区域中的显示内容:


搜索进程:鼠标点击Search 或者按下F3 或者输入”/”, 输入进程名进行搜索,例如搜索ssh

过滤器:按下F4,进入过滤器,相当于关键字搜索,不区分大小写,例如过滤dev。

search和filter的区别:search会将光标定位到符合条件的进程上,通过F3键进行逐个查找;而filter会直接将符合条件的进程筛选出来。search和filter都使用ESC键来取消功能。

显示树形结构:输入”t”或按下F5,显示树形结构,意思跟pstree 差不多,能看到所有程序树状执行的结构,这对于系统管理来说相当方便,理清程序是如何产生的,当然树状结构的浏览也可以依照其他数据来排序。退出树状视图模式,请再一次按下 F5 键。

选择排序方式:按下F6 就可以选择依照什么来排序,最常排序的内容就是cpu 和memory 吧!

F7、F8分别对应nice-和nice+,F7表示减小nice值(增大优先级),F8增大nice值(减小优先级),选择某一进程,按F7或F8来增大或减小nice值,nice值范围为-20-19

F9对应kill给进程发信号,选好信号回车就OK了( F9:杀掉指定进程)。


选择某一进程按F9即可杀死此进程。如你所见,窗口的左边部分列出的是所有可用的信号,右边部分列出的是进程。只要选中信号,并选择一个进程,然后按下 enter 键,选中的信号就会发送到此进程。

F10:退出htop。
空格键:用于标记选中的进程,用于实现对多个进程同时操作;要标注某个进程条目,需要做的就是选中此条目,然后按下‘空格’键。

显示某个用户的进程,在左侧选择用户:输入”u”,在左侧选择用户

Alias top:也许你用惯了top,我们也可以用top来打开htop。

  1. 编辑/root/.bashrc文件,添加如下代码:
  2. if [ -f /usr/local/bin/htop ]; then
  3. alias top=’/usr/local/bin/htop’
  4. fi
  5. source /root/.bashrc

常用的交互命令:
1) space 标记一个进程(类似windows按着Ctrl多选一样)
2) U 取消所有标记;
3) l 显示进程打来的文件;
4) u 显示特定用户;
5) M 按照内存排序;
6) P 按照CPU排序;
7) T 按在线时长排序;
8) ctrl + L 刷新;
9) 直接输入数字,查找对应的PID进程;


命令行选项

除了上面介绍的一些热键,htop 还提供了很有用的命令行选项。下面是其中一部分:
-s 选项 : 按指定的列排序。例如,htop -s PID 命令会按 PID 列的大小排序来显示。
-u 选项 : 显示指定的用户的进程信息列表。例如,htop -u himanshu 命令会只显示出用户名为 himanshu 的相关进程。
-d 选项 : 设置刷新的延迟时间。例如,htop -d 100 命令会使输出在1秒后才会刷新(参数 -d 的单位是10微秒)。






2016-08-02 22:14:19 z1134145881 阅读数 8741
  • Shell脚本编写实战

    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。 课程内容如下: 1.编写Shell脚本注意事项与编写打印字体颜色函数 2.批量创建用户 3.监控主机存活状态 4.监控CPU、内存、硬盘和网卡流量利用率 5.监控网站可用性

    2778 人正在学习 去看看 李振良

本博客主要讲解了日常运维过程中,查看系统状态的一些指令mpstat,vmstat,iostat,sar,top

0、准备知识

1> 衡量CPU性能的指标:

<1> 用户使用CPU

  • CPU运行实时进程
  • CPU运行niced process
  • CPU运行常规用户进程

<2> 系统使用CPU

  • 用于I/O管理:中断和驱动
  • 用于内存管理:页面交换
  • 用于进程管理:进程开始和上下文切换

<3> WIO:用于进程等待磁盘I/O而使CPU处于空闲状态的比率。
<4> CPU的空闲率,除了上面的WIO以外的空闲时间
<5> CPU用于上下文交换的比率
<6> nice
<7> real-time
<8> 运行进程队列的长度
<9> 平均负载

2> Linux常用监控CPU整体性能的工具

<1> mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。
<2> vmstat:只能查看所有CPU的平均信息;查看cpu队列信息;
<3> iostat: 只能查看所有CPU的平均信息。
<4> sar: 与mpstat 一样,不但能查看CPU的平均信息,还能查看指定CPU的信息。
<5> top:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示。

1、mpstat指令

mpstat命令:主要用于多CPU 环境下,它显示各个可用CPU的状态。这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

  • 命令格式:
    mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
  • 选项说明
    [ -A ] 展示所有cpu的状态
    [ -I { SUM | CPU | ALL } ] 分三种情况展示 cpu的状态
    [ -u ]
    [ -P { [,…] | ON | ALL } ] 指定某个cpu,进行展示
    [ -V ] 版本信息
  • 参数说明

  • 实例分析
    [root@kvm ~]# mpstat -u
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时28分09秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时28分09秒 all 0.03 0.00 0.02 0.03 0.00 0.00 0.00 0.00 99.92
    [root@kvm ~]# mpstat -P 0
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时28分47秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时28分47秒 0 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
    [root@kvm ~]#
    [root@kvm ~]# mpstat -P 1
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时28分50秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时28分50秒 1 0.03 0.00 0.02 0.05 0.00 0.00 0.00 0.00 99.90

    [root@kvm ~]# mpstat -A
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时29分11秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时29分11秒 all 0.03 0.00 0.02 0.03 0.00 0.00 0.00 0.00 99.92
    13时29分11秒 0 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
    13时29分11秒 1 0.03 0.00 0.02 0.05 0.00 0.00 0.00 0.00 99.90

    13时29分11秒 CPU intr/s
    13时29分11秒 all 15.60
    13时29分11秒 0 1.06
    13时29分11秒 1 0.18

  • 字段说明

2、vmstat指令

  • 命令格式:
    vmstat [-V] [-n] (选项) [delay [count]](参数)

  • 选项说明

-a:显示活动内页; 
-f:显示启动后创建的进程总数; 
-m:显示slab信息; 
-n:头信息仅显示一次; 
-s:以表格方式显示事件计数器和内存状态; 
-d:报告磁盘状态; 
-p:显示指定的硬盘分区状态; 
-S:输出信息的单位。
  • 参数说明

    **事件间隔delay**:状态信息刷新的时间间隔;
    **次数count**:显示报告的次数。
    
  • 实例分析
    [root@kvm ~]# vmstat -n 3 3 (三秒一次,共三次)
    props ———–memory———- —swap– —–io—- –system– —–cpu—-
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 0 1100728 188996 495396 0 0 0 1 8 7 0 0 100 0 0
    0 0 0 1100720 188996 495396 0 0 0 0 16 14 0 0 100 0 0
    0 0 0 1100720 188996 495396 0 0 0 0 12 11 0 0 100 0 0

    [root@kvm ~]# vmstat -S M 3 2 (以M为单位显示,默认为k)
    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 0 1074 184 483 0 0 0 1 8 7 0 0 100 0 0
    0 0 0 1074 184 483 0 0 0 0 17 13 0 0 100 0 0

    [root@kvm ~]# vmstat -f
    94103 forks

  • 字段说明

    Procs(进程)
    r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
    b: 等待IO的进程数量。

    Memory(内存)
    swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
    free: 空闲物理内存大小。
    buff: 用作缓冲的内存大小。
    cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

    Swap
    si: 每秒从交换区写到内存的大小,由磁盘调入内存。
    so: 每秒写入交换区的内存大小,由内存调入磁盘。

    注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

    IO(现在的Linux版本块的大小为1kb)
    bi: 每秒读取的块数
    bo: 每秒写入的块数
    注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

    system(系统)
    in: 每秒中断数,包括时钟中断。
    cs: 每秒上下文切换数。

    注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

    CPU(以百分比表示)
    us: 用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
    sy: 内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
    wa: IO等待时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
    id: 空闲时间百分比

3、iostat指令

iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析

  • 命令格式:
    iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]

  • 选项说明
    -c:仅显示CPU使用情况;
    -d:仅显示设备利用率;
    -k:显示状态以千字节每秒为单位,而不使用块每秒;
    -m:显示状态以兆字节每秒为单位;
    -p:仅显示块设备和所有被使用的其他分区的状态;
    -t:显示每个报告产生时的时间;
    -x:显示扩展状态。

  • 参数说明
    间隔时间:每次报告的间隔时间(秒);
    次数:显示报告的次数。

  • 实例分析
    命令:iostat -c 1 1
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016/08/02 x86_64 (2 CPU)
    avg-cpu: %user %nice %system %iowait %steal %idle
    0.03 0.00 0.02 0.03 0.00 99.92

命令:iostat -x /dev/sda1
Linux 2.6.32-431.el6.x86_64 (kvm) 08/02/2016 x86_64 (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.90 0.00 0.87 0.02 0.00 98.21

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda10.33 4.67 0.15 1.39 5.65 48.44 35.23 0.00 1.70 0.38 0.06

命令:iostat -d -m 2 2
Linux 2.6.32-431.el6.x86_64 (kvm) 08/02/2016 x86_64 (4 CPU)
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 28.75 0.04 2.17 1738866 96878990

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 3.00 0.00 0.03 0 0
- 字段说明
字段说明

4、sar指令

sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。

  • 命令格式:
    sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
  • 选项说明
    [ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
    [ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
    [ -I { [,…] | SUM | ALL | XALL } ] [ -P { [,…] | ALL } ]
    [ -j { ID | LABEL | PATH | UUID | … } ] [ -n { [,…] | ALL } ]
    [ -o [ ] | -f [ ] ] [ –legacy ]
    [ -i ] [ -s [ ] ] [ -e [ ] ]

    -A:显示所有的报告信息;
    -b:显示I/O速率;
    -B:显示换页状态;
    -c:显示进程创建活动;
    -d:显示每个块设备的状态;
    -e:设置显示报告的结束时间;
    -f:从指定文件提取报告;
    -i:设状态信息刷新的间隔时间;
    -P:报告每个CPU的状态;
    -R:显示内存状态;
    -u:显示CPU利用率;
    -v:显示索引节点,文件和其他内核表的状态;
    -w:显示交换分区状态;
    -x:显示给定进程的状态。

主选项和报告:
-b I/O 和传输速率信息状况
-B 分页状况
-d 块设备状况
-I { <中断> | SUM | ALL | XALL }
中断信息状况
-m 电源管理信息状况
-n { <关键词> [,…] | ALL }
网络统计信息
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)
-q 队列长度和平均负载
-r 内存利用率
-R 内存状况
-S 交换空间利用率
-u [ ALL ]
CPU 利用率
-v Kernel table 状况
-w 任务创建与系统转换统计信息
-W 交换信息
-y TTY 设备状况

  • 参数说明
    间隔时间:每次报告的间隔时间(秒);
    次数:显示报告的次数。

  • 实例分析

    命令:sar -o temp 60 10 //观察系统部件10分钟,并对数据进行排序:

    察看内存和交换空间的使用率:

    命令:sar -r
    09时20分01秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
    09时30分01秒 1098232 919236 45.56 191632 495492 356908 17.69
    09时40分01秒 1097992 919476 45.58 191744 495484 356908 17.69

    命令:sar -u
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016/08/02日 x86_64 (2 CPU)
    00时00分01秒 CPU %user %nice %system %iowait %steal %idle
    00时10分01秒 all 0.03 0.00 0.02 0.04 0.00 99.91
    00时20分01秒 all 0.03 0.00 0.02 0.03 0.00 99.92

  • 字段说明
    kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。

5、top指令

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

  • 命令格式:
    top (选项)

  • 选项说明
    -b:以批处理模式操作;
    -c:显示完整的治命令;
    -d:屏幕刷新间隔时间;
    -I:忽略失效过程;
    -s:保密模式;
    -S:累积模式;
    -i<时间>:设置间隔时间;
    -u<用户名>:指定用户名;
    -p<进程号>:指定进程;
    -n<次数>:循环显示的次数。

  • 参数说明

  • 实例分析

    top - 09:44:56 up 16 days, 21:23, 1 user, load average: 9.59, 4.75, 1.92 Tasks: 145 total, 2 running, 143 sleeping, 0 stopped, 0 zombie Cpu(s): 99.8%us, 0.1%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4147888k total, 2493092k used, 1654796k free, 158188k buffers Swap: 5144568k total, 56k used, 5144512k free, 2013180k cached

  • 字段说明
    top - 09:44:56 [当前系统时间],
    16 days [系统已经运行了16天],
    1 user [个用户当前登录],
    load average: 9.59, 4.75, 1.92 [系统负载,即任务队列的平均长度]
    Tasks: 145 total[总进程数],
    2 running[正在运行的进程数],
    143 sleeping[睡眠的进程数],
    0 stopped[停止的进程数],
    0 zombie[冻结进程数],
    Cpu(s): 99.8%us[用户空间占用CPU百分比],
    0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比], 0.2%id[空闲CPU百分比],
    0.0%wa[等待输入输出的CPU时间百分比],
    0.0%hi[],
    Mem: 4147888k total[物理内存总量],
    2493092k used[使用的物理内存总量],
    1654796k free[空闲内存总量],
    158188k buffers[用作内核缓存的内存量]
    Swap: 5144568k total[交换区总量],
    56k used[使用的交换区总量],
    5144512k free[空闲交换区总量],
    2013180k cached[缓冲的交换区总量],

6、uptime指令

命令:uptime
  20:55:40 up 24 days, 3:06, 1 user, load average: 8.13, 5.90, 4.94
  命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量
  一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对 于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。
  

参考文献

[1]http://www.cnblogs.com/xianghang123/archive/2011/08/25/2153591.html
[2]http://man.linuxde.net/vmstat
[3] http://man.linuxde.net/iostat
[4] http://man.linuxde.net/mpstat
[5]http://man.linuxde.net/sar
[6]http://man.linuxde.net/top
[7]http://blog.csdn.net/szchtx/article/details/38455385

2017-05-31 17:07:00 weixin_33758863 阅读数 116
  • Shell脚本编写实战

    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。 课程内容如下: 1.编写Shell脚本注意事项与编写打印字体颜色函数 2.批量创建用户 3.监控主机存活状态 4.监控CPU、内存、硬盘和网卡流量利用率 5.监控网站可用性

    2778 人正在学习 去看看 李振良

1、htop

 

2、top

内容解释:

  PID:进程的ID
  USER:进程所有者
  PR:进程的优先级别,越小越优先被执行
  NInice:值
  VIRT:进程占用的虚拟内存
  RES:进程占用的物理内存
  SHR:进程使用的共享内存
  S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值为负数
  %CPU:进程占用CPU的使用率
  %MEM:进程使用的物理内存和总内存的百分比
  TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
  COMMAND:进程启动命令名称

 

3、cat /proc/stat

 4、

pmap

可以根据进程查看进程相关信息占用的内存情况,(进程号可以通过ps查看)如下所示:
  $ pmap -d 5647

 

ps

  如下例所示:
  $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid'  其中rsz是是实际内存
  $ ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep oracle |  sort -nrk

  其中rsz为实际内存,上例实现按内存排序,由大到小

在Linux下查看内存我们一般用free命令:
[root@scs-2 tmp]# free
             total       used       free     shared    buffers     cached
Mem:       3266180    3250004      16176          0     110652    2668236
-/+ buffers/cache:     471116    2795064
Swap:      2048276      80160    1968116

下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236

接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
如何看额定值:
cat /proc/meminfo

[root@scs-2 tmp]# cat /proc/meminfo
MemTotal:      3266180 kB
MemFree:         17456 kB
Buffers:        111328 kB
Cached:        2664024 kB
SwapCached:          0 kB
Active:         467236 kB
Inactive:      2644928 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      3266180 kB
LowFree:         17456 kB
SwapTotal:     2048276 kB
SwapFree:      1968116 kB
Dirty:               8 kB
Writeback:           0 kB
Mapped:         345360 kB
Slab:           112344 kB
Committed_AS:   535292 kB
PageTables:       2340 kB
VmallocTotal: 536870911 kB
VmallocUsed:    272696 kB
VmallocChunk: 536598175 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     2048 kB

用free -m查看的结果:
[root@scs-2 tmp]# free -m 
             total       used       free     shared    buffers     cached
Mem:          3189       3173         16          0        107       2605
-/+ buffers/cache:        460       2729
Swap:         2000         78       1921

 

2019-03-07 16:16:24 polarisyj86 阅读数 326
  • Shell脚本编写实战

    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。 课程内容如下: 1.编写Shell脚本注意事项与编写打印字体颜色函数 2.批量创建用户 3.监控主机存活状态 4.监控CPU、内存、硬盘和网卡流量利用率 5.监控网站可用性

    2778 人正在学习 去看看 李振良

转自Martin文章:点击链接

前几天被问到在Linux 命令行下输入top命令之后出现的信息表示什么意思,今天就总结一下。

top命令是Linux下常用的性能分析工具,但本质上它提供了实时的对系统处理器的状态监视

在命令行中输入top将输出一下信息:

top - 23:16:12 up  7:40,  1 user,  load average: 0.97, 0.98, 1.01
Tasks: 440 total,   2 running, 438 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.3 us,  1.4 sy,  0.0 ni, 96.9 id,  0.0 wa,  0.0 hi,  0.4 si,  0.0 st
KiB Mem : 13183891+total, 12378241+free,  3884532 used,  4171956 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 12719112+avail Mem 
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                               
11746 jenkins   20   0  159972   4760   1600 R  99.7  0.0 362:41.65 root/2                                                                                                                
   42 root      20   0       0      0      0 S   4.3  0.0  14:46.50 rcu_sched                                                                                                             
   68 root      20   0       0      0      0 S   2.6  0.0   0:55.10 rcuos/25                                                                                                              
11414 jenkins   20   0 42.134g 1.652g  24516 S   0.7  1.3   2:37.54 java                                                                                                                  
   49 root      20   0       0      0      0 S   0.3  0.0   0:32.35 rcuos/6                                                                                                               
 6818 root      20   0       0      0      0 S   0.3  0.0   0:34.33 kworker/0:1                                                                                                           
14702 root      20   0       0      0      0 S   0.3  0.0   0:00.26 kworker/2:0                                                                                                           
15491 txq       20   0  158044   2616   1552 R   0.3  0.0   0:00.13 top                                                                                                                   
    1 root      20   0   45892   8580   3908 S   0.0  0.0   0:13.06 systemd                                                                                                               
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.06 kthreadd

前五行是当前整个系统资源的统计信息。

第一行是任务队列,包括当前时间,系统运行的总时间,系统用户登陆的数量,以及1分钟,5分钟,15分钟系统的负载情况。

第二行是Tasks信息,显示当前系统总共的进程数为440,运行状态的进程有两个,438个处于休眠状态,0个停止,0个僵尸进程。

第三行是CPU信息,很多人可能会忽略这些信息,我之前就是,所以详细说一下。

%Cpu(s):  1.3 us,  1.4 sy,  0.0 ni, 96.9 id,  0.0 wa,  0.0 hi,  0.4 si,  0.0 st

us user CPU time ----用户空间占用CPU百分比

sy system CPU time----内核空间占用CPU百分比

ni nice CPU time----用户进程空间内改变过优先级的进程占用CPU百分比

id idle----空闲CPU百分比

wa iowait---- 等待输入输出的CPU时间百分比

hi hardware irq----硬件中断

si software irq----软件中断

st steal time----实时

具体对应到第三行的详细信息,大家自己对照一下就行,或者在你命令行中试一下。

第四行Memory的状态信息,总共13183891+内存,空闲12378241+,使用3884532,缓存为4171956

第五行Swap交换分区信息,总共0,空闲0,使用0,缓存交换区总量12719112+

第六行是各个进程监视的项目列

PID    USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+   COMMAND

PID — 进程id

USER — 进程所有者

PR — 进程优先级

NI — nice值。负值表示高优先级,正值表示低优先级

VIRT — 进程使用的虚拟内存总量。VIRT=SWAP+RES

RES — 进程使用的、未被换出的物理内存大小。RES=CODE+DATA

SHR — 共享内存大小

S— 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU — 上次更新到现在的CPU时间占用百分比

%MEM — 进程使用的物理内存百分比

TIME+ — 进程使用的CPU时间总计

COMMAND — 进程名称(命令名/命令行)

对应的每个进程的信息,大家可以自己看一下。

如果你在命令行下再输入1,输出如下:

top - 23:16:12 up  7:40,  1 user,  load average: 0.97, 0.98, 1.01
Tasks: 440 total,   2 running, 438 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu8  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu9  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu10 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu11 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu12 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu13 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu14 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu15 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu16 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu17 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu18 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu19 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu20 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu21 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu22 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu23 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu24 : 44.2 us, 43.9 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi, 12.0 si,  0.0 st
%Cpu25 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu26 :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu27 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu28 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu29 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu30 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu31 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 13183891+total, 12377862+free,  3887628 used,  4172660 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 12718814+avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                               
11746 jenkins   20   0  159972   4760   1600 R 100.0  0.0 393:16.94 root/2                                                                                                                
   42 root      20   0       0      0      0 S   2.7  0.0  15:59.27 rcu_sched                                                                                                             
   67 root      20   0       0      0      0 S   1.3  0.0   1:03.60 rcuos/24

输入1可以查看每个逻辑CPU的情况,如上总共有32个逻辑CPU

其他命令:

输入b,显示高亮,shift+>shift+<可以左右切换

输入x也是显示高亮,但没有b那么明显,同理shift+>shift+<可以左右切换

直接输入top -c,会显示完整命令,输出如下:

top - 23:56:31 up  8:20,  1 user,  load average: 0.95, 0.97, 1.00
Tasks: 439 total,   2 running, 437 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.4 us,  1.5 sy,  0.0 ni, 96.8 id,  0.0 wa,  0.0 hi,  0.4 si,  0.0 st
KiB Mem : 13183891+total, 12377344+free,  3892304 used,  4173168 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 12718340+avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                               
11746 jenkins   20   0  159972   4760   1600 R 100.0  0.0 402:57.42 root/2                                                                                                                
   42 root      20   0       0      0      0 S   3.3  0.0  16:21.24 [rcu_sched]                                                                                                           
   57 root      20   0       0      0      0 S   0.7  0.0   1:03.01 [rcuos/14]                                                                                                            
   63 root      20   0       0      0      0 S   0.3  0.0   0:29.22 [rcuos/20]                                                                                                            
 7933 root      20   0       0      0      0 S   0.3  0.0   0:05.50 [kworker/20:0]                                                                                                        
11414 jenkins   20   0 42.134g 1.661g  24516 S   0.3  1.3   2:47.29 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -j+ 
14702 root      20   0       0      0      0 S   0.3  0.0   0:01.48 [kworker/2:0]                                                                                                         
15098 root      20   0       0      0      0 S   0.3  0.0   0:01.37 [kworker/6:2]                                                                                                         
18465 txq       20   0  158088   2720   1640 R   0.3  0.0   0:00.18 top -c                                                                                                                
    1 root      20   0   45892   8580   3908 S   0.0  0.0   0:13.78 /usr/lib/systemd/systemd --switched-root --system --deserialize 21                                                    
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.06 [kthreadd]                                                                                                            
    3 root      20   0       0      0      0 S   0.0  0.0   0:00.34 [ksoftirqd/0]                                                                                                         
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 [kworker/0:0H]                                                                                                        
    8 root      rt   0       0      0      0 S   0.0  0.0   0:00.35 [migration/0]                                                                                                         
    9 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [rcu_bh]                                                                                                              
   10 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [rcuob/0]                                                                                                             
   11 root      20   0       0      0      0 S   0.0  0.0   0:00.00 [rcuob/1]

输入q是退出,还有其他命令参数,用到的时候再说,今天先统计这几个。

2014-09-28 11:08:03 dehua007 阅读数 233
  • Shell脚本编写实战

    根据实际的案例讲解怎么编写Shell脚本,在什么场景下编写为讲解导向。 课程内容如下: 1.编写Shell脚本注意事项与编写打印字体颜色函数 2.批量创建用户 3.监控主机存活状态 4.监控CPU、内存、硬盘和网卡流量利用率 5.监控网站可用性

    2778 人正在学习 去看看 李振良
衡量CPU性能的指标:

1,用户使用CPU的情况;
CPU运行常规用户进程
CPU运行niced process
CPU运行实时进程

2,系统使用CPU情况;
用于I/O管理:中断和驱动
用于内存管理:页面交换
用户进程管理:进程开始和上下文切换

3,WIO:用于进程等待磁盘I/O而使CPU处于空闲状态的比率。

4,CPU的空闲率,除了上面的WIO以外的空闲时间

5,CPU用于上下文交换的比率

6,nice

7,real-time

8,运行进程队列的长度

9,平均负载

Linux中常用的监控CPU整体性能的工具有:

§ mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。

§ vmstat:只能查看所有CPU的平均信息;查看cpu队列信息;

§ iostat: 只能查看所有CPU的平均信息。

§ sar: 与mpstat 一样,不但能查看CPU的平均信息,还能查看指定CPU的信息。

§ top:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示。

下面一一介绍:

一,vmstat

#vmstat -n 3 (每个3秒刷新一次)
procs-----------memory--------------------swap-- ----io---- --system---- ------cpu--------
r b swpd free buff cache si so bi bo in cs us sy id wa
10 144 186164 105252 2386848 0 0 18 166 83 2 48 21 31 0
20 144 189620 105252 2386848 0 0 0 177 1039 1210 34 10 56 0
00 144 214324 105252 2386848 0 0 0 10 1071 670 32 5 63 0
00 144 202212 105252 2386848 0 0 0 189 1035 558 20 3 77 0
20 144 158772 105252 2386848 0 0 0 203 1065 2832 70 14 15 0

红色内容标示CPU相关的参数

PROC(ESSES)
--r:如果在processes中运行的序列(process r)是连续的大于在系统中的CPU的个数表示系统现在运行比较慢,有多数的进程等待CPU.
如果r的输出数大于系统中可用CPU个数的4倍的话,则系统面临着CPU短缺的问题,或者是CPU的速率过低,系统中有多数的进程在等待CPU,造成系统中进程运行过慢.
SYSTEM
--in:每秒产生的中断次数
--cs:每秒产生的上下文切换次数
上面2个值越大,会看到由内核消耗的CPU时间会越大

CPU
-us:用户进程消耗的CPU时间百分
us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速(比如PHP/PERL)
-sy:内核进程消耗的CPU时间百分比(sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因)
-wa:IO等待消耗的CPU时间百分比
wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
-id:CPU处于空闲状态时间百分比,如果空闲时间(cpu id)持续为0并且系统时间(cpu sy)是用户时间的两倍(cpu us) 系统则面临着CPU资源的短缺.

解决办法:
当发生以上问题的时候请先调整应用程序对CPU的占用情况.使得应用程序能够更有效的使用CPU.同时可以考虑增加更多的CPU. 关于CPU的使用情况还可以结合mpstat, ps aux top prstat –a等等一些相应的命令来综合考虑关于具体的CPU的使用情况,和那些进程在占用大量的CPU时间.一般情况下,应用程序的问题会比较大一些.比如一些SQL语句不合理等等都会造成这样的现象.

二,sar
sar [options] [-A] [-o file] t [n]

在命令行中,n 和t 两个参数组合起来定义采样间隔和次数,t为采样间隔,是必须有
的参数,n为采样次数,是可选的,默认值是1,-o file表示将命令结果以二进制格式
存放在文件中,file 在此处不是关键字,是文件名。options 为命令行选项,sar命令
的选项很多,下面只列出常用选项:

-A:所有报告的总和。
-u:CPU利用率
-v:进程、I节点、文件和锁表状态。
-d:硬盘使用报告。
-r:内存和交换空间的使用统计。
-g:串口I/O的情况。
-b:缓冲区使用情况。
-a:文件读写情况。
-c:系统调用情况。
-q:报告队列长度和系统平均负载
-R:进程的活动情况。
-y:终端设备活动情况。
-w:系统交换活动。
-x { pid | SELF | ALL }:报告指定进程ID的统计信息,SELF关键字是sar进程本身的统计,ALL关键字是所有系统进程的统计。

用sar进行CPU利用率的分析
#sar -u 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
07:40:17 PM CPU %user %nice %system %iowait %steal %idle
07:40:19 PM all 12.44 0.00 6.97 1.74 0.00 78.86
07:40:21 PM all 26.75 0.00 12.50 16.00 0.00 44.75
07:40:23 PM all 16.96 0.00 7.98 0.00 0.00 75.06
07:40:25 PM all 22.50 0.00 7.00 3.25 0.00 67.25
07:40:27 PM all 7.25 0.00 2.75 2.50 0.00 87.50
07:40:29 PM all 20.05 0.00 8.56 2.93 0.00 68.46
07:40:31 PM all 13.97 0.00 6.23 3.49 0.00 76.31
07:40:33 PM all 8.25 0.00 0.75 3.50 0.00 87.50
07:40:35 PM all 13.25 0.00 5.75 4.00 0.00 77.00
07:40:37 PM all 10.03 0.00 0.50 2.51 0.00 86.97
Average: all 15.15 0.00 5.91 3.99 0.00 74.95

在显示内容包括:

  %user:CPU处在用户模式下的时间百分比。
%nice:CPU处在带NICE值的用户模式下的时间百分比。
  %system:CPU处在系统模式下的时间百分比。
  %iowait:CPU等待输入输出完成时间的百分比。
%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。
  %idle:CPU空闲时间百分比。
在所有的显示中,我们应主要注意%iowait和%idle,%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。

用sar进行运行进程队列长度分析:
#sar -q 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
07:58:14 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
07:58:16 PM 0 493 0.64 0.56 0.49
07:58:18 PM 1 491 0.64 0.56 0.49
07:58:20 PM 1 488 0.59 0.55 0.49
07:58:22 PM 0 487 0.59 0.55 0.49
07:58:24 PM 0 485 0.59 0.55 0.49
07:58:26 PM 1 483 0.78 0.59 0.50
07:58:28 PM 0 481 0.78 0.59 0.50
07:58:30 PM 1 480 0.72 0.58 0.50
07:58:32 PM 0 477 0.72 0.58 0.50
07:58:34 PM 0 474 0.72 0.58 0.50
Average: 0 484 0.68 0.57 0.49

runq-sz 准备运行的进程运行队列。
plist-sz 进程队列里的进程和线程的数量
ldavg-1 前一分钟的系统平均负载(load average)
ldavg-5 前五分钟的系统平均负载(load average)
ldavg-15 前15分钟的系统平均负载(load average)

顺便说一下load avarage的含义
load average可以理解为每秒钟CPU等待运行的进程个数.
在Linux系统中,sar -q、uptime、w、top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?
  系统平均负载被定义为在特定时间间隔内运行队列中的平均任务数。如果一个进程满足以下条件则其就会位于运行队列中:
  - 它没有在等待I/O操作的结果
  - 它没有主动进入等待状态(也就是没有调用'wait')
  - 没有被停止(例如:等待终止)
  例如:
# uptime
  20:55:40 up 24 days, 3:06, 1 user, load average: 8.13, 5.90, 4.94
  命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。
  一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对 于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。

三,iostat

#iostat -c 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
avg-cpu: %user %nice %system %iowait %steal %idle
30.10 0.00 4.89 5.63 0.00 59.38
avg-cpu: %user %nice %system %iowait %steal %idle
8.46 0.00 1.74 0.25 0.00 89.55
avg-cpu: %user %nice %system %iowait %steal %idle
22.06 0.00 11.28 1.25 0.00 65.41

四,mpstat
mpstat 是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。下面只介绍 mpstat与CPU相关的参数,mpstat的语法如下:

mpstat [-P {|ALL}] [internal [count]]

参数的含义如下:

参数 解释

-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值

internal 相邻的两次采样的间隔时间

count 采样的次数,count只能和delay一起使用

当没有参数时,mpstat则显示系统启动以后所有信息的平均值。有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。与CPU有关的输出的含义如下:

参数 解释 从/proc/stat获得数据

CPU 处理器ID

user 在internal时间段里,用户态的CPU时间(%) ,不包含 nice值为负 进程 dusr/dtotal*100

nice 在internal时间段里,nice值为负进程的CPU时间(%) dnice/dtotal*100

system 在internal时间段里,核心时间(%) dsystem/dtotal*100

iowait 在internal时间段里,硬盘IO等待时间(%) diowait/dtotal*100

irq 在internal时间段里,软中断时间(%) dirq/dtotal*100

soft 在internal时间段里,软中断时间(%) dsoftirq/dtotal*100

idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间 (%) didle/dtotal*100

intr/s 在internal时间段里,每秒CPU接收的中断的次数 dintr/dtotal*100

CPU总的工作时间=total_cur=user+system+nice+idle+iowait+irq+softirq

total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq

duser=user_cur – user_pre

dtotal=total_cur-total_pre

其中_cur 表示当前值,_pre表示interval时间前的值。上表中的所有值可取到两位小数点。
#mpstat -P ALL 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009

10:07:57 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
10:07:59 PM all 20.75 0.00 10.50 1.50 0.25 0.25 0.00 66.75 1294.50
10:07:59 PM 0 16.00 0.00 9.00 1.50 0.00 0.00 0.00 73.50 1000.50
10:07:59 PM 1 25.76 0.00 12.12 1.52 0.00 0.51 0.00 60.10 294.00

linux 查看CPU使用率

阅读数 4109

没有更多推荐了,返回首页