10.1 使用w查看系统负载
10.2 vmstat命令
10.3 top命令
10.4 sar命令
10.5 nload命令
10.6 监控io性能
10.7 free命令
10.8 ps命令
10.9 查看网络状态
10.10 linux下抓包
10.11 Linux网络相关
10.11扩展
10.12课堂笔记
10.1 使用w查看系统负载
监控系统状态
w #查看系统负载
第一行 当前系统时间 启动多长时间 登录几个用户 系统负载(一分钟系统负载数,五分钟系统负载数,十五分钟系统负载值)(负载正常值是8以内)
##系统负载含义:单位时间段内使用cpu活动的进程有多少个(平均值)
第二行 用户 tty 从哪里来 登陆时间
cat /proc/cpuinfo 查看cpu核数
#只看processor,如果是0,说明只有一颗逻辑cpu;如果是1,就有2颗逻辑cpu
uptime #也能查看系统负载,不过只是w的第一行
[root@xinlinux-02 ~]#
uptime
08:43:48 up 2 min, 2 users, load average: 0.34, 0.40, 0.18
10.2 vmstat命令
vmstat 1 #查看系统进程,一秒动态显示一次,按Ctrl+c结束
vmstat 1 5 #查看系统进程,一秒动态显示一次,显示5次自动结束
关键的几列:
r :run,表示有多少个进程处于run状态,run就是在等待使用cpu
b:block,表示被除cpu以外的资源阻断了,卡死了,处于等待的状态
swpd:如果数字在持续变化,说明你的内存不够了
si:有多少数据块从swap进入内存
so:多少数据块从内存出去到swap
bi:从磁盘里出来,进入到内存里去;从磁盘里读
bo:从磁盘里写
us:表示用户占用cpu资源百分比,不超过100%,;如果长时间大于50%,说明系统资源不够了
sy:系统本身进程服务占用资源百分比
id:cpu空闲资源百分比
##ps:us+sy+id=100%
wa:类似b,表示进程等待cpu的百分比数,有多少进程在等待cpu,如果wa很大, 说明cpu不够用
10.3 top命令
top #查看进程使用情况,动态的,三秒显示一次
主要看us(长期处于60%以上,对主机没好处)
第一行,跟w命令查看的一样
第二行 进程总数状况 总数 r状态数 休眠状态数 停止状态数 僵尸进程数(主进程被意外终止了,只留下子进程在这里)
第三行 cpu百分比 st(表示被偷走的cpu百分比)
第四行 物理内存使用情况 总内存数 剩余内存数 使用内存数 buff/cache数
第五行 交换分区使用情况
显示进程
默认情况下,按照cpu百分比排序(使用cpu多的排前面)
%CPU :使用cpu百分比
%MEM:使用内存百分比
RES:物理内存大小(单位为k字节)
COMMAND:进程所在的路径名
##按q退出,数字1显示所有核cpu使用情况(从第三行观看),大写字母M按内存使用排序,大写字母P按cpu使用排序
top -c #显示详细的进程信息,COMMAND:进程所在的绝对路径
top -bn1 # 静态显示所有进程 (适合在写脚本的时候用)
10.4 sar命令
主要用来查看网卡流量
yum install -y sysstat #安装sar命令
sar每十分钟将系统状态抓一次,放入/var/log/sa/saxx 文件内 (xx表示抓取日期)
ps: /var/log/sa/ 目录内容最多保存一个月
sar -n DEV #网卡流量
sar -n DEV 1 2 #每隔一秒显示一次,共显示2次
IFACE:网卡名称
rxpck/s:接收到的数据包(单位为个) (数据包几千个正常,数据包上万的话就不正常了)
txpck/s:发送的数据包(单位为个)
rxkB/s:接受的数据量(大小为kB)
txkB/s:发送的数据量(大小为kB)
sar -q #查看历史sar文件
sar -q 1 5 #查看系统负载一秒一次,共5次
sar -b #查看磁盘读写
sar -b 1 5
sar -f /var/log/sa/sa25 #查看历史sar文件
[root@xinlinux-02 sa]#
sar -f sa25
Linux 3.10.0-862.9.1.el7.x86_64 (xinlinux-02) 2018年08月25日 _x86_64_ (1 CPU)
21时35分52秒 LINUX RESTART
21时40分02秒 CPU %user %nice %system %iowait %steal %idle
21时50分01秒 all 3.16 0.00 2.21 0.52 0.00 94.11
22时00分01秒 all 0.09 0.00 0.21 0.00 0.00 99.70
22时10分01秒 all 0.09 0.00 0.19 0.07 0.00 99.65
22时20分01秒 all 0.06 0.00 0.14 0.00 0.00 99.79
22时30分01秒 all 0.07 0.00 0.14 0.01 0.00 99.79
22时40分01秒 all 0.07 0.00 0.16 0.00 0.00 99.77
平均时间: all 0.59 0.00 0.51 0.10 0.00 98.81
#sa目录会生成两种文件saxx和sarxx,
saxx二进制的文件,不能cat,只能是用 sar -f 选项去加载查看
sarxx是可以直接cat(sarxx会在saxx文件产生后一天出现)
10.5 nload命令
监控网卡流量
yum install -y epel-release
yum isntall -y nload
nload
#显示实时的动态的网卡流量
第一行 网卡名 IP地址 网卡数(按方向键可以切换其他网卡)
curr:当前值
avg:平均值
Min:最小值
Max:最大值
#一般情况买来的带宽的性能看的是出去的流量(Outgoing)
10.6 监控io性能
iostat命令也在sysstat包里面,与sar命令一样
iostat -x #磁盘使用情况,主要关注%util这一列
[root@xinlinux-02 sa]#
iostat -x
Linux 3.10.0-862.9.1.el7.x86_64 (xinlinux-02) 2018年08月27日 _x86_64_ (1 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.72 0.01 1.55 0.28 0.00 97.43
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.06 1.76 0.66 58.84 27.91 71.71 0.02 7.83 9.24 4.07 4.55 1.10
sdb 0.00 0.00 0.08 0.00 2.13 0.00 55.72 0.00 4.66 4.66 0.00 2.79 0.02
scd0 0.00 0.00 0.01 0.00 0.34 0.00 90.26 0.00 3.70 3.70 0.00 3.17 0.00
%util:表示io,有多少时间占用cpu,等待io时间比
如果数值很大,说明io不好或是io很忙,读写数值也会很大;如果只是wkb/s大,说明硬盘可能存在着问题,有些故障
yum install -y iotop
iotop #查看磁盘io使用情况
10.7 free命令
free #查看内存使用情况
[root@xinlinux-02 ~]# free
total used free shared buff/cache available
Mem: 997948 129016 579956 7784 288976 688736
Swap: 2097148 0 2097148
#第一行是说明
第二行是内存使用情况 内存总大小(kB) 使用内存数 空闲内存数
第三行是交换分区的使用情况
free -m #单位为M
[root@xinlinux-02 ~]#
free -m
total used free shared buff/cache available
Mem: 974 125 566 7 282 673
Swap: 2047 0 2047
free -h #数值后面加上M
[root@xinlinux-02 ~]#
free -h
total used free shared buff/cache available
Mem: 974M 125M 566M 7.6M 282M 673M
Swap: 2.0G 0B 2.0G
total=used+free+buff/cache
buff和cache的区别
buff:缓冲
cache:缓存
数据流向:
1、数据从磁盘读出来,先放内存里,然后交给cpu运转
磁盘-->内存(cache)-->cpu
2、cpu把数据计算完,放到内存里,最后存到磁盘里去
cpu-->内存(buffer)-->磁盘
avaliable包含free和buffer/cache剩余部分
10.8 ps命令
ps #查看系统进程静态
ps aux 和ps -elf一样 #把系统所有进程全部列出来
kill [pid] #杀死进程
[root@xinlinux-02 ~]# sleep 1000 &
[1] 1243
[root@xinlinux-02 ~]#
ps
PID TTY TIME CMD
1184 pts/0 00:00:00 bash
1243 pts/0 00:00:00 sleep
1244 pts/0 00:00:00 ps
[root@xinlinux-02 ~]#
kill -9 1243
[root@xinlinux-02 ~]#
ps
PID TTY TIME CMD
1184 pts/0 00:00:00 bash
1245 pts/0 00:00:00 ps
[1]+ 已杀死 sleep 1000
ls -l /proc/[pid]/ #查看进程的启动位置
[root@xinlinux-02 ~]#
vim 4.txt &
[1] 1288
[root@xinlinux-02 ~]# ps -aux |grep "vim 4.txt"
root 1288 2.2 0.4 149172 4672 pts/0 T 15:00 0:00 vim 4.txt
root 1290 2.0 0.0 112720 988 pts/0 S+ 15:00 0:00 grep --color=auto vim 4.txt
[1]+ 已停止 vim 4.txt
[root@xinlinux-02 ~]#
ls -l /proc/1288/
总用量 0
dr-xr-xr-x. 2 root root 0 8月 27 15:01 attr
-rw-r--r--. 1 root root 0 8月 27 15:01 autogroup
-r--------. 1 root root 0 8月 27 15:01 auxv
-r--r--r--. 1 root root 0 8月 27 15:01 cgroup
--w-------. 1 root root 0 8月 27 15:01 clear_refs
-r--r--r--. 1 root root 0 8月 27 15:00 cmdline
-rw-r--r--. 1 root root 0 8月 27 15:01 comm
-rw-r--r--. 1 root root 0 8月 27 15:01 coredump_filter
-r--r--r--. 1 root root 0 8月 27 15:01 cpuset
lrwxrwxrwx. 1 root root 0 8月 27 15:01 cwd -> /root
-r--------. 1 root root 0 8月 27 15:01 environ
lrwxrwxrwx. 1 root root 0 8月 27 15:01 exe -> /usr/bin/vim
stat部分说明
D:不能中断的进程
R:run状态的进程
S:sleep状态的进程
T:暂停的进程
Z:僵尸进程
<:高优先级进程
N:低优先级进程
L:内存中被锁了内存分页
s:主进程
l:多线程进程
+:前台进程
10.9 查看网络状态
netstat #查看tcp/ip通信网络状态
netstat -lnp #查看监听端口
netstat -an #查看系统的网络连接状况
netstat -lntp #只看tcp的,不包含socket
-t #tcp
-u #udp
##小技巧
netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
##查看所有tcp握手、挥手状态的数量
[root@xinlinux-02 ~]#
netstat -an |awk '/^tcp/ {++sta[$NF]} END {for(key in sta) print key,"\t",sta[key]}'
LISTEN 4
ESTABLISHED 1
established 一千以内正常
ss -an 类似 nestat ,但是不会显示进程的名字
10.10 linux下抓包
• 抓包工具tcpdump #查看数据的流向
yum install -y tcpdump
• 用法:tcpdump -nn #第一个n表示ip,第二个n表示端口号
• tcpdump -nn -i ens33 #抓包ens33网卡
#一般情况下都是tcp的包,如果是udp的包,有可能被攻击了
• tcpdump -nn port 80 #抓包80端口的
• tcpdump -nn -i ens33 port 80 #抓包ens33网卡的80端口
• tcpdump -nn not port 22 and host 192.168.0.100
#不要22端口的,和只要192.168.0.100ip的
• tcpdump -nn -c 10 -w /tmp/1.cap
#指定-c10个数据包,-w包存到/tmp/1.cap
#/tmp/1.cap不能用cat查看,因为内容是通信的数据;可以通过
tcpdump -r /tmp/1.cap查看
[root@xinlinux-02 ~]#
tcpdump -r /tmp/1.cap
reading from file /tmp/1.cap, link-type EN10MB (Ethernet)
15:27:53.567409 IP xinlinux-02.ssh > 192.168.233.1.50581: Flags [P.], seq 2142148352:2142148500, ack 1453950734, win 274, length 148
15:27:53.568077 IP 192.168.233.1.50581 > xinlinux-02.ssh: Flags [.], ack 148, win 251, length 0
15:28:01.195971 IP 192.168.233.1.50581 > xinlinux-02.ssh: Flags [P.], seq 1:53, ack 148, win 251, length 52
• yum install -y wireshark #安装tshark命令
• 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访问情况
10.11 Linux网络相关
ifconfig #查看网卡ip(yum install net-tools)
• ifup ens33 #开启网卡ens33
ifdown ens33 #关闭网卡ens33
ifdown ens33 && ifup ens33 #重启网卡
[root@xinlinux-02 ~]#
ifdown ens33 && ifup ens33
成功断开设备 'ens33'。
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
• 设定虚拟网卡ens33:1
1、cd /etc/sysconfig/network-scripts/
2、cp ifcfg-ens33 ifcfg-ens33-1
3、vim ifcfg-ens33-1
修改下面三个
name=ens33:0
DEVICE=ens33:0
IPADDR=192.168.233.150
DNS1去掉,因为已经有了
4、
ifdown ens33 && ifup ens33
• mii-tool ens33 #查看网卡是否连接,如果不行的话用ethtool ens33
[root@xinlinux-02 network-scripts]#
mii-tool ens33
ens33: negotiated 1000baseT-FD flow-control,
link ok
• ethtool ens33 #也可以查看网卡是否连接
[root@xinlinux-02 network-scripts]#
ethtool ens33
Settings for ens33:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
•
hostnamectl set-hostname aminglinux # 更改主机名CentOS6不支持该命令
修改DNS的两种方式:
1、 修改DNS配置文件
/etc/resolv.conf
[root@xinlinux-02 ~]#
vim /etc/resolv.conf
内容如下:
# Generated by NetworkManager
nameserver 119.29.29.29
2、修改网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-网卡名
• /etc/hosts文件
[root@xinlinux-02 ~]#
vim /etc/hosts
内容如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.133.150
www.qq123.com
#左边ip,右边域名,支持一个ip多个域名
#ping
www.qq123.com时,会转到192.168.133.150 (
只在本机生效)
[root@xinlinux-02 ~]#
ping www.qq123.com
PING
www.qq123.com (192.168.133.150) 56(84) bytes of data.
64 bytes from
www.qq123.com (192.168.133.150): icmp_seq=1 ttl=128 time=66.7 ms
10.12扩展
tcp三次握手四次挥手
(重点面试问到)
http://www.doc88.com/p-9913773324388.html
10.13课堂笔记
10.1 使用w查看系统负载
uptime #只显示w的第一行
lscpu #查看cpu具体信息
cat /proc/cpuinfo #查看cpu具体信息,
lsb_release #查看操作系统版本
cat /etc/issue #查看操作系统版本
uname -r #查看内核信息
lspci -k #显示驱动信息
cat /proc/meminfo #查看内存信息
10.2 vmstat命令(
面试常考)
vmstat -n 1 #每一秒显示系统负载
r列表示有多少进程在run(运行)的状态;
b代表cpu以外的资源被其他进程占用;
swpd当内存不够时数值会发生变化;
si代表有多少kb的数据从swp进入到内存中;
bi代表从磁盘中出来到内存中去,
bo代表写入的数据量数值大小代表磁盘数据的 读写频率;
us表示用户级别的一些资源占用的cpu百分比;
us +sy +id =100;
wa代表等待cpu的百分比。
buffer 与cache的区别(
常考)
1、buffer是位于内存和硬盘之间,叫做缓冲;cache是位于CPU和主内存之间,叫做缓存
2、缓冲速率低于缓存
3、数据流向不同
磁盘(数据) --》 内存(起缓存作用cache) --》 cpu
cpu (数据) --》 内存(起缓冲作用buffer) --》 磁盘
10.3 top命令
top与w显示的第一行相同
第二行查看系统任务状态
第三行cpu利用率
原本是cpu(s)按e,变成cpu(0);
按M,按内存大小排序
id : idle ,表示cpu的空闲率,id越高,cpu非常空闲
wa:进程等待cpu的占用率
10.4 sar命令
##sar掌握网卡流量就行,其他的了解
sar -n 数字 #-n指定打印次数
sar -n DEV 1 2 #DEV表示网卡流量 ,1表示每秒显示一次,2表示打印两次
sar -b
1 #查看硬盘,一秒显示一次
10.5 nload命令
yum install -y epel-release
yum install -y nload #安装前提要有epel扩展源
nload #动态实时显示网卡,按方向键可以查看其它网卡
10.6 监控io性能
iostat -x #查看磁盘使用
#io百分比表示等待执行的进程,wkb数值很大的话说明硬盘可能有故障
-z 数字 #表示多久显示一次
iotop #实时显示磁盘读写速率
10.7 free命令
第一列是内存的总大小,单位是kb(可以使用free -h);
第二列是使用了多少;
第三列是剩余内存数量; buff/cache(缓冲和缓存)是预分配内存的量;
avaliable是预分配和没有完的内存
total=used+free+buff/cache
10.8 ps命令
ps -ef 和
ps -aux 类似,查看所有运行的进程
ps -C 进程名 #查看系统里是否有这个进程
kill命令加pid可以杀死进程(结束)
-
D是不能中断的进程;
-
R run状态下的进程;
-
S sleep状态下的进程;
-
T 暂停的进程;
-
Z 僵尸进程;
-
< 高优先级的进程;
-
N 低优先级进程;
-
s 主进程;
-
l 多线程进程;
-
+ 前台进程。
进程和线程区别
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
1) 简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
2) 线程的划分尺度小于进程,使得多线程程序的并发性高。
3) 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4) 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5)
从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
10.9 查看网络状态
查看端口
netstat -anlp |grep 80 #查看网络状态并将80端口显示,也能查端口号是否被占用
10.10 linux下抓包
tcpdump -nn #表示用数字显示ip地址的端口号;用来看数据的流向
-i + 网卡设备
port + 端口号
-w +文件 # 将抓的数据写到指定文件
ps:抓到的数据只能通过tcpdump -r 进行查看,其他的查看如cat只会看到乱码
yum install -y wireshark #安装tshark
tshark命令可查看指定网卡80端口web的访问情况;类似于web的访问日志
10.11 Linux网络相关
ethtool +网卡名 #查看网线是否连接
ifdown +网卡名 #断开该网卡
修改主机名
vim /etc/hostname
或者
hostnamectl set-hostname 主机名
修改DNS配置文件
1、vim /etc/resolv.conf
2、
vim /etc/sysconfig/network-scripts/ifcfg-网卡名
如果桥接情况下ping网关ping的通,ping外网ping不通,可以查看/etc/resolv.conf是否存在dns
扩展
tcp三次握手四次挥手(
重点面试常问)
连接三次握手
![](https://i-blog.csdnimg.cn/blog_migrate/96a1b1d2d4dce8fbfecb8e4c82b712fc.png)
-
TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
-
TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
-
TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
-
TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
-
当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
断开四次挥手
![](https://i-blog.csdnimg.cn/blog_migrate/1f4859800294235a306ebf154822d382.png)
-
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
-
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接收。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
-
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
-
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
-
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
-
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。