使用w查看系统负载

[root@mingming ~]# w
 05:17:51 up 2 min,  2 users,  load average: 0.04, 0.06, 0.02USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                05:17   31.00s  0.02s  0.02s -bash
root     pts/0    192.168.23.1     05:17    0.00s  0.00s  0.00s w
  • 第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等

  • load average 第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值

  • cat /proc/cpuinfo 查看CPU逻辑个数

vmstat命令

[root@mingming ~]# vmstat 1 
5procs -----------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 871076  12284  66804    0    0    43     2   32   43  0  0 99  1  0
 0  0      0 871068  12284  66804    0    0     0     0   44   59  0  0 100  0  0
 0  0      0 871068  12284  66804    0    0     0     0   39   61  0  0 100  0  0
 0  0      0 871068  12284  66804    0    0     0     0   40   61  0  1 100  0  0
 0  0      0 871068  12284  66804    0    0     0     0   39   63  0  0 100  0  0
  • vmstat 1 5 每1秒显示一次 显示5次

  • 1)procs 显示进程相关信息

r :run表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;

b :block 表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;

  • 2)memory 内存相关信息

swpd :表示切换到交换分区中的内存数量 ;

free :当前空闲的内存数量;

buff :缓冲大小,(即将写入磁盘的);

cache :缓存大小,(从磁盘中读取的);

  • 3)swap 内存交换情况

si :swap in由交换区写入到内存的数据量;

so :swap out由内存写入到交换区的数据量;

  • 4)io 磁盘使用情况

bi :从块设备读取数据的量(读磁盘);

bo: 从块设备写入数据的量(写磁盘);

  • 5)system 显示采集间隔内发生的中断次数

in :表示在某一时间间隔中观测到的每秒设备中断数;

cs :表示每秒产生的上下文切换次数;

  • 6)CPU 显示cpu的使用状态

us :显示了用户下所花费 cpu 时间的百分比;

sy :显示系统花费cpu时间百分比;

id :表示cpu处于空闲状态的时间百分比;

wa :表示I/O等待所占用cpu时间百分比;

st :表示被偷走的cpu所占百分比(一般都为0,不用关注);

以上所介绍的各个参数中,阿铭经常会关注r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。

top命令

[root@localhost ~]# top
top - 16:31:49 up  4:42,  3 users,  load average: 0.02, 0.05, 0.00Tasks:  74 total,   1 running,  73 sleeping,   0 stopped,   0 zombieCpu(s):  1.4%us,  7.8%sy,  0.0%ni, 89.2%id,  1.0%wa,  0.3%hi,  0.3%si,  0.0%stMem:    326616k total,   321172k used,     5444k free,    23664k buffersSwap:  2097144k total,      588k used,  2096556k free,   227416k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND11194 root      20   0 43936  36m 1128 S  3.8 11.3   2:38.95 perl
 5373 root      20   0  2572 1072  860 R  0.6  0.3   0:00.05 top24160 root      20   0 12412 2124 1376 S  0.3  0.7   0:01.12 sshd
    1 root      20   0  2900  800  652 S  0.0  0.2   0:01.52 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
  • 每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面

  • M 内存排序

  • P CPU排序

  • 在 top 状态下,按 “shift + m”, 可以按照内存使用大小排序。按数字 ‘1’ 可以列出各颗cpu的使用状态。

  • top -c 查看进程路径

  • top -bn1 它表示非动态打印系统资源使用情况,可以用在shell脚本中:

sar命令

yum install -y sysstat

  • sar -n DEV 1 10 网卡流量

[root@mingming ~]# sar -n DEV 1 5
Linux 2.6.32-431.el6.i686 (mingming)    2017年07月11日  _i686_  (2 CPU)06时21分48秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s06时21分49秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.0006时21分49秒      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • sar -q 系统负载

  • sar -b 磁盘读写

  • sar -f /var/log/sa/saxx 历史文件

nload 命令 直观动态流量查询

  • yum install -y epel-release

  • yum install -y nload

监控io性能

[root@mingming ~]# iostat -xLinux 2.6.32-431.el6.i686 (mingming)    2017年07月12日  _i686_  (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle           1.37    0.00    2.49    6.50    0.00   89.64Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
scd0              0.00     0.00    0.38    0.00     3.07     0.00     8.00     0.00    1.04    1.04    0.00   1.04   0.04sda              20.93     2.32   35.66    1.73  1406.03    32.38    38.48     0.20    5.40    5.34    6.62   3.54  13.24
  • 主要看%util百分比:为等待读或写去磁盘的百分比 ##iotop

  • yum install -y iotop

  • iotop 进程使用io排序

free命令

  • 查看内存使用

  • 只需要敲一个 free 然后回车就可以当前系统的总内存大小以及使用内存的情况。从上例中可看到当前系统内存总大小为326616(单位是k)已经使用137332, 剩余189284. 其实真正剩余并不是这个189284, 而是第二行的297100, 真正使用的也是第二行的29516, 这是因为系统初始化时,就已经分配出很大一部分内存给缓存,这部分缓存用来随时提供给程序使用,如果程序不用,那这部分内存就空闲。所以,查看内存使用多少,剩余多少请看第二行的数据。另外我们还可以加-m 或者-g选项分别以M或G为单位打印内存使用状况:

[root@mingming ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1006        439        566          0         19        338-/+ buffers/cache:         82        924Swap:         2047          0       2047

. ps 查看系统进程

[root@mingming ~]# ps auxUSER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1   2900  1420 ?        Ss   04:21   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S    04:21   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    04:21   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S    04:21   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S    04:21   0:00 [migration/0]
root         6  0.0  0.0      0     0 ?        S    04:21   0:00 [watchdog/0]
root         7  0.0  0.0      0     0 ?        S    04:21   0:00 [migration/1]
root         8  0.0  0.0      0     0 ?        S    04:21   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    04:21   0:00 [ksoftirqd/1]
root        10  0.0  0.0      0     0 ?        S    04:21   0:00 [watchdog/1]
  • 阿铭也经常看到有的人喜欢用 ps -elf 大同小异,显示的信息基本上是一样的。ps命令还有更多的用法,阿铭不再做介绍,因为你只要会用这个命令就足够了,请man一下。下面介绍几个参数的意义。

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid

STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

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

R 正在运行中的进程

S 已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T 已经停止或者暂停的进程,如果我们正在运行一个命令,比如说 sleep 10 如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X 已经死掉的进程(这个好像从来不会出现)

Z 僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

< 高优先级进程

N 低优先级进程

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

s 主进程

l 多线程进程

  • 代表在前台运行的进程

这个ps命令是阿铭在工作中用的非常多的命令之一,所以请记住它吧。关于ps命令的使用,阿铭经常会连同管道符一起使用,用来查看某个进程或者它的数量。

查看网络状态

  • netstat 查看网络状态

[root@mingming ~]# netstatActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address               Foreign Address             Statetcp        0     64 192.168.23.128:ssh          192.168.23.1:60874          ESTABLISHEDActive UNIX domain sockets (w/o servers)Proto RefCnt Flags       Type       State         I-Node Pathunix  2      [ ]         DGRAM                    7182   @/org/kernel/udev/udevdunix  2      [ ]         DGRAM                    9277   @/org/freedesktop/hal/udev_eventunix  2      [ ]         DGRAM                    8852   /var/run/portreserve/socket
  • netstat -lnp 查看监听端口

[root@mingming ~]# netstat -lnp
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:5666                0.0.0.0:*                   LISTEN      1128/nrpe
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      979/rpcbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1107/sshd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1208/master
tcp        0      0 0.0.0.0:45625               0.0.0.0:*                   LISTEN      997/rpc.statd
tcp        0      0 :::5666                     :::*                        LISTEN      1128/nrpe
tcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTEN      1121/java
tcp        0      0 :::8009                     :::*                        LISTEN      1121/java
tcp        0      0 :::111                      :::*                        LISTEN      979/rpcbind
tcp        0      0 :::80                       :::*                        LISTEN      1121/java
tcp        0      0 :::22                       :::*                        LISTEN      1107/sshd
tcp        0      0 :::48152                    :::*                        LISTEN      997/rpc.statd
tcp        0      0 ::1:25                      :::*                        LISTEN      1208/master
udp        0      0 0.0.0.0:730                 0.0.0.0:*                               979/rpcbind
udp        0      0 0.0.0.0:45805               0.0.0.0:*                               997/rpc.statd
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               979/rpcbind
udp        0      0 127.0.0.1:755               0.0.0.0:*                               997/rpc.statd
udp        0      0 :::57296                    :::*                                    997/rpc.statd
  • netstat -an 查看系统的网络链接状况

[root@mingming ~]# netstat -anActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address               Foreign Address             Statetcp        0      0 0.0.0.0:5666                0.0.0.0:*                   LISTENtcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTENtcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTENtcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTENtcp        0      0 0.0.0.0:45625               0.0.0.0:*                   LISTENtcp        0      0 192.168.23.128:22           192.168.23.1:60874          ESTABLISHEDtcp        0      0 :::5666                     :::*                        LISTENtcp        0      0 ::ffff:127.0.0.1:8005       :::*                        LISTENtcp        0      0 :::8009                     :::*                        LISTENtcp        0      0 :::111                      :::*                        LISTENtcp        0      0 :::80                       :::*                        LISTENtcp        0      0 :::22                       :::*                        LISTENtcp        0      0 :::48152                    :::*                        LISTENtcp        0      0 ::1:25                      :::*                        LISTEN
  • netstst -lntp 只看tcp的 不包含socket

  • ss -an 和netstst 异曲同工

  • 分享一个小技巧(查看每个状态的个数)

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

Linux下抓包

  • 有时候,也许你会有这样的需求,想看一下某个网卡上都有哪些数据包,尤其是当你初步判定你的服务器上有流量攻击。这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击你了。

  • yum install -y tcpdump 命令去安装一下

  • tcpdump -nn

05:44:39.302222 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1564272:1564560, ack 17601, win 505, length 28805:44:39.303504 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1564560:1564736, ack 17601, win 505, length 17605:44:39.303725 IP 192.168.23.1.60874 > 192.168.23.128.22: Flags [.], ack 1564736, win 251, length 005:44:39.304498 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1564736:1565024, ack 17601, win 505, length 28805:44:39.305538 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1565024:1565200, ack 17601, win 505, length 17605:44:39.305721 IP 192.168.23.1.60874 > 192.168.23.128.22: Flags [.], ack 1565200, win 256, length 005:44:39.306528 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1565200:1565488, ack 17601, win 505, length 28805:44:39.307549 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1565488:1565664, ack 17601, win 505, length 17605:44:39.307866 IP 192.168.23.1.60874 > 192.168.23.128.22: Flags [.], ack 1565664, win 254, length 005:44:39.308467 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1565664:1565952, ack 17601, win 505, length 28805:44:39.309668 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1565952:1566128, ack 17601, win 505, length 17605:44:39.310075 IP 192.168.23.1.60874 > 192.168.23.128.22: Flags [.], ack 1566128, win 253, length 005:44:39.310173 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1566128:1566416, ack 17601, win 505, length 28805:44:39.311681 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1566416:1566592, ack 17601, win 505, length 17605:44:39.312270 IP 192.168.23.1.60874 > 192.168.23.128.22: Flags [.], ack 1566592, win 251, length 005:44:39.312384 IP 192.168.23.128.22 > 192.168.23.1.60874: Flags [P.], seq 1566592:1566880, ack 176
  • 上例中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息,如果不懂也没有关系,毕竟我们不是专门搞网络的,而这里需要关注的只是第三列以及第四列。-i 选项后面跟设备名称,如果你想抓eth1网卡的包,后面则要跟eth1.至于-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。

  • tcpdump -nn -i ens33

  • tcpdump -nn port 80

  • tcpdump -nn not prot 22 and host 192.168.23.128

  • tcpdump -nn -c 100 -w 1.cap

  • tcpdump -r 1.cap 查看保存的包 抓100个包存到1.cap文件中

  • tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri" 查看指定网卡80端口web动态

  • yum install -y wireshark