第十章日常运维(上)

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 auxps  -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三次握手四次挥手(重点面试常问) 
 
 
连接三次握手
技术分享图片技术分享图片
  1. TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了LISTEN(监听)状态;
  2. TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。
  3. TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。
  4. TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。
  5. 当服务器收到客户端的确认后也进入ESTABLISHED状态,此后双方就可以开始通信了。
 
断开四次挥手
技术分享图片技术分享图片
  1. 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
  2. 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接收。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
  3. 客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
  4. 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  5. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2?MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
  6. 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

以上是关于第十章日常运维(上)的主要内容,如果未能解决你的问题,请参考以下文章

第13章 linux系统管理技巧(日常运维管理技巧)

腾讯Linux运维职位日常主要做啥工作

日常运维1wvmstat

日常运维

自动化运维工具介绍

Linux运维命令Curl - 日常用法总结