码迷,mamicode.com
首页 > Web开发 > 详细

三十、监控IO性能、free命令、ps命令、netstat查看网络状态、Linux下抓包

时间:2018-03-21 11:31:24      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:io监控   free命令   ps命令   netstat命令   抓包   

三十、监控IO性能、free命令、ps命令、netstat查看网络状态、Linux下抓包

一、监控IO性能

CPU、内存有剩余,但是系统负载还是很高,用vmstat查看发现b列或者wa列比较大,就说明磁盘有问题,那么就要更详细的查看磁盘。

iostat命令:在安装sysstat包时就会安装此命令。

用法:可以直接输入查看,也可以加数字1,类似vmstat。

# iostat

Linux 3.10.0-693.el7.x86_64 (yaowei-01) 2018年03月21日 _x86_64_ (2 CPU)

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

0.13    0.00    0.39    0.63    0.00   98.85

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn

sda                 2.75        90.60          4.51          125916       6262

sdb                 0.18         2.58           0.00           3580             0

scd0               0.01         0.74           0.00           1028             0

dm-0               0.03         0.75           0.00           1036             0

# iostat -x(主要关注%util)

Linux 3.10.0-693.el7.x86_64 (yaowei-01) 2018年03月21日 _x86_64_ (2 CPU)

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

0.12    0.00    0.35    0.55    0.00   98.98

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util(io等待)就比如读写数据都要等待,所占的时间百分比。这列很大,那读和写的两列就也会很大,若读和写两列不大,只有这列大,就说明硬盘可能有故障。

sda               0.01     0.02    2.11    0.32    79.69     3.99    69.07     0.04   14.68   16.69    1.27   5.74   1.39

sdb               0.00     0.00    0.16    0.00     2.27     0.00    28.99     0.00    6.74    6.74    0.00   5.08   0.08

scd0              0.00     0.00    0.01    0.00     0.65     0.00   114.22     0.00    8.00    8.00    0.00   7.11   0.01

dm-0              0.00     0.00    0.03    0.00     0.66     0.00    48.19     0.00   17.91   17.91    0.00  17.44   0.05

当磁盘io很忙很频繁,可以用iotop查看具体哪个进程在读写。

没有该命令就安装,yum install -y iotop。该命令类似top命令。

Total DISK READ : 0.00 B/s | Total DISK WRITE :       0.00 B/s

Actual DISK READ: 0.00 B/s | Actual DISK WRITE:       0.00 B/s

TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND

1556 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.02 % [kworker/1:1]

1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd --switched-root --system --deserialize 21

2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]

3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]

5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]

6 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u256:0]

7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]

8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]

9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_sched]

10 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]

11 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/1]

12 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/1]

13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/1]

15 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/1:0H]

17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kdevtmpfs]

18 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]

19 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khungtaskd]

21 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd]

22 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bioset]

23 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd]

24 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [md]

25 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:1]

31 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kswapd0]

也是动态显示。主要看IO百分比,最高的会排在最上面。

二、free命令

free:查看内存使用情况。

内存的作用:缓解CPU和io的速度差距。

# free

total           used             free          shared  buff/cache   available

Mem:        1867048      138416      1411044        8772      317588      1535652

Swap:       4194300           0           4194300

# free -h

total         used           free        shared   buff/cache   available

Mem:           1.8G        135M         1.3G         8.6M         310M        1.5G

Swap:          4.0G          0B            4.0G

三行:1、说明,2、内存的使用情况,3、交换分区的使用情况。

关注的是第二行。

free -h:使用合适的单位显示。就和df -h一样。

free -m:指定单位为M。

free -g:指定单位为G。

total:内存总大小。total=used+free+buff/cache

used:真正使用的实际内存大小。

free:剩余物理内存大小(没分配,纯剩余)

shared:共享内存大小,不用关注它。

buff/cache:分配给buff和cache的内存总共大小。预分配出来的内存。

buffer:缓冲。CPU(数据)到内存,再到磁盘。

cache:缓存。磁盘到内存,再到CPU(数据)。

区分buffer和cache:数据经过CPU计算,即将写入磁盘,此时用的内存为buffer;CPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这时用的内存就是cache。

available:剩余物理内存。包含free和buffer/cache剩余部分,就是还没有被buffer/cache使用的部分。查看内存剩余时主要关注它。

三、ps命令(重点)

ps:专门显示系统进程的命令。top命令也可查看,但是没ps那么方便。

# ps aux

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

root          1  0.0  0.3 128164  6812 ?        Ss   02:54   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21

root          2  0.0  0.0      0     0 ?        S    02:54   0:00 [kthreadd]

root          3  0.0  0.0      0     0 ?        S    02:54   0:00 [ksoftirqd/0]

root          5  0.0  0.0      0     0 ?        S<   02:54   0:00 [kworker/0:0H]

root          6  0.0  0.0      0     0 ?        S    02:54   0:00 [kworker/u256:0]

root          7  0.0  0.0      0     0 ?        S    02:54   0:00 [migration/0]

ps -elf显示的信息和ps -aux基本一样。

进程参数:

PID:进程ID,这个ID很有用。Linux中,内核管理进程就靠pid来识别和管理某一进程。比如想终止某进程,则用命令“kill进pid”,有时这不能终止进程,需要加-9选项,即“kill -9进程pid”,这样使用严重时会丢数据,尽量别用。

STAT:进程状态。

进程状态:

D:不能中断的进程(通常为IO)

R(run):正在运行的进程。

S(sleep):已经中断的进程。通常大部分是这个状态。

T:已经停止或暂停的进程。比如sleep 10,按Ctrl+z暂停进程,就是这个状态。

W:(内核2.6xx以后不可用),没有足够的内存页分配。

X:已经死掉的进程(好像从不出现)

Z:僵尸进程,即杀不掉的垃圾进程。

<:高优先级进程。

N:低优先级进程。

L:在内存中被锁了内存分页。

s:主进程。

l:多线程进程。

+:在前台运行的进程,比如在当前终端执行ps aux就是前台进程。

小技巧:

连同管道符一起使用,用来查看某个进程或者它的数量。示例:

# ps aux |grep -c sshd

3

# ps aux |grep  sshd

root        910  0.0  0.2 105996  4076 ?        Ss   02:54   0:00 /usr/sbin/sshd -D

root       1593  0.0  0.2 145700  5192 ?        Ss   03:51   0:00 sshd: root@pts/0

root       1738  0.0  0.0 112676   984 pts/0    S+   05:39   0:00 grep --color=auto sshd

查看进程在哪里启动:ls -l /proc/进程pid/

四、netstat查看网络状态

# netstat -lnp |head -n 10

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

tcp        0      0 0.0.0.0:22                                0.0.0.0:*                    LISTEN      910/sshd

tcp        0      0 127.0.0.1:25                            0.0.0.0:*                    LISTEN      1122/master

tcp6       0      0 :::22                                        :::*                             LISTEN      910/sshd

tcp6       0      0 ::1:25                                      :::*                             LISTEN      1122/master

raw6       0      0 :::58                                       :::*                             7            617/NetworkManager

Active UNIX domain sockets (only servers)

Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path

unix  2      [ ACC ]     STREAM     LISTENING     16239    559/VGAuthService    /var/run/vmware/guestServicePipe

# netstat 查看网络状态

# netstat -lnp查看监听端口,LISTEN就是监听。当前系统启动了哪些端口

# netstat -an 查看系统的所有网络连接状况

# netstat -lntp 只看出tcp的,不包括socket

# ss -an 和netstat异曲同工

小技巧:

# netstat -an |awk  '/^tcp/  {++sta[$NF]}  END  {for(key in sta)  print key,"\t",sta[key]}'

LISTEN 4                  

ESTABLISHED 1    建立连接了正在传数据的,需关注,若数字很大,就说明系统很忙,1000以内算正常。

五、Linux下抓包

1. tcpdump工具

# yum install -y tcpdump

回车这个命令后出现密密麻麻的字符串,按Ctrl+C之前一直刷屏,刷屏越快说明网卡上的数据包越多。

#  tcpdump -nn -i ens33

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

06:56:38.608645 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 3128737334:3128737546, ack 2106545077, win 251, length 212

06:56:38.608960 IP 192.168.93.1.60875 > 192.168.93.130.22: Flags [.], ack 212, win 2051, length 0

06:56:38.608961 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 212:408, ack 1, win 251, length 196

06:56:38.609091 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 408:684, ack 1, win 251, length 276

06:56:38.609278 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 684:848, ack 1, win 251, length 164

06:56:38.609387 IP 192.168.93.1.60875 > 192.168.93.130.22: Flags [.], ack 684, win 2049, length 0

06:56:38.609481 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 848:1124, ack 1, win 251, length 276

06:56:38.609552 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 1124:1288, ack 1, win 251, length 164

06:56:38.609630 IP 192.168.93.130.22 > 192.168.93.1.60875: Flags [P.], seq 1288:1452, ack 1, win 251, length 164

只需要关注第3列和第4列,它们显示的信息为哪个IP+端口号在连接哪个IP+端口号。后面的是该数据包的相关信息。

-i:后面跟设备名称,若想抓取其他网卡的数据包,后面则要跟其他网卡的名字。

-nn:作用是让第3列和第4列显示成“IP+端口号”的形式,若不加-nn选项则显示“主机名+服务名称”。

-c:指定抓包数量。

#  tcpdump -nn -i ens33 -c 50

常用案例:

#  tcpdump -nn -i ens33 port 22      //只抓22端口的包

#  tcpdump -nn -i ens33 tcp and not port 22     //抓tcp的包,但是不要22端口的。

#  tcpdump -nn -i ens33 port 22 and port 53   //抓22和53端口的包。

2.wireshark工具

# yum install -y wireshark

要执行的命令是tshark,centos默认没有,要安装。

# tshark -n -t a R http.request -T fields -e "frame.time -e "ip.src" -e "http.host"'-e "http.request" -e "http.request.url"

这条命令适用于web服务器,类似于web访问日志。若服务器没有访问日志,可以临时使用该命令查看当前服务器上的web请求。若机器没有开启web服务,则不会显示任何内容。

# tshark -n -i eth1 -R'mysql.query' -T fields -e "ip.src" -e "mysql.query"

抓取eth1网卡mysql的查询都有哪些,该方法仅适用于mysql端口为3306,若不是3306,使用下面的方法:

# # tshark -i eth1 port 3307 -d tcp.port==3301,mysql -z "proto,colinfo,mysql,query,mysql.query"


三十、监控IO性能、free命令、ps命令、netstat查看网络状态、Linux下抓包

标签:io监控   free命令   ps命令   netstat命令   抓包   

原文地址:http://blog.51cto.com/13576245/2089248

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!