本文主要记录一下运维过程中经常用到的系统性能分析命令,资料来源于互联网+自我总结。长期更新~~~~

[root@vps /]# iostat

Linux 2.6.32-504.el6.x86_64  2016年07月29日 _x86_64_ (1 CPU)

avg-cpu:  %user   %nice   %system   %iowait  %steal   %idle

       5.93     19.32    1.30    0.99    0.00   72.46

Device:       tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn

sda         24.06   0.16       777.94    1426710    7145275836

dm-0        97.25   0.15       777.94    1413570    7145261680

dm-1        0.00    0.00      0.00       6472      13992

%user:CPU处在用户模式下的时间百分比。

%nice:CPU处在带NICE值的用户模式下的时间百分比。

%system:CPU处在系统模式下的时间百分比。

%iowait:CPU等待输入输出完成时间的百分比。

%steal:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比。

%idle:CPU空闲时间百分比。

  如果%iowait的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示CPU较空闲,如果%idle值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量。%idle值如果持续低于10,那么系统的CPU处理能力相对较低,表明系统中最需要解决的资源是CPU。


[root@zdj ~]# ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 19232 980 ? Ss Jan22 0:01 /sbin/init

root 2 0.0 0.0 0 0 ? S Jan22 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S Jan22 0:00 [migration/0]

root 4 0.0 0.0 0 0 ? S Jan22 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S Jan22 0:00 [migration/0]

root 6 0.0 0.0 0 0 ? S Jan22 0:39 [watchdog/0]

USER 进程的属主;

PID 进程的ID;

PPID 父进程;

%CPU 进程占用的CPU百分比;

%MEM 占用内存的百分比;

NI 进程的NICE值,数值大,表示较少占用CPU时间;

VSZ 該进程使用的虚拟內存量(KB);

RSS 該進程占用的固定內存量(KB)(驻留中页的数量);

TTY 該進程在那個終端上運行(登陸者的終端位置),若與終端無關,則顯示(?)。若為pts/0等,則表示由網絡連接主機進程

WCHAN 當前進程是否正在進行,若為-表示正在進行;

START 該進程被觸發启动时间;

TIME 該进程實際使用CPU運行的时间;

COMMAND 命令的名称和参数;

STAT狀態位常見的狀態字符

D 无法中断的休眠状态(通常 IO 的进程);

R 正在运行可中在队列中可过行的;

S 处于休眠状态;

T 停止或被追踪;

W 进入内存交换 (从内核2.6开始无效);

X 死掉的进程 (基本很少見);

Z 僵尸进程;

< 优先级高的进程

N 优先级较低的进程

L 有些页被锁进内存;

s 进程的领导者(在它之下有子进程);

l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);

+ 位于后台的进程组;


[root@Monitor ~]# vmstat 2 3

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 0  0  21216 1053812 191964 1125940    0    0     0   356    0    5 23  2 73  2  0

 0  0  21216 1053844 191964 1125940    0    0     0    66  150  175  1  1 98  1  0

 0  0  21216 1053688 191964 1125940    0    0     0     0  150  188  1  1 99  0  0

  vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数

1)procs

a.r列表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU个数,就说明CPU资源不足,可以考虑增加CPU;

b.b列表示在等待资源的进程数,比如正在等待I/O或者内存交换等。

2)memory

a.swpd列表示切换到内存交换区的内存数量(以KB为单位)。如果swpd的值不为0或者比较大,而且si、so的值长期为0,那么这种情况一般不用担心,不会影响系统性能;

b.free列表示当前空闲的物理内存数量(以KB为单位);

c.buff列表示buffers cache的内存数量,一般对块设备的读写才需要缓冲;

d.cache列表示page cached的内存数量,一般作文件系统的cached,频繁访问的文件都会被cached。如果cached值较大,就说明cached文件数较多。如果此时IO中的bi比较小,就说明文件系统效率比较好。

3)swap

a.si列表示由磁盘调入内存,也就是内存进入内存交换区的数量;

b.so列表示由内存调入磁盘,也就是内存交换区进入内存的数量

c.一般情况下,si、so的值都为0,如果si、so的值长期不为0,则表示系统内存不足,需要考虑是否增加系统内存。

4)IO

a.bi列表示从块设备读入的数据总量(即读磁盘,单位KB/秒)

b.bo列表示写入到块设备的数据总量(即写磁盘,单位KB/秒)

这里设置的bi+bo参考值为1000,如果超过1000,而且wa值比较大,则表示系统磁盘IO性能瓶颈。

5)system

a.in列表示在某一时间间隔中观察到的每秒设备中断数;

b.cs列表示每秒产生的上下文切换次数。

上面这两个值越大,会看到内核消耗的CPU时间就越多。

6)CPU

a.us列显示了用户进程消耗CPU的时间百分比。us的值比较高时,说明用户进程消耗的CPU时间多,如果长期大于50%,需要考虑优化程序啥的。

b.sy列显示了内核进程消耗CPU的时间百分比。sy的值比较高时,就说明内核消耗的CPU时间多;如果us+sy超过80%,就说明CPU的资源存在不足。

c.id列显示了CPU处在空闲状态的时间百分比;

d.wa列表示IO等待所占的CPU时间百分比。wa值越高,说明IO等待越严重。如果wa值超过20%,说明IO等待严重。

e.st列一般不关注,虚拟机占用的时间百分比。


[root@Monitor ~]# free -m

       total      used       free     shared    buffers     cached

Mem:     3832       2803       1029      1        187       1099

-/+ buffers/cache:     1516       2316

Swap:    3967         20       3947

buffer---》缓冲器---》内存往磁盘写数据的一个临时存放数据的空间

cached---》高速缓存--》当内存从磁盘读数据的时候,经常使用的数据存放在此


[root@station4 boot]# tcpdump -p icmp -i eth0 抓取eth0接口 icmp协议的数据包

[root@station4 boot]# tcpdump -p arp -i eth0 抓取eth0接口 arp协议的数据包

==

[root@station4 boot]# tcpdump -p icmp or -p arp

多个条件通过逻辑运算符连接起来就可以了,逻辑运算符有以下三个:

  “&&” 或”and”

  “||” 或“or”

  “!” 或“not”

  并且可通过()进行复杂的连接运算。

  如tcpdump 'ip && tcp'

  tcpdump 'host 192.168.240.3 &&( tcp port 80 || tcp port 443)'

  抓取ip地址是192.168.240.3 同时端口是80或者443的数据包

参数:

-e 每行的打印输出中将包括数据包的数据链路层头部信息

-n Don’t convert host addresses to names. This can be used to avoid DNS lookups. 不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.

-nn Don’t convert protocol and port numbers etc. to names either.不进行端口协议到名称的转换。

-p (ip arp icmp tcp udp )指定协议 protocol -->网络层和传输层的协议

-i (eth0 eth1) 指定接口 interface

host 不分源和目的主机

port 不分源和目的端口

src host 源ip

dst host 目的ip

dst net 目的网段

src net 源网段

src port 源端口

dst port 目的端口

ether src 源mac地址

ether dst 目的mac地址

练习:

1.捕捉arp广播包在eth0接口上

tcpdump -p arp -i eth0

2.捕捉源ip是192.168.100.200同时协议是icmp的数据包

tcpdump src host 192.168.100.200 and -p icmp

3.捕捉目的端口是22,源ip地址是192.168.100.233的数据包

tcpdump src host 192.168.100.233 and dst port 22

4.捕捉源mac地址是00:0c:29:11:22:33,同时目的ip是192.168.100.200的数据包

tcpdump ether src 00:0c:29:11:22:33 and dst host 192.168.100.200

5.捕捉源ip是192.168.100.200,目的网段是192.168.34.0/24的数据包

tcpdump src host 192.168.100.200 and dst net 192.168.34.0/24

6.使用tcpdump监听主机IP为10.2.8.1,tcp端口为80的数据,写出相应命令

tcpdump host 10.2.8.1 and tcp port 80

7. 捕捉eth0接口上源ip是10.0.2.253 协议是icmp的数据包