1、总结IP地址规划
IP地址的合理规划是网络设计中最重要的一环,在大型网络中必须对IP地址进行统一规划并得到实施。IP地址规划的好坏影响到网络路由协议算法的效率,影响到网络的性能,影响到网络的拓展,影响到网络的管理,也必将直接影响到网络应用的进一步发展。毫不夸张的说,看一个网络的规划质量和网络工程师的技术水准,直接看他的IP地址规划就好了。
IP地址规划的基本原则
1)唯一性:一个IP网络中不能有两个主机采用相同的IP地址。即使使用了支持地址重叠的MPLS/VPN技术,也尽量不要规划为相同的地址。
2)连续性:连续地址在层次结构网络中易于进行路径叠合,大大缩减路由表,提高路由算法的效率。
3)可扩展性:地址分配在每一层次上都要留有余量,在网络规模扩展时能保证地址所需的连续性。
4)实意性:顾名思义就是在分配IP地址时尽量使所分配的IP地址具有一定的实际意义,使人一看到该IP地址就可以知道此IP地址分配给了哪个部门或哪个地区。
在分配IP地址时需要注意一下几点
配置Loopback地址时,使用的子网掩码为32
配置互联地址时,使用的子网掩码为30
对各业务网关进行统一设定,比如将所有的网关统一设置为X.X.X.254
2、总结常见网络管理命令
ifconfig:
ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置网卡的信息。在网卡重启后机器重启后,配置就不存在,要想配置信息永久保存,需要修改网卡的配置文件
用法:ifconfig [-v] [-a] [-s] [interface]
ifconfig [-v] interface [aftype] options | address ...
举例:
1 [root@N37012 ~]# ifconfig -v eth0 2 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 3 inet 172.30.0.3 netmask 255.255.240.0 broadcast 172.30.15.255 4 ether 52:54:00:12:cd:5a txqueuelen 1000 (Ethernet) 5 RX packets 743398 bytes 356777696 (340.2 MiB) 6 RX errors 0 dropped 0 overruns 0 frame 0 7 TX packets 601991 bytes 74442785 (70.9 MiB) 8 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 9 10 [root@N37012 ~]# ifconfig -a eth0 11 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 12 inet 172.30.0.3 netmask 255.255.240.0 broadcast 172.30.15.255 13 ether 52:54:00:12:cd:5a txqueuelen 1000 (Ethernet) 14 RX packets 743456 bytes 356782228 (340.2 MiB) 15 RX errors 0 dropped 0 overruns 0 frame 0 16 TX packets 602041 bytes 74449577 (71.0 MiB) 17 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 18 19 [root@N37012 ~]# ifconfig -s eth0 20 Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg 21 eth0 1500 743503 0 0 0 602080 0 0 0 BMRU 22 [root@N37012 ~]# ifconfig 23 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 24 inet 172.30.0.3 netmask 255.255.240.0 broadcast 172.30.15.255 25 ether 52:54:00:12:cd:5a txqueuelen 1000 (Ethernet) 26 RX packets 743572 bytes 356791022 (340.2 MiB) 27 RX errors 0 dropped 0 overruns 0 frame 0 28 TX packets 602146 bytes 74461854 (71.0 MiB) 29 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 30 31 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 32 inet 127.0.0.1 netmask 255.0.0.0 33 loop txqueuelen 1000 (Local Loopback) 34 RX packets 2 bytes 272 (272.0 B) 35 RX errors 0 dropped 0 overruns 0 frame 0 36 TX packets 2 bytes 272 (272.0 B) 37 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 38 39 [root@N37012 ~]#
Ping
ping命令是用来测试TCP/IP网络是否畅通或者测试网络连接速度的命令,对确定网络是否正确连接,以及网络连接的状况十分有用,简单来表示就是ping一个目标地址,如果ping运行正确,大体上就可以排除网络访问层、网卡、路由器等存在的故障,从而缩小问题的范围。ping是ICMP协议(ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息)里面的其中一个命令。另一条为tracert。在Linux中为traceroute。
用法:ping [参数]
-d:使用Socket的SO_DEBUG功能;
-c<完成次数>:设置完成要求回应的次数;
-f:极限检测;
-i<间隔秒数>:指定收发信息的间隔时间;
-L<网络界面>:使用指定的网络界面送出数据包;
-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;
-n:只输出数值;
-p<范本样式>:设置填满数据包的范本样式;
-q:不显示指令执行过程,开头和结尾的相关信息除外;
-r:忽略普通的Routing Table,直接将数据包送到远端主机上;
-R:记录路由过程;
-s<数据包大小>:设置数据包的大小;
-v:详细显示指令的执行过程。
-t<存活数值>:设置存活数值TTL的大小
举例:
[root@N37012 ~]# ping -c 4 192.168.2.1 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_seq=1 ttl=64 time=0.439 ms 64 bytes from 192.168.2.1: icmp_seq=2 ttl=64 time=0.822 ms 64 bytes from 192.168.2.1: icmp_seq=3 ttl=64 time=0.699 ms 64 bytes from 192.168.2.1: icmp_seq=4 ttl=64 time=0.862 ms --- 192.168.2.1 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 0.439/0.705/0.862/0.167 ms [root@N37012 ~]#
route
route命令是用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。和ifconfig一样,直接执行rout命令添加的路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了。主要通过修改配置文件来永久生效。配置文件路径在*/etc/rc.local。
用法:route (选项) (参数)
选项:-A:设置地址类型;
-C:打印将Linux核心的路由缓存;
-v:详细信息模式;
-n:不执行DNS反向查找,直接显示数字形式的IP地址;
-e: netstat格式显示路由表;
-net:到一个网络的路由表;
-host:到一个主机的路由表。
参数:Add:增加指定的路由记录
Del:删除指定的路由记录
Target:目的网络或目的主机
w:设置默认网关
mss:设置TCP的最大区块长度(MSS),单位为MB
window:指定通过路由表的TCP连接的TCP窗口大小
dev:路由记录所表示的网络接口
举例:
1 [root@N37012 ~]# route -n 2 Kernel IP routing table 3 Destination Gateway Genmask Flags Metric Ref Use Iface 4 192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 5 192.168.2.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37 6 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 7 [root@N37012 ~]# route add default gw 192.168.2.1 8 [root@N37012 ~]# route -n 9 Kernel IP routing table 10 Destination Gateway Genmask Flags Metric Ref Use Iface 11 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 ens33 12 192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 13 192.168.2.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37 14 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 15 [root@N37012 ~]# route del default gw 192.168.2.1 16 [root@N37012 ~]# route -n 17 Kernel IP routing table 18 Destination Gateway Genmask Flags Metric Ref Use Iface 19 192.168.2.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 20 192.168.2.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37 21 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 22 [root@N37012 ~]#
Tracerout
tracerout命令用于追踪数据包在网络上的传输时的全部路径。他默认发送的数据包大小是40字节。通过tracert我们可以知道信息从你这台计算机到另一端的计算机主机走的网络路径。当然每次的数据包由某一同样的出发点到某一同样的目的地走的路径可能会不一样。因为网络中也会存在负载均衡等问题。导致走的路径可能不一致。tracerout通过发送小的数据包到目的设备直到返回,来测试需要多长时间。一条路径上的每个设备tracerout要测试3次。数据的结果包括每次测试的时间(ms)和设备的名称(如果有)以及IP地址。
用法:tracerout (选项) (参数)
选项:-d:使用Socket层级的排错功能
-f<存活时间>:设置第一个检测数据包的存活数值TTL的大小
-F:设置勿离断位
-g<网关>:设置来源路由网关,最多可设置8个
-i<网络界面>:使用指定的网络界面送出数据包
-l:使用ICMP回应取代UDP资料信息
-m<存活数值>:设置检测数据包的最大存活数值TTL的大小
-n:直接使用IP地址而非主机名
-p<通信端口>:设置UDP传输协议的通信端口
-r:忽略普通的Routing Table,直接将数据包送到远端主机上
-s<来源地址>:设置本地主机送出数据包的TOS数值
-v:详细显示指令的执行过程
-w<超时秒数>:设置等待远端主机回报的时间
-x:开启或关闭数据包的正确性检验
参数:指定目的主机IP地址或主机名
举例:
1 [root@N37012 ~]# traceroute -I www.baidu.com 2 traceroute to www.baidu.com (180.97.33.107), 30 hops max, 60 byte packets 3 1 100.93.219.130 (100.93.219.130) 1.833 ms 2.866 ms 3.777 ms 4 2 100.93.247.230 (100.93.247.230) 1.136 ms 1.413 ms 1.811 ms 5 3 10.196.72.141 (10.196.72.141) 1.137 ms 1.562 ms 1.847 ms 6 4 10.196.5.109 (10.196.5.109) 6.966 ms 6.975 ms 7.286 ms 7 5 10.200.20.234 (10.200.20.234) 6.973 ms 6.984 ms 7.232 ms 8 6 10.196.0.78 (10.196.0.78) 7.260 ms 7.023 ms 7.016 ms 9 7 * * * 10 8 125.64.29.173 (125.64.29.173) 8.719 ms * * 11 9 182.140.220.17 (182.140.220.17) 7.763 ms 7.830 ms 7.814 ms 12 10 * * * 13 11 202.102.69.186 (202.102.69.186) 46.304 ms 45.148 ms 45.120 ms 14 12 * * * 15 13 180.97.32.6 (180.97.32.6) 109.534 ms 109.496 ms 71.308 ms 16 14 * * * 17 15 * * * 18 16 180.97.33.107 (180.97.33.107) 41.325 ms 41.346 ms 41.345 ms 19 [root@N37012 ~]#
netstat
netstat通过遍历proc来获取socke信息。用来打印linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
用法:netstat (选项)
选项:-a或–all:显示所有连线中的Socket;
-A<网络类型>或–<网络类型>:列出该网络类型连线中的相关地址;
-c或–continuous:持续列出网络状态;
-C或–cache:显示路由器配置的快取信息;
-e或–extend:显示网络其他相关信息;
-F或–fib:显示FIB;
-g或–groups:显示多重广播功能群组组员名单;
-h或–help:在线帮助;
-i或–interfaces:显示网络界面信息表单;
-l或–listening:显示监控中的服务器的Socket;
-M或–masquerade:显示伪装的网络连线;
-n或–numeric:直接使用ip地址,而不通过域名服务器;
-N或–netlink或–symbolic:显示网络硬件外围设备的符号连接名称;
-o或–timers:显示计时器;
-p或–programs:显示正在使用Socket的程序识别码和程序名称;
-r或–route:显示Routing Table;
-s或–statistice:显示网络工作信息统计表;
-t或–tcp:显示TCP传输协议的连线状况;
-u或–udp:显示UDP传输协议的连线状况;
-v或–verbose:显示指令执行过程;
-V或–version:显示版本信息;
-w或–raw:显示RAW传输协议的连线状况;
-x或–unix:此参数的效果和指定”-A unix”参数相同;
–ip或–inet:此参数的效果和指定”-A inet”参数相同;
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 [root@N37012 ~]# netstat -a 2 Active Internet connections (servers and established) 3 Proto Recv-Q Send-Q Local Address Foreign Address State 4 tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 5 tcp 0 52 N37012:ssh 220.112.121.222:38827 ESTABLISHED 6 tcp 0 0 N37012:47736 169.254.0.55:lsi-bobcat ESTABLISHED 7 tcp 0 0 N37012:ssh 220.112.121.222:35209 ESTABLISHED 8 udp 0 0 0.0.0.0:bootpc 0.0.0.0:* 9 udp 0 0 N37012:ntp 0.0.0.0:* 10 udp 0 0 N37012:ntp 0.0.0.0:* 11 Active UNIX domain sockets (servers and established) 12 Proto RefCnt Flags Type State I-Node Path 13 unix 2 [ ACC ] STREAM LISTENING 10259 /run/lvm/lvmpolld.socket 14 unix 2 [ ACC ] STREAM LISTENING 12316 /run/dbus/system_bus_socket 15 unix 2 [ ACC ] STREAM LISTENING 27686 /run/systemd/private 16 unix 2 [ ] DGRAM 10033 /run/systemd/shutdownd 17 unix 2 [ ACC ] SEQPACKET LISTENING 27711 /run/udev/control 18 unix 2 [ ACC ] STREAM LISTENING 16614 /usr/local/yd.socket.server 19 unix 2 [ ACC ] STREAM LISTENING 12633 /var/run/acpid.socket 20 unix 3 [ ] STREAM CONNECTED 16623 /usr/local/yd.socket.client 21 unix 3 [ ] DGRAM 7103 /run/systemd/notify 22 unix 2 [ ] DGRAM 7105 /run/systemd/cgroups-agent 23 unix 2 [ ACC ] STREAM LISTENING 7114 /run/systemd/journal/stdout 24 unix 2 [ ACC ] STREAM LISTENING 13004 /var/run/lsm/ipc/simc 25 unix 5 [ ] DGRAM 7117 /run/systemd/journal/socket 26 unix 2 [ ACC ] STREAM LISTENING 13006 /var/run/lsm/ipc/sim 27 unix 12 [ ] DGRAM 7119 /dev/log 28 unix 2 [ ACC ] STREAM LISTENING 10236 /run/lvm/lvmetad.socket 29 unix 2 [ ] DGRAM 12630 30 unix 2 [ ] DGRAM 881687 31 unix 2 [ ] DGRAM 895959 32 unix 2 [ ] DGRAM 29972 33 unix 3 [ ] STREAM CONNECTED 27685 /run/dbus/system_bus_socket 34 unix 2 [ ] DGRAM 30787 35 unix 3 [ ] STREAM CONNECTED 27783 /run/systemd/journal/stdout 36 unix 2 [ ] DGRAM 27781 37 unix 3 [ ] STREAM CONNECTED 12395 38 unix 3 [ ] STREAM CONNECTED 30784 /run/systemd/journal/stdout 39 unix 3 [ ] STREAM CONNECTED 27684 40 unix 3 [ ] DGRAM 27798 41 unix 3 [ ] STREAM CONNECTED 30335 42 unix 2 [ ] DGRAM 29844 43 unix 3 [ ] DGRAM 27797 44 unix 3 [ ] STREAM CONNECTED 40540 45 unix 3 [ ] STREAM CONNECTED 16624 /usr/local/yd.socket.server 46 unix 3 [ ] STREAM CONNECTED 12890 /run/systemd/journal/stdout 47 unix 3 [ ] STREAM CONNECTED 12476 48 unix 3 [ ] STREAM CONNECTED 14563 /run/systemd/journal/stdout 49 unix 3 [ ] STREAM CONNECTED 12475 50 unix 3 [ ] STREAM CONNECTED 40541 /run/dbus/system_bus_socket 51 unix 2 [ ] DGRAM 16739 52 unix 2 [ ] DGRAM 12451 53 unix 3 [ ] STREAM CONNECTED 27779 54 unix 3 [ ] STREAM CONNECTED 14562 55 unix 3 [ ] STREAM CONNECTED 40777 /run/dbus/system_bus_socket 56 unix 2 [ ] DGRAM 13991 57 unix 3 [ ] STREAM CONNECTED 40653 58 unix 3 [ ] STREAM CONNECTED 30783 59 unix 2 [ ] DGRAM 10426 60 unix 3 [ ] STREAM CONNECTED 40776 61 unix 3 [ ] STREAM CONNECTED 40654 /run/systemd/journal/stdout 62 unix 3 [ ] STREAM CONNECTED 12997 /run/dbus/system_bus_socket 63 unix 2 [ ] DGRAM 40543 64 unix 3 [ ] STREAM CONNECTED 12935 65 unix 3 [ ] STREAM CONNECTED 29974 66 unix 3 [ ] STREAM CONNECTED 29973 67 unix 3 [ ] STREAM CONNECTED 30336 /run/systemd/journal/stdout 68 unix 2 [ ] DGRAM 12989 69 unix 3 [ ] STREAM CONNECTED 12936 /run/systemd/journal/stdout 70 unix 3 [ ] STREAM CONNECTED 12996 71 unix 3 [ ] STREAM CONNECTED 12396 /run/systemd/journal/stdout 72 unix 3 [ ] STREAM CONNECTED 12886 /run/systemd/journal/stdout 73 unix 2 [ ] DGRAM 41093 74 unix 3 [ ] STREAM CONNECTED 12885 75 unix 3 [ ] STREAM CONNECTED 12889 76 [root@N37012 ~]# netstat -at 77 Active Internet connections (servers and established) 78 Proto Recv-Q Send-Q Local Address Foreign Address State 79 tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 80 tcp 0 52 N37012:ssh 220.112.121.222:38827 ESTABLISHED 81 tcp 0 0 N37012:47736 169.254.0.55:lsi-bobcat ESTABLISHED 82 tcp 0 0 N37012:ssh 220.112.121.222:35209 ESTABLISHED 83 [root@N37012 ~]# netstat -au 84 Active Internet connections (servers and established) 85 Proto Recv-Q Send-Q Local Address Foreign Address State 86 udp 0 0 0.0.0.0:bootpc 0.0.0.0:* 87 udp 0 0 N37012:ntp 0.0.0.0:* 88 udp 0 0 N37012:ntp 0.0.0.0:* 89 [root@N37012 ~]#
ss
ss命令使用netlink与内核tcp_diag模块通信获取socket信息。他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix domain sockets等等统计. 它比其他工具展示更多tcp和state信息. 它是一个非常实用、快速、有效的跟踪IP连接和sockets的新工具.
ss [OPTION] ... [FILTER ]
选项:-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
FILTER : [ state TCP-STATE ] [ EXPRESSION ]
TCP的常见状态:tcp finite state machine:
LISTEN: 监听
ESTABLISHED:已建立的连接
FIN_WAIT_1
FIN_WAIT_2
SYN_SENT
SYN_RECV
CLOSED
EXPRESSION:
dport =
sport =
示例:’( dport = :ssh or sport = :ssh )’
常用组合:-tan, -tanl, -tanlp, -uan
举例:
1 [root@N37012 ~]# ss -t -a #列出所有tcp sockets 2 State Recv-Q Send-Q Local Address:Port Peer Address:Port 3 LISTEN 0 128 *:ssh *:* 4 ESTAB 0 52 172.30.0.3:ssh 220.112.121.222:38827 5 ESTAB 0 0 172.30.0.3:47736 169.254.0.55:lsi-bobcat 6 ESTAB 0 0 172.30.0.3:ssh 220.112.121.222:35209 7 [root@N37012 ~]# ss -o state all '( dport = :ntp or sport = ntp )' #列出所有ntp连接 8 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port 9 udp UNCONN 0 0 172.30.0.3:ntp *:* 10 udp UNCONN 0 0 127.0.0.1:ntp *:* 11 [root@N37012 ~]# ss -o state established '( dport = :http or sport = :http )' #列所有的tcp sockets 12 Netid Recv-Q Send-Q Local Address:Port Peer Address:Port 13 [root@N37012 ~]#
3、给定IP地址167.77.88.99和掩码255.255.255.192,子网号是什么?广播地址是什么?有效IP地址是什么?
IP地址分类:
A类:000~127,默认子网掩码:255.0.0.0
B类:128~191,默认子网掩码:255.255.0.0
C类:192~223,默认子网掩码:255.255.255.0
D类:224~239
E类:240~255
167.77.88.99从IP地址分类看,是一个B类地址;
掩码255.255.255.192可写成167.77.88.99/25
167.77.88.99可写成2进制的:10100111.01001101.01011000.01100011(4段8位数)
255.255.255.192写成2进制为:11111111.111111111.11111111.10000000
网络号:两者进行与运算(对应为全是1结果为1,否则为0):10100111.01001101.01011000.00000000
1×20+1×21+1×22+1×23+1×24+1×25+1×26+1×27=1+2+4+8+16+32+64+128=255
主机号:子网掩码取反再和ip做与运算:00000000.00000000.00000000.01111111(0.0.0.127)
10100111.01001101.01011000.01100011(167.77.88.99)
00000000.00000000.00000000.01100011(0.0.0.143)
子网号:这个IP本来就是B类地址。默认的子网是255.255.255.0,但是这里的子网是255.255.255.192,是25位,所以32位-25位=2^6=64
即子网号:167.77.88.64
广播地址10100111.01001101.01011000.01111111即:167.77.88.127
有效ip地址:167.77.88.65····167.77.88.126
4、添加IP地址192.168.2.2/24到eth0网卡上
[root@N37012 ~]# ip addr add 192.168.2.2/24 dev ens33 #临时添加IP地址 [root@N37012 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 [root@N37012 ~]# ping 192.168.2.2 #物理机使用的地址为192.168.2.2,所以虚拟机未配置 PING 192.168.2.2 (192.168.2.2) 56(84) bytes of data. 64 bytes from 192.168.2.2: icmp_seq=1 ttl=64 time=0.057 ms 64 bytes from 192.168.2.2: icmp_seq=2 ttl=64 time=0.044 ms ^C --- 192.168.2.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.044/0.050/0.057/0.009 ms [root@N37012 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 #永久配置IP地址需要在此配置IP地址方能在重启网卡和计算机后永久生效。 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=6800e0b7-72db-44ff-94df-0b2abe737623 DEVICE=ens33 ONBOOT=yes [root@N37012 ~]#
5、top,iostat,vmstat命令总结
top
top命令主要用来观察和收集运行在系统上的进程和一些有用信息。
PID:进程的ID
USER:进程属主的名字
PR:进程的优先级
NI:进程的nice值(介于-20 到 +19之间,值越大,越谦让)
VIRT:进程占用的虚拟内存总量
RES:进程占用的物理内存总量
SHR:进程和其他进程共享的内存总量
S:进程的状态(D代表可终端的休眠状态,R代表在运行的状态,S代表休眠状态,T代表跟踪状态或停止状态,Z代表僵化状态)
%CPU:进程使用的CPU时间比例
%MEM:进程实用的内存占可用内存的比例
TIME+:自进程启动到目前为止的CPU时间总量
COMMAND:进程所对应的命令行名称,也就是启动的程序名。
快捷键:
top界面按d键,可以更改刷新时间。默认3秒。
top界面按M键,可以按照内存来进行排序。
top界面按P键,可以按照cpu使用率来排序。
top界面按i键,可以只显示状态为R的进程。
top界面按c键,可以显示进程的完整的名称。
top -s以安全模式启动top界面,可以防止在top界面对进程进行修改操作。
按shift + >键,可以依次按照PID、USER、PR·····来进行排序。
按shift + <键,可以依次按照COMMAND、TIME+、%MEM·····来进行排序。
top界面按o键,还可以自定义显示哪些列。
iostat
iostst主要用来初步判断系统性能问题。
命令:iostst [选项]
-c;可以用来查看部分cpu状态信息
-k;某些使用block为单位的列,强制使用kilobytes为单位
-d;显示磁盘使用状态;
-x;输出更多详细信息
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 [root@N37012 ~]# iostat -d -k 1 3 #查看TPS和吞吐量信息,没1秒刷新一次,查看3次 2 Linux 3.10.0-862.el7.x86_64 (N37012) 04/27/2019 _x86_64_ (1 CPU) 3 4 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 5 vda 3.86 9.79 36.58 1443229 5391328 6 scd0 0.00 0.01 0.00 820 0 7 8 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 9 vda 0.00 0.00 0.00 0 0 10 scd0 0.00 0.00 0.00 0 0 11 12 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 13 vda 0.00 0.00 0.00 0 0 14 scd0 0.00 0.00 0.00 0 0 15 16 [root@N37012 ~]# iostat -d -x -k 1 3 #查看设备使用率和响应时间 17 Linux 3.10.0-862.el7.x86_64 (N37012) 04/27/2019 _x86_64_ (1 CPU) 18 19 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 20 vda 0.00 1.65 0.43 3.44 9.79 36.58 24.00 0.03 8.33 2.36 9.07 0.74 0.29 21 scd0 0.00 0.00 0.00 0.00 0.01 0.00 17.45 0.00 0.35 0.35 0.00 0.33 0.00 22 23 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 24 vda 0.00 4.04 0.00 22.22 0.00 105.05 9.45 0.07 3.14 0.00 3.14 0.27 0.61 25 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 26 27 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 28 vda 0.00 0.00 0.00 1.01 0.00 4.04 8.00 0.00 3.00 0.00 3.00 3.00 0.30 29 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 30 31 [root@N37012 ~]# iostat -c 1 3 #查看CPU状态 32 Linux 3.10.0-862.el7.x86_64 (N37012) 04/27/2019 _x86_64_ (1 CPU) 33 34 avg-cpu: %user %nice %system %iowait %steal %idle 35 0.55 0.00 0.37 0.18 0.00 98.89 36 37 avg-cpu: %user %nice %system %iowait %steal %idle 38 0.00 0.00 0.00 0.00 0.00 100.00 39 40 avg-cpu: %user %nice %system %iowait %steal %idle 41 0.00 0.00 0.00 0.00 0.00 100.00 42 43 [root@N37012 ~]# iostat -d -d 1 3 44 Linux 3.10.0-862.el7.x86_64 (N37012) 04/27/2019 _x86_64_ (1 CPU) 45 46 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 47 vda 3.86 9.79 36.58 1443229 5392188 48 scd0 0.00 0.01 0.00 820 0 49 50 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 51 vda 0.00 0.00 0.00 0 0 52 scd0 0.00 0.00 0.00 0 0 53 54 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn 55 vda 2.00 0.00 48.00 0 48 56 scd0 0.00 0.00 0.00 0 0 57 58 [root@N37012 ~]# iostat -x -k 1 3 59 Linux 3.10.0-862.el7.x86_64 (N37012) 04/27/2019 _x86_64_ (1 CPU) 60 61 avg-cpu: %user %nice %system %iowait %steal %idle 62 0.55 0.00 0.37 0.18 0.00 98.89 63 64 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 65 vda 0.00 1.65 0.43 3.44 9.79 36.57 24.00 0.03 8.33 2.36 9.07 0.74 0.29 66 scd0 0.00 0.00 0.00 0.00 0.01 0.00 17.45 0.00 0.35 0.35 0.00 0.33 0.00 67 68 avg-cpu: %user %nice %system %iowait %steal %idle 69 0.00 0.00 0.00 0.00 0.00 100.00 70 71 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 72 vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 73 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 74 75 avg-cpu: %user %nice %system %iowait %steal %idle 76 1.00 0.00 2.00 1.00 0.00 96.00 77 78 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util 79 vda 0.00 1.00 0.00 84.00 0.00 368.00 8.76 0.51 6.06 0.00 6.06 0.14 1.20 80 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 81 82 [root@N37012 ~]#
vmstat
vmstat命令是常见的Linux系统监控工具,可以展现服务器的状态值,包括CPU使用率,虚拟内存交换情况,I/O读写等信息。
命令:vmstat [options] [delay [count]]
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
举例:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 [root@N37012 ~]# vmstat -a 1 3 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- 3 r b swpd free inact active si so bi bo in cs us sy id wa st 4 2 0 0 149932 290992 446728 0 0 10 37 215 244 1 0 99 0 0 5 0 0 0 149908 290992 446728 0 0 0 0 133 145 0 0 100 0 0 6 0 0 0 149908 290992 446728 0 0 0 0 118 130 0 0 100 0 0 7 [root@N37012 ~]# vmstat -f 8 281326 forks 9 [root@N37012 ~]# vmstat -d 10 disk- ------------reads------------ ------------writes----------- -----IO------ 11 total merged sectors ms total merged sectors ms cur sec 12 vda 63132 355 2887050 148703 510668 244685 10833760 4624937 0 425 13 sr0 94 0 1640 33 0 0 0 0 0 0 14 loop0 0 0 0 0 0 0 0 0 0 0 15 [root@N37012 ~]# vmstat -m 16 Cache Num Total Size Pages 17 SCTPv6 10 10 1536 10 18 SCTP 0 0 1408 11 19 isofs_inode_cache 12 12 640 12 20 ext4_groupinfo_4k 420 420 136 30 21 ext4_inode_cache 41257 53250 1032 15 22 ext4_xattr 276 276 88 46 23 ext4_free_data 384 384 64 64 24 ext4_allocation_context 32 32 128 32 25 ext4_io_end 1344 1344 72 56 26 ext4_extent_status 6795 19788 40 102 27 jbd2_journal_handle 85 85 48 85 28 jbd2_journal_head 756 756 112 36 29 jbd2_revoke_table_s 256 256 16 256 30 jbd2_revoke_record_s 768 768 32 128 31 ip6_dst_cache 18 18 448 9 32 RAWv6 13 13 1216 13 33 UDPLITEv6 0 0 1216 13 34 UDPv6 13 13 1216 13 35 tw_sock_TCPv6 0 0 256 16 36 TCPv6 15 15 2176 15 37 cfq_queue 0 0 232 17 38 bsg_cmd 0 0 312 13 39 mqueue_inode_cache 9 9 896 9 40 hugetlbfs_inode_cache 13 13 608 13 41 configfs_dir_cache 0 0 88 46 42 dquot 240 240 256 16 43 userfaultfd_ctx_cache 0 0 192 21 44 fanotify_event_info 0 0 56 73 45 pid_namespace 0 0 2200 14 46 Cache Num Total Size Pages 47 posix_timers_cache 16 16 248 16 48 UDP-Lite 0 0 1088 15 49 flow_cache 0 0 144 28 50 xfrm_dst_cache 0 0 576 14 51 UDP 45 45 1088 15 52 tw_sock_TCP 64 64 256 16 53 TCP 16 16 1984 8 54 dax_cache 10 10 768 10 55 blkdev_queue 13 13 2424 13 56 blkdev_ioc 78 78 104 39 57 user_namespace 0 0 480 8 58 dmaengine-unmap-128 15 15 1088 15 59 sock_inode_cache 132 132 640 12 60 fsnotify_mark_connector 4590 4590 24 170 61 net_namespace 0 0 5248 6 62 shmem_inode_cache 792 792 680 12 63 Acpi-ParseExt 1120 1120 72 56 64 Acpi-State 4437 4437 80 51 65 task_delay_info 144 144 112 36 66 taskstats 12 12 328 12 67 proc_inode_cache 1674 1728 656 12 68 sigqueue 25 25 160 25 69 bdev_cache 19 19 832 19 70 kernfs_node_cache 12954 12954 120 34 71 mnt_cache 140 140 384 10 72 inode_cache 9152 9152 592 13 73 dentry 42510 53613 192 21 74 iint_cache 0 0 128 32 75 selinux_inode_security 10404 10404 40 102 76 Cache Num Total Size Pages 77 buffer_head 80193 91533 104 39 78 vm_area_struct 3616 4032 216 18 79 mm_struct 60 60 1600 10 80 files_cache 60 60 640 12 81 signal_cache 112 112 1152 14 82 sighand_cache 105 105 2112 15 83 task_xstate 133 133 832 19 84 task_struct 123 136 4048 8 85 anon_vma 1944 2142 80 51 86 shared_policy_node 12291 22355 48 85 87 numa_policy 15 15 264 15 88 radix_tree_node 10086 12404 584 14 89 idr_layer_cache 180 180 2112 15 90 dma-kmalloc-8192 0 0 8192 4 91 dma-kmalloc-4096 0 0 4096 8 92 dma-kmalloc-2048 0 0 2048 8 93 dma-kmalloc-1024 0 0 1024 8 94 dma-kmalloc-512 8 8 512 8 95 dma-kmalloc-256 0 0 256 16 96 dma-kmalloc-128 0 0 128 32 97 dma-kmalloc-64 0 0 64 64 98 dma-kmalloc-32 0 0 32 128 99 dma-kmalloc-16 0 0 16 256 100 dma-kmalloc-8 0 0 8 512 101 dma-kmalloc-192 0 0 192 21 102 dma-kmalloc-96 0 0 96 42 103 kmalloc-8192 24 36 8192 4 104 kmalloc-4096 86 128 4096 8 105 kmalloc-2048 277 312 2048 8 106 Cache Num Total Size Pages 107 kmalloc-1024 1016 1032 1024 8 108 kmalloc-512 522 536 512 8 109 kmalloc-256 1261 1920 256 16 110 kmalloc-192 2037 2037 192 21 111 kmalloc-128 832 832 128 32 112 kmalloc-96 1742 2100 96 42 113 kmalloc-64 12390 13376 64 64 114 kmalloc-32 1152 1152 32 128 115 kmalloc-16 2560 2560 16 256 116 kmalloc-8 3584 3584 8 512 117 kmem_cache_node 128 128 64 64 118 kmem_cache 112 112 256 16 119 [root@N37012 ~]#
6、找出CPU占用最多的前10个进程
1 [root@N37012 ~]# ps auxw|head -1;ps auxw|sort -rn -k3|head -10 2 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 3 root 1197 0.2 1.3 612300 13284 ? Sl Apr25 7:17 barad_agent 4 root 526 0.1 1.4 589732 14892 ? Ssl Apr25 4:30 /usr/local/qcloud/YunJing/YDEyes/YDService 5 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 6 sshd 22610 0.0 0.2 112864 2228 ? S 15:58 0:00 sshd: unknown [net] 7 root 955 0.0 0.0 110088 632 ttyS0 Ss+ Apr25 0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220 8 root 954 0.0 0.0 110088 640 tty1 Ss+ Apr25 0:00 /sbin/agetty --noclear tty1 linux 9 root 9 0.0 0.0 0 0 ? R Apr25 0:09 [rcu_sched] 10 root 878 0.0 0.2 112796 2328 ? Ss Apr25 0:02 /usr/sbin/sshd -D 11 root 802 0.0 0.2 107380 2100 ? Ss Apr25 0:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H N37012 eth0 12 root 8 0.0 0.0 0 0 ? S Apr25 0:00 [rcu_bh] 13 [root@N37012 ~]#
7、crontab实现,在12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
crontab:用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
举例:实现,在12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup
1 [root@N37012 ~]# crontab -e 2 crontab: installing new crontab 3 [root@N37012 ~]# crontab -l 4 0 6-12/3 * 12 * /usr/bin/backup.sh 5 [root@N37012 ~]#