经常使用性能分析工具

free

查看内存的好工具:
 >free
total       used       free     shared    buffers     cached
Mem:       1572988    1509260      63728          0      62800     277888
-/+ buffers/cache:    1168572     404416
Swap:      2096472      16628    2079844

Mem:表示物理内存统计
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用状况,这里咱们不去关心。
系统的总物理内存:255268Kb(256M),但系统当前真正可用的内存b并非第一行free 标记的 16936Kb,它仅表明未被分配的内存。算法

第1行 Mem: total:表示物理内存总量。
used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。
free:未被分配的内存。
shared:共享内存,通常系统不会用到,这里也不讨论(swap是个什么东东??)。浏览器

buffers:系统分配但未被使用的buffers 数量。
cached:系统分配但未被使用的cache 数量(buffers与cached啥区别?), total = used + free 第2行 -/+ buffers/cached: used:也就是第一行中的used - buffers-cached 也是实际使用的内存总量。
free:未被使用的buffers 与cache 和未被分配的内存之和,这就是系统当前实际可用内存。 free 2= buffers1 + cached1 + free1 //free2为第二行、buffers1等为第一行缓存

 

语  法: free [-bkmotV][-s <间隔秒数>]

补充说明:free指令会显示内存的使用状况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。服务器

参  数:
-b  以Byte为单位显示内存使用状况。
-k  以KB为单位显示内存使用状况。
-m  以MB为单位显示内存使用状况。
-o  不显示缓冲区调节列。
-s<间隔秒数>  持续观察内存使用情况。
-t  显示内存总和列。
-V  显示版本信息。babel

 

 

top

执行一下top命令:
[forum@db-testing-forum21.vm.baidu.com ~]$ top

top - 16:24:30 up 36 days, 19:25,  2 users,  load average: 0.16, 0.19, 0.12
Tasks: 398 total,   2 running, 396 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.4% us,  2.6% sy,  0.0% ni, 95.9% id,  0.1% wa,  0.0% hi,  0.1% si
Mem:  15360000k total, 15276776k used,    83224k free,    90048k buffers
swap是个什么东东?:  1048568k total,     5928k used,  1042640k free,  7019480k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                         
 1332 root      16   0  314m 4436 3044 S  2.3  0.0 471:24.96 noah-agent64                                                    
    1 root      16   0  4752  480  448 S  0.0  0.0   0:00.29 init                                                            
    2 root      RT   0     0    0    0 S  0.0  0.0   0:15.68 migration/0                                                     
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.77 ksoftirqd/0                                                     
    4 root       5 -10     0    0    0 S  0.0  0.0   0:00.14 events/0                                                        
    5 root       5 -10     0    0    0 S  0.0  0.0   0:13.36 khelper                                                         
    6 root       5 -10     0    0    0 S  0.0  0.0   0:00.31 kthread                                                         
    7 root       8 -10     0    0    0 S  0.0  0.0   0:00.00 xenwatch                                                        
    8 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 xenbus                                                          
   16 root      RT -10     0    0    0 S  0.0  0.0   0:14.68 migration/1                                                     
   17 root      34  19     0    0    0 S  0.0  0.0   0:00.69 ksoftirqd/1                                                     
   18 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/1                                                        
   20 root      RT -10     0    0    0 S  0.0  0.0   0:07.20 migration/2                                                     
   21 root      34  19     0    0    0 S  0.0  0.0   0:00.31 ksoftirqd/2                                                     
   22 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/2                                                        
   24 root      RT -10     0    0    0 S  0.0  0.0   0:04.17 migration/3                                                     
   25 root      34  19     0    0    0 S  0.0  0.0   0:00.29 ksoftirqd/3                                                     
   26 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 events/3                                                        
   28 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 kblockd/0                                                       
   29 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 kblockd/1                                                       
   30 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 kblockd/2                                                       
   31 root       5 -10     0    0    0 S  0.0  0.0   0:00.00 kblockd/3   

统计信息内容解释:网络

第一行是任务队列信息,同 uptime 命令的执行结果。app

第二行为进程信息。
  total 进程总数
  running 正在运行的进程数
  sleeping 睡眠的进程数
  stopped 中止的进程数
  zombie 僵尸进程数socket

第三行为CPU信息。
    us 用户空间占用CPU百分比
  sy 内核空间占用CPU百分比
  ni 用户进程空间内改变过优先级的进程占用CPU百分比
  id 空闲CPU百分比
  wa 等待输入输出的CPU时间百分比
  hi 硬件中断
  si 软件中断工具

最后两行为内存信息。oop

Mem:total 物理内存总量
  used 使用的物理内存总量
  free 空闲内存总量
  buffers 用做内核缓存的内存量

swap是个什么东东?:total 交换区总量
  used 使用的交换区总量
  free 空闲交换区总量
  cached 缓冲的交换区总量

进程信息区

    默认状况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。

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 命令名/命令行

vmstat

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写, 是实时系统监控工具。该命令经过使用knlist子程序和/dev/kmen伪设备驱动器访问这些数据,输出信息直接打印在屏幕。vmstat反馈的与CPU相关的信息包括:

    1.多少任务在运行

    2.CPU使用的状况

    3.CPU收到多少中断

    4.发生多少上下文切换

vmstat的语法以下: vmstat [delay [count]]

参数 解释

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

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

当没有参数时,vmstat则显示系统启动之后全部信息的平均值。有delay时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个delay时间段的平均信息。当系统有多个CPU时,输出为全部CPU的平均值。

参数 解释

任务的信息(procs)

  

vmstat是一个很全面的性能分析工具,能够观察到系统的进程状态、内存使用、虚拟内存使用、磁盘的IO、中断、上下问切换、CPU使用等。
Procs
r:
运行的和等待(CPU时间片)运行的进程数, 这个值也能够判断是否须要增长CPU(长期大于1)
b:
处于不可中断状态的进程数,常见的状况是由IO引发的
Memory
swpd:切换到交换内存上的内存(默认以KB为单位)
若是 swpd 的值不为0,或者还比较大,好比超过100M了, 可是 si, so 的值长期为 0,这种状况咱们能够不用担忧,不会影响系统性能
free: 空闲的物理内存
buff: 做为buffer cache的内存,对块设备的读写进行缓冲
cache: 做为page cache的内存, 文件系统的cache
若是 cache 的值大的时候,说明cache住的文件数多,若是频繁访问到的文件都能被cache住,那么磁盘的读IO bi 会很是小
Swap
si: 交换内存使用,由磁盘调入内存 
so: 交换内存使用,由内存调入磁盘
内存够用的时候,这2个值都是0,若是这2个值长期大于0时,系统性能会受到影响。磁盘IO和CPU资源都会被消耗。
咱们的测试中,不少状况下,swap都是不打开的。
Io
bi: 从块设备读入的数据总量(读磁盘) (KB/s)
bo: 写入到块设备的数据总理(写磁盘) (KB/s)
随机磁盘读写的时候,这2个 值越大(如超出1M),能看到CPU在IO等待的值也会越大
System
in: 每秒产生的中断次数
cs: 每秒产生的上下文切换次数
上面这2个值越大,会看到由内核消耗的CPU时间会越多
Cpu
us: 用户进程消耗的CPU时间百分比
us 的值比较高时,说明用户进程消耗的CPU时间多,可是若是长期超过50% 的使用,那么咱们就该考虑优化程序算法或者进行加速了(好比 PHP/Perl)
sy: 内核进程消耗的CPU时间百分比
sy 的值高时,说明系统内核消耗的CPU资源多,这并非良性的表现,咱们应该检查缘由。
wa: IO等待消耗的CPU时间百分比
wa 的值高时,说明IO等待比较严重,这多是因为磁盘大量做随机访问形成,也有多是磁盘的带宽出现瓶颈(块操做)。
id: CPU处在空闲状态时间百分比
关注点:
Procs r: 运行的进程比较多,系统很繁忙
Io bo: 磁盘写的数据量稍大,若是是大文件的写,10M之内基本不用担忧,若是是小文件写2M之内基本正常
Cpu us: 持续大于50,服务高峰期能够接受
Cpu wa: 稍微有些高
Cpu id:持续小于50,服务高峰期能够接受

范例1:average mode (粗略信息)

当vmstat不带参数时,对应的输出值是从系统启动以来的平均值,而r和b则对应的是完成这一命令时,系统的值。从下面例子,能够看出系统基本出去闲置状态(idle)。自启动以来,CPU在用户态消耗时间为5%,在核心态消耗为本1%,剩下的为闲置时间。须要指出的是:这里的用户态时间包括nice值为负的进程的时间。


[forum@db-testing-forum21.vm.baidu.com ~]$ vmstat           
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0   5928  82880  90000 7020048    0    0     9    65    1     3  1  3 96  0



范例2:average mode (详细信息)

命令格式: vmstat –s

这里只讨论与CPU相关信息。“CPU ticks”表示自系统启动CPU运行时间,这里以tick为时间单位。用tick来表示us,sy id 和wa的时间;forks指自从系统启动以来,所建立的新任务的个数。这些信息从/proc/stat 的第一行和”processes”行得到。


[forum@db-testing-forum21.vm.baidu.com ~]$ vmstat  -s
     15360000  total memory
     15294800  used memory
      9521016  active memory
      4677844  inactive memory
        65200  free memory
        90004  buffer memory
      7022644  swap cache
      1048568  total swap
         5928  used swap
      1042640  free swap
     14118647 non-nice user cpu ticks
            0 nice user cpu ticks
     35108581 system cpu ticks
   1220978223 idle cpu ticks
      1013122 IO-wait cpu ticks
        43266 IRQ cpu ticks
       258623 softirq cpu ticks
    108845654 pages paged in
    830650744 pages paged out
        82586 pages swapped in
       324491 pages swapped out
   4139134525 interrupts
   3349850760 CPU context switches
   1294232348 boot time
     47035870 forks

 

结果解释

non-nice user cpu ticks 自系统启动以来,CPU在用户态下运行非nice进程的时间,单位为jiffies user

nice user cpu ticks 自系统启动以来,CPU在用户态下运行nice进程的时间,单位为jiffies nice

system cpu ticks 自系统启动以来,CPU处于系统状态的时间,单位为jiffies sys

idle cpu ticks 自系统启动以来,CPU处于闲置状态的时间,单位为jiffies idle

IO-wait cpu ticks 自系统启动以来,CPU处理IO中断的时间,单位为jiffies iowait

IRQ cpu ticks 自系统启动以来,CPU处理硬中断的时间,单位为jiffies irq

softing cpu ticks 自系统启动以来,CPU处理软中断的时间,单位为jiffies Softirq

interrupts 自系统启动以来,发生的全部的中断的次数目 Intr

CPU context switches 自系统启动以来,发生的上下文交换的次数 Ctxt

boot time 自系统启动以来到如今运行的时间,单位为秒。 btime

forks 自系统启动以来所建立的任务的个数目。 Process

 

范例3:按期采样(delay [count])

按期采样数据是指每隔delay时间,采样一次。当count 为0时,vmstat 将不停地按期报告信息;不然当报告count次后,vmstat 命令中止运行。

第一行的信息如同范例1,是自系统启动以来的平均信息。从第二行开始,每行的意思是:r和b采样那一时刻系统运行队列和等待队列的状况;而usystem参数(in,cs)以及CPU参数(us,sy,id,wa)对应的输出值是系统在前一个delay的状况。

从下面例子能够看出上下文交换的次数小于中断的发生次数。当系统大部分时间是空闲而且中断大部分是时间中断时,这种现象很可能发生。当时间中断发生时, 由于调度器没有什么任务可调度,因此不多发生上下文切换。


procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0   5928  88984  90012 7015356    0    0     9    65    1     0  1  3 96  0
 0  0   5928  88664  90012 7015356    0    0     0     0 3626 34251  1  2 97  0
27  0   5928  89048  90012 7015356    0    0     0     0 2657 34285  1  1 97  0
 0  0   5928  88664  90012 7015356    0    0     0     0 3719 34431  2  3 95  0
31  0   5928  88984  90012 7015356    0    0     0     0 4648 34920  1  2 96  0

uptime

uptime是Linux系统经常使用的命令,用来报告系统已经运行多长时间,依此显示的信息:如今时间,系统已经运行了的时间,目前有多少登录用户, 1分钟系统平均负载,5分钟系统平均负载,15分钟系统平均负载。该命令从/proc/loadavg 中得到load average的信息。

范例1:系统只用一个CPU


[forum@db-testing-forum69.db01.baidu.com ~]$ uptime           
 15:38:37 up 93 days, 23:55, 35 users,  load average: 0.22, 0.13, 0.10

若是是单CPU的系统来讲,平均负载可能会高些。一般来讲:若是系统有n个CPU并且平均负载小于n,则说明某些CPU还有空闲的时间片。经过该命令,你能知道CPU是否繁忙,可是没法知道为何忙。

ps

ps

nestat

使用netstat检查网络状态

  使用netstat命令能够监控TCP/IP网络配置和工做情况。它能够显示内核路由表、 活动的网络状态以及每一个网络接口的有用的统计数字。欲得详情请阅man page。

  -a 显示全部Internet链接的有关信息,包括那些正在监听的信息

  -i 显示全部网络设备的统计数字

  -c 不断显示网络的更新状态。这个参数使用netstat每秒一次的输出网络状态列表,直到该程序被中断

  -n 以数字/原始形式显示远程地址、本地地址和端口信息,而不是解析主机名和服务器

  -o 显示计数器的终止时间和每一个网络链接的回退(back off)状况

  -r 显示内核路由表

  -t 只显示TCP socket信息,包括正在监听的信息

  -u 只显示UDP socket信息

  -v
 显示netstat版本信息

  -w 显示原始(raw)socket信息

  -x 显示UNIX域socket信息
 

ifconfig

命令位置:

/sbin/ifconfig
 
ifconfig 是一个用来查看、配置、启用或禁用网络接口的工具,这个工具极为经常使用的。能够用这个工具来临时性的配置网卡的IP地址、掩码、广播地址、网关等。也能够把 它写入一个文件中(好比/etc/rc.d/rc.local),这样系统引导后,会读取这个文件,为网卡设置IP地址
1 ifconfig 查看网络接口状态;

ifconfig 若是不接任何参数,就会输出当前网络接口的状况;

[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:C0:9F:94:78:0E
          inet addr:192.168.1.88  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::2c0:9fff:fe94:780e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:850 errors:0 dropped:0 overruns:0 frame:0
          TX packets:628 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:369135 (360.4  KiB)  TX bytes:75945 (74.1  KiB)
          Interrupt:10 Base address:0x3000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:57 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8121 (7.9  KiB)  TX bytes:8121 (7.9  KiB)

解说:
eth0 表示第一块网卡, 其中 HWaddr 表示网卡的物理地址,能够看到目前这个网卡的物理地址(MAC地址)是 00:C0:9F:94:78:0E ; inet addr 用来表示网卡的IP地址,此网卡的 IP地址是 192.168.1.88,广播地址, Bcast:192.168.1.255,掩码地址Mask:255.255.255.0

lo 是表示主机的回坏地址,这个通常是用来测试一个网络程序,但又不想让局域网或外网的用户可以查看,只能在此台主机上运行和查看所用的网络接口。好比把 HTTPD服务器的指定到回坏地址,在浏览器输入 127.0.0.1 就能看到你所架WEB网站了。但只是您能看获得,局域网的其它主机或用户无从知道;

若是想知道主机全部网络接口的状况,请用下面的命令;
[root@localhost ~]# ifconfig -a

若是想查看某个端口,好比查看eth0 的状态,就能够用下面的方法;
[root@localhost ~]# ifconfig eth0


2 ifconfig 配置网络接口;

ifconfig 能够用来配置网络接口的IP地址、掩码、网关、物理地址等;值得一说的是用ifconfig 为网卡指定IP地址,这只是用来调试网络用的,并不会更改系统关于网卡的配置文件。若是您想把网络接口的IP地址固定下来,目前有三个方法:一是经过各个 发行和版本专用的工具来修改IP地址;二是直接修改网络接口的配置文件;三是修改特定的文件,加入ifconfig 指令来指定网卡的IP地址,好比在redhat或Fedora中,把ifconfig 的语名写入/etc/rc.d/rc.local文件中;

ifconfig 配置网络端口的方法:

ifconfig 工具配置网络接口的方法是经过指令的参数来达到目的的,咱们只说最经常使用的参数;
ifconfig 网络端口 IP地址 hw <HW> MAC地址 netmask 掩码地址 broadcast 广播地址 [up/down]

* 实例一:
好比咱们用ifconfig 来调试 eth0网卡的地址
[root@localhost ~]# ifconfig eth0 down
[root@localhost ~]# ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 up
[root@localhost ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:11:00:00:11:11
          inet addr:192.168.1.99 Bcast:192.168.1.255 Mask:255.255.255.0
          UP BROADCAST MULTICAST MTU:1500 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
          Interrupt:11 Base address:0x3400

注解: 上面的例子咱们解说一下;

第一行:ifconfig eth0 down 表示若是eth0是激活的,就把它DOWN掉。此命令等同于 ifdown eth0;
第二行:用ifconfig 来配置 eth0的IP地址、广播地址和网络掩码;
第三行:用ifconfig eth0 up 来激活eth0 ; 此命令等同于 ifup eth0
第四行:用 ifconfig eth0 来查看 eth0的状态;

固然您也能够用直接在指令IP地址、网络掩码、广播地址的同时,激活网卡;要加up参数;好比下面的例子;
[root@localhost ~]# ifconfig eth0 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0 up

* 实例二:在这个例子中,咱们要学会设置网络IP地址的同时,学会设置网卡的物理地址(MAC地址);

好比咱们设置网卡eth1的IP地址、网络掩码、广播地址,物理地址而且激活它;
[root@localhost ~]# ifconfig eth1 192.168.1.252 hw ether 00:11:00:00:11:11 netmask 255.255.255.0 broadcast 192.168.1.255 up

[root@localhost ~]# ifconfig eth1 hw ether 00:11:00:00:11:22
[root@localhost ~]# ifconfig eth1 192.168.1.252 netmask 255.255.255.0 broadcast 192.168.1.255 up

其中 hw 后面所接的是网络接口类型, ether表示乙太网, 同时也支持 ax25 、ARCnet、netrom等,详情请查看 man ifconfig ;


3.3 如何用ifconfig 来配置虚拟网络接口;

有时咱们为了知足不一样的须要还须要配置虚拟网络接口,好比咱们用不一样的IP地址来架运行多个HTTPD服务器,就要用到虚拟地址;这样就省却了同一个IP地址,若是开设两个的HTTPD服务器时,要指定端口号。

虚拟网络接口指的是为一个网络接口指定多个IP地址,虚拟接口是这样的 eth0:0 、 eth0:一、eth0:2 ... .. eth1N。固然您为eth1 指定多个IP地址,也就是 eth1:0、eth1:一、eth1:2 ... ...以此类推;

其实用ifconfig 为一个网卡配置多个IP地址,就用前面咱们所说的ifconfig的用法,这个比较简单;看下面的例子;
[root@localhost ~]# ifconfig eth1:0 192.168.1.251 hw ether 00:11:00:00:11:33 netmask 255.255.255.0 broadcast 192.168.1.255 up

[root@localhost ~]# ifconfig eth1 hw ether 00:11:00:00:11:33
[root@localhost ~]# ifconfig eth1 192.168.1.251 netmask 255.255.255.0 broadcast 192.168.1.255 up

注意:指定时,要为每一个虚拟网卡指定不一样的物理地址;

在 Redhat/Fedora 或与Redhat/Fedora相似的系统,您能够把配置网络IP地址、广播地址、掩码地址、物理地址以及激活网络接口同时放在一个句子中,写入/etc/rc.d/rc.local中。好比下面的例子;
ifconfig eth1:0 192.168.1.250 hw ether 00:11:00:00:11:44 netmask 255.255.255.0 broadcast 192.168.1.255 up
ifconfig eth1:1 192.168.1.249 hw ether 00:11:00:00:11:55 netmask 255.255.255.0 broadcast 192.168.1.255 up

解说:上面是为eth1的网络接口,设置了两个虚拟接口;每一个接口都有本身的物理地址、IP地址... ...


3.4 如何用ifconfig 来激活和终止网络接口的链接;

激活和终止网络接口的用 ifconfig 命令,后面接网络接口,而后加上 down或up参数,就能够禁止或激活相应的网络接口了。固然也能够用专用工具ifup和ifdown 工具;
[root@localhost ~]# ifconfig eth0 down
[root@localhost ~]# ifconfig eth0 up
[root@localhost ~]# ifup eth0
[root@localhost ~]# ifdown eth0
 

ifconfig

命令位置:

/sbin/ifconfig
 
 

ifconfig

命令位置:

/sbin/ifconfig
相关文章
相关标签/搜索