10.1 监控系统的状态
查看当前系统的负载:w uptime
w命令查看的是系统整体上的负载。
# w 10:42:38 up 7 min, 1 user, load average: 0.16, 0.08, 0.06USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot pts/0 192.168.100.1 10:36 6.00s 0.04s 0.02s w
上面,
第1行从左到右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载;
第2行显示的是当前登录的用户及其登录地址等。
uptime命令也可以显示上面第1行的内容:
# uptime 11:30:06 up 54 min, 1 user, load average: 0.00, 0.01, 0.05
重点关注load average:
第1个数值表示1分钟内系统的平均负载值(该值越大说明服务器压力越大)
第2个数值表示5分钟内系统的平均负载值
第3个数值表示15分钟内系统的平均负载值
一般情况下,第1个值不超过服务器的CPU数量就没问题。
查看服务器的CPU数量:
# cat /proc/cpuinfo
或者这样查看:
[root@localhost ~]# grep -c \'precessor\' /proc/cpuinfo0
在linux中,服务器有2*n个CPU(n为单颗物理CPU上有n核)。如果n是4,则查看/proc/cpuinfo这个文件会显示8段类似信息,最后一段的processor后面会显示为7。
监控系统的状态:vmstat
vmstat命令显示的结果分为6部分:procs、memory、swap、io、system和cpu。
# vmstatprocs -----------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 1556704 2076 168336 0 0 12 1 20 16 0 0 100 0 0
procs——显示进程的相关信息
r(run):表示运行或等待CPU时间片的进程数;
b(block):表示等待资源的进程数,资源指的是I/O、内存等。
memory——显示内存的相关信息
swpd:表示切换到交换分区中的内存数量,单位为KB,该值波动时说明内存不足;
free:表示当前空闲的内存数量,单位为KB;
buff:表示(即将写入磁盘的)缓冲大小,单位为KB;
cache:表示(从磁盘读取的)缓存大小,单位为KB。
swap——显示内存的交换情况
si:表示由交换区写入内存的数据量,单位为KB;
so:表示由内存写入交换区的数据量,单位为KB。
io——显示内存的交换情况
bi:表示从块设备读取数据的量(磁盘→内存),单位为KB;
bo:表示从块设备写入数据的量(内存→磁盘),单位为KB。
system——显示采集间隔内发生的中断次数
in:表示在某一时间间隔内观测到的每秒设备的中断次数;
cd:表示每秒产生的上下文切换次数。
cpu——显示CPU的使用状态
us:表示用户下所花费CPU的时间百分比(通常us<=10比较合适);
sy:表示系统花费CPU的时间百分比(sy与us呈正相关);
id:表示CPU处于空闲状态的时间百分比;
wa:表示I/O等待所占用CPU的时间百分比;
st:表示被偷走的CPU所占的时间百分比(一般为0)。
us + sy + id = 100%
重点关注r、b、si、so、bi、bo、us和wa这几列信息。
vmstat n m表示动态输出,每n秒输出一次,共输出m次。
# 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 1 0 0 1556356 2076 168376 0 0 6 0 13 11 0 0 100 0 0 0 0 0 1556356 2076 168376 0 0 0 0 84 61 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 81 70 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 62 55 0 0 100 0 0 1 0 0 1556340 2076 168376 0 0 0 0 80 73 0 0 100 0 0
可以看到,vmstat 1 5表示每1秒输出一次,共输出5次。
# vmstat 1procs -----------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 1556340 2076 168376 0 0 6 0 13 11 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 85 69 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 68 60 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 60 54 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 77 68 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 67 61 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 69 62 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 73 61 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 67 62 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 73 68 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 67 60 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 60 53 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 69 62 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 68 61 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 72 63 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 48 44 40 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 29 22 0 0 100 0 0 0 0 0 1556340 2076 168376 0 0 0 0 41 29 0 0 100 0 0^Z[1]+ 已停止 vmstat 1
vmstat 1表示每1秒输出一次,且一直输出,除非按Ctrl+Z中止或Ctrl+C结束。
显示进程所占用的系统资源:top/htop
top命令用于动态监控进程所占的系统资源,每3秒刷新一次,默认把占用系统资源(CPU、内存、磁盘I/O等)最高的进程放在最上面。
top - 14:17:19 up 3:41, 1 user, load average: 0.00, 0.02, 0.05Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1865308 total, 1370480 free, 139216 used, 355612 buff/cacheKiB Swap: 4194300 total, 4194300 free, 0 used. 1532752 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1811 root 20 0 161944 2200 1548 R 0.3 0.1 0:00.10 top 1 root 20 0 193492 6592 4128 S 0.0 0.4 0:01.99 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 6 root 20 0 0 0 0 S 0.0 0.0 0:00.61 kworker/u256:0 7 root rt 0 0 0 0 S 0.0 0.0 0:00.37 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.48 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.08 watchdog/0 12 root rt 0 0 0 0 S 0.0 0.0 0:00.08 watchdog/1 13 root rt 0 0 0 0 S 0.0 0.0 0:00.31 migration/1 14 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/1 15 root 20 0 0 0 0 S 0.0 0.0 0:00.34 kworker/1:0 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H 17 root rt 0 0 0 0 S 0.0 0.0 0:00.10 watchdog/2
上面左上角显示CPU、内存、交换区的使用情况,右边显示任务、负载、开机时间,下面就是进程实时状况。
top 查看进程使用资源情况;
top -c 显示详细的进程信息;
top -bn1 静态显示所有进程。
# top -bn1 -c | head -15top - 14:24:49 up 3:49, 1 user, load average: 0.00, 0.01, 0.05Tasks: 114 total, 1 running, 113 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 1.6 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 1865308 total, 1369280 free, 140300 used, 355728 buff/cacheKiB Swap: 4194300 total, 4194300 free, 0 used. 1531624 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1823 root 20 0 161868 2168 1600 R 6.2 0.1 0:00.01 top -bn1 -c 1 root 20 0 193492 6592 4128 S 0.0 0.4 0:02.04 /usr/lib/systemd/systemd --switched-root --syste+ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.02 [kthreadd] 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 [ksoftirqd/0] 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 [kworker/0:0H] 6 root 20 0 0 0 0 S 0.0 0.0 0:00.62 [kworker/u256:0] 7 root rt 0 0 0 0 S 0.0 0.0 0:00.37 [migration/0] 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 [rcu_bh]
- 交互式命令:
q 退出top 1 显示所有核CPU M 按内存使用从高到低排序 P 按CPU使用从高到低排序
top只支持键盘操作,显示单调,htop是Linux系统下一个基本文本模式的、交互式的进程查看器,主要用于控制台或shell中,可以替代top,是top的高级版本。
- htop命令优点:
80001. 快速查看关键性能统计数据,如CPU(多核布局)、内存/交换使用;2. 可以横向或纵向滚动浏览进程列表,以查看所有的进程和完整的命令行;3. 杀掉进程时可以直接选择而不需要输入进程号;4. 通过鼠标操作条目;5. 比top启动得更快。
- 安装htop:
# yum install -y htop
- 下面是 F1~F10 的功能和对应的字母快捷键:
F1 查看htop使用说明 F2 设置 F3 搜索进程 F4 过滤器,按关键字搜索 F5 显示树形结构 F6 选择排序方式 F7 减少nice值,这样就可以提高对应进程的优先级 F8 增加nice值,这样可以降低对应进程的优先级 F9 杀掉选中的进程 F10 退出htop
- 参数:
-C --no-color 使用一个单色的配色方案 -d --delay=DELAY 设置延迟更新时间,单位秒 -h --help 显示htop 命令帮助信息 -u --user=USERNAME 只显示一个给定的用户的过程 -p --pid=PID,[,PID,PID...] 只显示给定的PIDs -s --sort-key=COLUMN 依此列来排序 -v --version 显示版本信息
- 交互式命令:
上下键或PgUP/PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程; Space 标记/取消标记一个进程。命令可以作用于多个进程,例如 \"kill\",将应用于所有已标记的进程 U 取消标记所有进程 s 选择某一进程,按s:用strace追踪进程的系统调用 l 显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件(小写l) I 倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然(大写i) +, - 在树形模式下,展开或折叠子树 a (在有多处理器的机器上) 设置 CPU affinity: 标记一个进程允许使用哪些CPU u 显示特定用户进程 M 按Memory 使用排序 P 按CPU 使用排序 T 按Time+ 使用排序 F 跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。 K 显示/隐藏内核线程 H 显示/隐藏用户线程 Ctrl-L 刷新
监控系统状态:sar
sar命令可以监控平均负载、网卡流量、磁盘状态、内存使用等系统状态,可以显示历史信息,可以显示当天从零时开始到当前时刻的系统状态信息,每10分钟记录一次。
- 安装sar:
# yum install -y sysstat
初次使用sar会报错,这是因为sar还没有生成相应的数据库文件,它的数据库文件保存在/var/log/sa目录下。
# sarLinux 3.10.0-862.2.3.el7.x86_64 (localhost.localdomain) 2018年06月09日 _x86_64_ (4 CPU)10时35分41秒 LINUX RESTART10时40分01秒 CPU %user %nice %system %iowait %steal %idle10时50分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9911时00分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9911时10分01秒 all 0.00 0.00 0.03 0.05 0.00 99.9211时20分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9811时30分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9911时40分01秒 all 0.00 0.00 0.01 0.01 0.00 99.9811时50分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9912时00分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9912时10分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9812时20分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9812时30分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9812时40分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9812时50分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9813时00分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9813时10分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9813时20分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9813时30分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9813时40分01秒 all 0.01 0.00 0.02 0.00 0.00 99.9713时50分01秒 all 0.00 0.00 0.02 0.00 0.00 99.9814时00分01秒 all 0.01 0.00 0.02 0.00 0.00 99.9714时10分01秒 all 0.00 0.00 0.01 0.00 0.00 99.9814时20分01秒 all 0.10 0.00 0.22 0.28 0.00 99.4114时20分01秒 CPU %user %nice %system %iowait %steal %idle14时30分01秒 all 0.00 0.00 0.01 0.01 0.00 99.9814时40分01秒 all 0.01 0.00 0.04 0.00 0.00 99.9414时50分01秒 all 0.01 0.00 0.06 0.00 0.00 99.93平均时间: all 0.01 0.00 0.03 0.01 0.00 99.95
- 查看网卡流量:sar -n DEV
# sar -n DEV | head -15Linux 3.10.0-862.2.3.el7.x86_64 (localhost.localdomain) 2018年06月09日 _x86_64_ (4 CPU)10时35分41秒 LINUX RESTART10时40分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s10时50分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0010时50分01秒 ens33 0.12 0.12 0.01 0.01 0.00 0.00 0.0011时00分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时00分01秒 ens33 0.09 0.11 0.01 0.01 0.00 0.00 0.0011时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时10分01秒 ens33 0.38 0.26 0.03 0.03 0.00 0.00 0.0011时20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时20分01秒 ens33 0.15 0.12 0.01 0.01 0.00 0.00 0.0011时30分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时30分01秒 ens33 0.06 0.07 0.00 0.00 0.00 0.00 0.00
上面,
IFACE 这一列表示设备名称rxpck/s 这一列表示每秒进入收取的包的数量txpck/s 这一列表示每秒发送出去的包的数量rxKB/s 这一列表示每秒收取的数据量(单位为KB)txKB/s 这一列表示每秒发送的数据量(单位为KB)
# sar -n DEV -f /var/log/sa/sa09 | head -15Linux 3.10.0-862.2.3.el7.x86_64 (localhost.localdomain) 2018年06月09日 _x86_64_ (4 CPU)10时35分41秒 LINUX RESTART10时40分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s10时50分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0010时50分01秒 ens33 0.12 0.12 0.01 0.01 0.00 0.00 0.0011时00分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时00分01秒 ens33 0.09 0.11 0.01 0.01 0.00 0.00 0.0011时10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时10分01秒 ens33 0.38 0.26 0.03 0.03 0.00 0.00 0.0011时20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时20分01秒 ens33 0.15 0.12 0.01 0.01 0.00 0.00 0.0011时30分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.0011时30分01秒 ens33 0.06 0.07 0.00 0.00 0.00 0.00 0.00
使用-f选项可以查看某一天的网卡流量历史,后面跟文件名(以sa开头的文件,不能直接cat),sar的库文件在/var/log/sa目录下,还有sar开头的文件,可以直接cat。
- 查看历史负载:sar -q
# sar -q | head -15Linux 3.10.0-862.2.3.el7.x86_64 (localhost.localdomain) 2018年06月09日 _x86_64_ (4 CPU)10时35分41秒 LINUX RESTART10时40分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked10时50分01秒 0 130 0.00 0.02 0.05 011时00分01秒 0 129 0.00 0.01 0.05 011时10分01秒 0 131 0.01 0.02 0.05 011时20分01秒 0 130 0.00 0.01 0.05 011时30分01秒 0 129 0.00 0.01 0.05 011时40分01秒 0 130 0.00 0.01 0.05 011时50分01秒 0 130 0.00 0.01 0.05 012时00分01秒 0 129 0.00 0.01 0.05 012时10分01秒 0 131 0.00 0.01 0.05 012时20分01秒 0 131 0.00 0.01 0.05 0
- 查看磁盘使用:sar -b
# sar -b | head -15Linux 3.10.0-862.2.3.el7.x86_64 (localhost.localdomain) 2018年06月09日 _x86_64_ (4 CPU)10时35分41秒 LINUX RESTART10时40分01秒 tps rtps wtps bread/s bwrtn/s10时50分01秒 0.05 0.00 0.05 0.12 0.5411时00分01秒 0.06 0.02 0.04 0.59 0.5711时10分01秒 0.88 0.48 0.40 14.22 9.2111时20分01秒 0.04 0.00 0.03 0.11 0.3611时30分01秒 0.05 0.00 0.05 0.00 0.4711时40分01秒 0.05 0.00 0.05 0.04 0.7011时50分01秒 0.06 0.00 0.06 0.00 0.7012时00分01秒 0.02 0.00 0.02 0.00 0.2912时10分01秒 0.07 0.00 0.07 0.00 0.8412时20分01秒 0.04 0.00 0.04 0.00 0.40
查看网卡流量:nload
sar虽然可以查看网卡流量,但不够直观,而nload非常直观
- 安装nload:
# yum install -y epel-release;yum install -y nload
nload动态显示,按向右箭头可以其它网卡的网络流量。
输出结果分为两个部分,Incoming 为进入网卡的流量,Outgoing 为网卡出去的流量,一般关注 Curr 那行数据,其单位也可以动态自动调整。
监控I/O性能:iostat iotop
iostat -x和iotop都可以查看磁盘使用情况。
- iostat为静态显示:
# iostat -xLinux 3.10.0-862.2.3.el7.x86_64 (localhost.localdomain) 2018年06月09日 _x86_64_ (4 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.01 0.00 0.04 0.04 0.00 99.91Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilsda 0.00 0.01 0.42 0.12 13.15 4.38 65.53 0.01 13.35 10.98 21.69 4.82 0.26scd0 0.00 0.00 0.00 0.00 0.06 0.00 114.22 0.00 43.78 43.78 0.00 43.22 0.00
- iotop类似于top,可以动态显示某个进程使用磁盘的状况:
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/sActual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % systemd --switched-root --system --deserialize 22 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 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [lru-add-drain] 11 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/0] 12 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [watchdog/1] 13 rt/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [migration/1] 14 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [ksoftirqd/1] 15 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/1:0] 16 be/0 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % [kworker/1:0H]
查看内存使用状况:free
free命令可以查看当前系统的总内存大小以及使用内存的情况。
# free total used free shared buff/cache availableMem: 1865308 139724 1369236 9692 356348 1532092Swap: 4194300 0 4194300
上面,
total 内存总大小used 真正使用的内存大小free 剩余物理内存大小shared 共享内存大小buff/cache 分配给buffer和cache的内存,即缓冲/缓存(数据经过CPU计算,即将写入磁盘,用到的内存为buffer;CPU要计算时,需要把数据从磁盘中读出来,临时放入内存中,用到的内存是cache)available 系统可使用的内存大小,包含free和buffer/cache剩余部分total = used + free + buff/cache
free命令可以加-m和-g选项,分别以MB和GB为单位显示内存的使用状况,也支持-h选项。
查看系统进程:ps
ps命令专门查看系统进程。
- ps不加参数时无法显示详细的进程信息:
# ps PID TTY TIME CMD 1253 pts/0 00:00:00 bash 1939 pts/0 00:00:00 ps
- ps aux 显示进程信息非常详细(ps -elf与ps aux作用类似):
# ps aux | head -15USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.3 193492 6592 ? Ss 10:35 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22root 2 0.0 0.0 0 0 ? S 10:35 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S 10:35 0:00 [ksoftirqd/0]root 5 0.0 0.0 0 0 ? S< 10:35 0:00 [kworker/0:0H]root 6 0.0 0.0 0 0 ? S 10:35 0:00 [kworker/u256:0]root 7 0.0 0.0 0 0 ? S 10:35 0:00 [migration/0]root 8 0.0 0.0 0 0 ? S 10:35 0:00 [rcu_bh]root 9 0.0 0.0 0 0 ? R 10:35 0:00 [rcu_sched]root 10 0.0 0.0 0 0 ? S< 10:35 0:00 [lru-add-drain]root 11 0.0 0.0 0 0 ? S 10:35 0:00 [watchdog/0]root 12 0.0 0.0 0 0 ? S 10:35 0:00 [watchdog/1]root 13 0.0 0.0 0 0 ? S 10:35 0:00 [migration/1]root 14 0.0 0.0 0 0 ? S 10:35 0:00 [ksoftirqd/1]root 15 0.0 0.0 0 0 ? S 10:35 0:00 [kworker/1:0]
上面,
PID 表示进程的ID,kill使用时后面需要跟上PID STAT 进程的状态,主要有以下几种:D 不能中断进程(通常为IO)R 正在运行中的进程S 已经中断的进程Z 僵尸进程,杀不掉、打不死的进程(主进程意外丢失)< 高优先级进程N 低优先级进程s 主进程 l 多线程进程- \\+ 在前台运行的进程
ps连同管道符一起使用,可以查看某个进程或它的数量(grep -c)。
# ps aux | grep sshdroot 923 0.0 0.2 112796 4296 ? Ss 10:36 0:00 /usr/sbin/sshd -Droot 1249 0.0 0.2 158800 5540 ? Ss 10:36 0:00 sshd: root@pts/0root 1974 0.0 0.0 112724 984 pts/0 S+ 16:02 0:00 grep --color=auto sshd
查看网络状况:netstat
netstat命令用来查看网络连接状况、系统所开放端口、路由表等信息。
- 常用用法:netstat -lnp 、netstat -an
# netstat -lnp | head -15Active 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 923/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1152/master tcp6 0 0 :::22 :::* LISTEN 923/sshd tcp6 0 0 ::1:25 :::* LISTEN 1152/master udp 0 0 127.0.0.1:323 0.0.0.0:* 571/chronyd udp6 0 0 ::1:323 :::* 571/chronyd raw6 0 0 :::58 :::* 7 595/NetworkManager Active UNIX domain sockets (only servers)Proto RefCnt Flags Type State I-Node PID/Program name Pathunix 2 [ ACC ] STREAM LISTENING 19801 1152/master private/tlsmgrunix 2 [ ACC ] STREAM LISTENING 19804 1152/master private/rewriteunix 2 [ ACC ] STREAM LISTENING 19807 1152/master private/bounceunix 2 [ ACC ] STREAM LISTENING 19810 1152/master private/defer
netstat -lnp查看当前系统启动了哪些端口(netstat -ltnp查看tcp端口;netstat -lunp查看udp端口)。
- netstat -an显示网络连接状况:
# netstat -an | head -20Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 52 192.168.100.128:22 192.168.100.1:51990 ESTABLISHEDtcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN udp 0 0 127.0.0.1:323 0.0.0.0:* udp6 0 0 ::1:323 :::* raw6 0 0 :::58 :::* 7 Active UNIX domain sockets (servers and established)Proto RefCnt Flags Type State I-Node Pathunix 2 [ ACC ] STREAM LISTENING 19801 private/tlsmgrunix 2 [ ACC ] STREAM LISTENING 19804 private/rewriteunix 2 [ ACC ] STREAM LISTENING 19807 private/bounceunix 2 [ ACC ] STREAM LISTENING 19810 private/deferunix 2 [ ACC ] STREAM LISTENING 19852 private/discardunix 2 [ ACC ] STREAM LISTENING 19858 private/virtualunix 2 [ ACC ] STREAM LISTENING 17445 /run/dbus/system_bus_socketunix 2 [ ACC ] STREAM LISTENING 19813 private/trace
netstat -an |awk \’/^tcp/{+=sta[$NF]}END{for(key in sta) print key,\”\\t\”,sta[key]}\’**查看tcp每一种状态出现的数量。
10.2 抓包工具
当初步判定服务器上有流量***时,使用抓包工具来抓取数据包可以知道的IP。
tcpdump 工具:tcpdump -nn
- 安装tcpdump:
# yum install -y tcpdump
- 参数:
-nn 作用是让第3列和第4列显示成“ip+端口号”的形式,不加-nn则显示“主机名+服务名”-i 指定设备名称-c 指定抓包数量,抓够了自动退出-w 指定保存位置-r 读取抓到的包内容tcp 指定抓tcp的包
# tcpdump -nn -i ens33 -c 10tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes16:29:43.007506 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 1203060315:1203060527, ack 4165463380, win 251, length 21216:29:43.008347 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 212:408, ack 1, win 251, length 19616:29:43.008424 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 408:572, ack 1, win 251, length 16416:29:43.008491 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 572:736, ack 1, win 251, length 16416:29:43.008555 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 736:900, ack 1, win 251, length 16416:29:43.008620 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 900:1064, ack 1, win 251, length 16416:29:43.008684 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 1064:1244, ack 1, win 251, length 18016:29:43.008747 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 1244:1424, ack 1, win 251, length 18016:29:43.008823 IP 192.168.100.128.22 > 192.168.100.1.51990: Flags [P.], seq 1424:1604, ack 1, win 251, length 18016:29:43.009124 IP 192.168.100.1.51990 > 192.168.100.128.22: Flags [.], ack 1604, win 2053, length 010 packets captured11 packets received by filter0 packets dropped by kernel
wireshark工具:tshark
- 安装tshark:
# yum install -y wireshark
- web服务器抓包 :
# 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\"
10.3 Linux网络相关
查看网卡IP:ifconfig ip addr
ifconfig命令类似于Windows的ipconfig命令,后面不跟任何选项和参数时,只显示当前网卡IP的相关信息(如子网掩码、网关等)。
- 安装ifconfig:
# yum install -y net-tools
- ifconfig 查看网卡IP:
# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.128 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::b76:caa8:3d7c:71bc prefixlen 64 scopeid 0x20<link> ether 00:0c:29:e4:fc:a5 txqueuelen 1000 (Ethernet) RX packets 12004 bytes 6150452 (5.8 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 16570 bytes 4217661 (4.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 78 bytes 6856 (6.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 78 bytes 6856 (6.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
设置(修改)IP:vim /etc/sysconfig/network_scripts/ifcfg-ens33(这里以ens33为网卡名为例)。
- 关闭网卡:
# ifdown 网卡名
- 启动网卡:
# ifup 网卡名
- 重启网卡:
# ifdown 网卡名; ifup 网卡名(远程时这样无法重启,会断开)或# ifdown 网卡名 && ifup 网卡名或# systemctl restart network
给一个网卡设定多个IP(虚拟网卡):vim ifcfg-ens:1
# cd /etc/sysconfig/network-scripts/# cp ifcfg-ens33 ifcfg-ens33:1# vim ifcfg-ens33:1TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticDEFROUTE=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_FAILURE_FATAL=noIPV6_ADDR_GEN_MODE=stable-privacyNAME=ens33:1UUID=d71e4905-fa6f-4d09-8533-714dfb0b9e5dDEVICE=ens33:1ONBOOT=yesIPADDR=192.168.100.130NETMASK=255.255.255.0GATEWAY=192.168.100.2DNS1=8.8.8.8DNS2=4.2.2.2
# systemctl restart network# ifconfigens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.128 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::b76:caa8:3d7c:71bc prefixlen 64 scopeid 0x20<link> ether 00:0c:29:e4:fc:a5 txqueuelen 1000 (Ethernet) RX packets 12802 bytes 6219046 (5.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 17083 bytes 4281925 (4.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.130 netmask 255.255.255.0 broadcast 192.168.100.255 ether 00:0c:29:e4:fc:a5 txqueuelen 1000 (Ethernet)lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x800010<host> loop txqueuelen 1000 (Local Loopback) RX packets 90 bytes 7912 (7.7 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 90 bytes 7912 (7.7 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
查看网卡连接状态:mii-tool ethtool
- mii-tool查看网卡是否连接:
# mii-tool ens33ens33: negotiated 1000baseT-FD flow-control, link ok
- ethtool查看网卡状态:
# ethtool ens33Settings for ens33:Supported ports: [ TP ]Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: NoSupports auto-negotiation: YesSupported FEC modes: Not reportedAdvertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: NoAdvertised auto-negotiation: YesAdvertised FEC modes: Not reportedSpeed: 1000Mb/sDuplex: FullPort: Twisted PairPHYAD: 0Transceiver: internalAuto-negotiation: onMDI-X: off (auto)Supports Wake-on: dWake-on: dCurrent message level: 0x00000007 (7) drv probe linkLink detected: yes
更改主机名:hostname、hostnamectl set-hostname
- 更改主机名:
hostname(重启后失效);
hostnamectl set-hostname(重启后不变)。
设置DNS:vim /etc/hosts
- 设置DNS:
vi /etc/resolv.conf(临时修改);
修改网卡配置文件(永久修改)。
- vi /etc/hosts 临时解析某个域名:
- 一个ip可以对应多个域名,反之不行;
- 每一行只能有1个IP;
- 出现多个相同域名时,按最前面出现的记录来解析。