第十章日常运维(上)
Posted lucky-lgx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十章日常运维(上)相关的知识,希望对你有一定的参考价值。
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的第一行
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 10 #每隔一秒显示一次,共显示十次
IFACE:网卡名称
rxpck/s:接收到的数据包(单位为个) (数据包几千个正常,数据包上万的话就不正常了)
txpck/s:发送的数据包(单位为个)
rxkB/s:接受的数据量(大小为kB)
txkB/s:发送的数据量(大小为kB)
sar -q #查看历史sar文件
sar -q 1 10 #查看系统负载一秒一次,共10次
sar -b #查看磁盘读写
sar -b 1 5
sar -f /var/log/sa/saxx #查看历史sar文件
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这一列
%util:表示io,有多少时间占用cpu,等待io时间比
如果数值很大,说明io不好或是io很忙,读写数值也会很大;如果只是wkb/s大,说明硬盘可能存在着问题,有些故障
yum install -y iotop
iotop #查看磁盘io使用情况
10.7 free命令
free #查看内存使用情况
第一行是说明
第二行是内存使用情况 内存总大小(kB) 使用内存数 空闲内存数
第三行是交换分区的使用情况
free -m #单位为M
free -h #数值后面加上M
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] #杀死进程
ls -l /proc/[pid]/ #查看进程的启动位置
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," ",sta[key]}‘
##查看所有tcp握手、挥手状态的数量
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查看
? 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 #重启网卡
? 设定虚拟网卡ens33:1
1、cd /etc/sysconfig/network-scripts/
2、cp ifcfg-ens33 ifcfg-ens33:0
3、vim ifcfg-ens33:0
修改下面三个
name=ens33:0
DEVICE=ens33:0
IPADDR=
DNS1去掉,因为已经有了
4、ifdown ens33 && ifup ens33
? mii-tool ens33 #查看网卡是否连接,
? ethtool ens33 #也可以查看网卡是否连接
? hostnamectl set-hostname aminglinux # 更改主机名CentOS6不支持该命令
修改DNS的两种方式:
1、 修改DNS配置文件/etc/resolv.conf
2、修改网卡配置文件/etc/sysconfig/network-scripts/ifcfg-网卡名
? /etc/hosts文件
192.168.133.150 www.qq123.com
#左边ip,右边域名,支持一个ip多个域名
#ping www.qq123.com时,会转到192.168.133.150 (只会在本机生效)
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三次握手四次挥手(重点面试常问)
连接三次握手
-
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状态,此后双方就可以开始通信了。
断开四次挥手
-
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,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连接的时间要比客户端早一些。
以上是关于第十章日常运维(上)的主要内容,如果未能解决你的问题,请参考以下文章