日常运维 【1】

使用w查看系统负载                                       free命令

vmstat命令                                                       ps命令

top命令                                                             查看网络状态

sar命令                                                             1linux下抓包

nload命令                                                          linux网络相关

监控io性能

 

 

 

使用w查看系统负载

  • w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令。执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序。单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
  • 查看系统负载

  • 第一行从左边开始显示的信息依次是:时间,系统运行时间,登录用户数,平均负载(1min平均负载、5min平均负载、15min平均负载)。
  • load average:平均负载,即单位时间内CPU活动进程数,这个值越大说明服务器压力越大,一般该值不超过cpu数量就可以。
  • 查看服务器CPU数量有几个(/proc/cpuinfo),professor即为系统CPU数量。逻辑cpu

  • uptime命令,uptime得到的信息和w第一行结果是一样的。

 

 

 

vmstat命令

  • proc 显示进程相关信息
  1. r:=run,表示运行中或等待cpu运行的进程数,如果该数长期大于服务器CPU个数,则说明CPU不够用了。
  2. b:=block,表示等待资源的进程数,如,等待网速,内存等,这列的值如果长时间大于1,则需要关注一下。
  • memory 内存相关信息
  1. swpd:表示切换到交换分区的内存量(当该数据不断变化时说明内存不足)
  2. free:表示当前空闲的内存量
  3. buff:缓冲大小
  4. cache:缓存大小
  • swap 内存交换情况
  1. si:=storage in,表示交换区写入到内存的数据量
  2. so:=storage out,表示由内存写入到交换区的数据量
  • io 磁盘使用情况
  1. bi:=block in,表示从磁盘读取数据(写入内存)的量(即:读磁盘)
  2. bo:=block out,表示(从内存读取)写入到磁盘的数据(即:写磁盘)
  3. 此处数据会直接关系到proc出的b的值。
  • system 显示采集间隔内发生的中断次数
  1. in:表示在某一时间间隔中观测到的每秒设备中断数
  2. cs:表示每秒产生的上下文切换次数
  • CPU 显示CPU的使用状态(us+sy+id=100%)
  1. us:表示用户资源所花费CPU的百分比(当该值长时间>50时说明CPU数量不足)
  2. sy:表示系统资源所花费CPU的百分比
  3. id:表示CPU处于空闲状态的百分比,{us sy id 这三个相加等于100}
  4. wa:=wait,表示等待使用CPU的百分比(该数值大说明CPU不足)
  5. st:表示被偷走的CPU所占百分比(该值一般为0,不用关注)
  • vmstat 意思是静态显示内存状态一次。

  • vmstat n 在此n代表数字,意思是以n秒每次的频率动态显示内存状态(按Ctrl+c结束命令)

  • vmstat n m,意思是每n秒显示一次,显示m次后命令结束!

 

 

 

top命令

 

  • 默认情况下会按照%cpu排序{多的排前}
  • 第一行是负载信息
  • 第二行是进程信息
  • 第三行是CPU使用信息
  • 第四行是内存使用信息
  • 第五行是交换区使用信息
  • 最下面是进程详细信息:
  1. PID:表示进程在系统中的id号,可配合kill命令结束某进程
  2. RES:表示进程所用物理内存大小(单位:K字节)
  3. %MEM:表示内存使用百分比(单位:KB)

在top状态下(按q退出),按shift+m可以按内存使用大小进行排序(默认以CPU使用占比排序),按shift+p恢复按CPU使用占比排序,,按数字1可以显示每个CPU的状态。

  • -b:批量处理模式
  • -c:显示详细进程信息
  • -bn1:静态显示所有进程(该法多用于shell脚本)

  • top -c

  • top -bn1

 

 

 

sar命令

  • sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态(如,平均负载,网卡流量,磁盘状态,内存使用等)计数器显示到标准输出设备。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示从零点开始到当前时刻的系统状态信息。

用法

  • 使用‘yum install -y sysstat’安装该命令!初次使用sar命令(不加选项、参数)会报错,原因是sar命令还没有生成相应的数据库文件。其数据库保存在‘/var/log/sa/’目录下,该目录下存放两种文件,分别以‘sa日期’&‘sar日期’的格式命名(区别是sar文件在第二天生成,可以使用cat命令查看;sa文件实时<每个整‘10’分钟更新一次>生成,是二进制文件,无法查看),最多保留一个月。
  •  sar [options] [参数]
  • -f:从指定文件提取报告
  • sar -n DEV m n 查看网卡流量(在此m、n的用法同vmstat命令!)
  • sar -q 查看系统负载(配合-f选项使用,查看历史负载)
  • sar -b 查看磁盘信息

sar -n DEV m n 查看网卡流量

  • 第一列是时间
  • 第二列是网卡的名字
  • 第三列 rxpck/s:表示接收数据(包)的个数
  • 第四列 txpck/s:表示发送数据(包)的个数
  • 第五列 rxKB/s:表示接收的数据量
  • 第六列 txKB/s:表示发送的数据量
  • 后三列  基本数字都是零
  •  当rxpck/s的值大于上万或者rxKB/s的值大于上万时则可能是在被攻击(需配合抓包工具进一步确认)!

-f:从指定文件提取报告

sar -q 查看系统负载(配合-f选项使用,查看历史负载)

sar -b 查看磁盘信息

 

 

 

nload命令

  • 使用前需要先安装该命令,在安装此包前需要先安装yum扩展源:epel-release。

nload用法,在该界面显示系统网络动态信息,可使用方向键在不同网卡之间进行切换,按q键退出,根据实时网速和总网速的比较可以评估网络状态。

 

 

 

 

监控io性能

  • iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析
  • util%:表示io等待占比,正常情况下该值和磁盘读写(r/w)成正比,如果该值很大,读写数值很小则说明硬盘存在问题,系统性能会受影响!
  • iostat -x

iotop命令

  • 需要安装命令 yum install -y iotop
  • iotop命令是一个用来监视磁盘I/O使用状况的top类工具(动态)。iotop具有与top相似的UI,其中包括PID、用户、I/O、进程等相关信息。Linux下的IO统计工具如iostat,nmon等大多数是只能统计到per设备的读写情况,想知道每个进程是如何使用IO比较麻烦的话,使用iotop命令可以很方便的查看。
  • iotop常用快捷键
  • 左右箭头:改变排序方式,默认是按IO排序
  • r:改变排序顺序。
  • o:只显示有IO输出的进程。
  • p:进程/线程的显示方式的切换。
  • a:显示累积使用量。
  • q:退出。

 

 

 

 

free命令

  • free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区
  • -b/k/m/g:分别以byte、KB、M、G为单位显示(默认以KB为单位)
  • -h:已适当的单位显示
  • -t:显示内存总和

free命令可以查看当前系统的总内存大小以及使用内存的情况。
字面意思:
total 内存总大小;
used 真正使用的实际内存大小;
free 剩余物理内存大小(纯剩余);
shared 共享内存大小,不用关注;
buff/cache 分配给buffer和cache内存总共有多大;
  • buff(缓冲):当CPU向磁盘写入数据时,由于磁盘存储速率低于CPU,所以CPU工作时先将写好的数据存放在内存中,该部分内存即为缓冲内存。
  • cache(缓存):当CPU从磁盘读取数据时,由于磁盘输出速率低于CPU的读取速度,所以磁盘的数据会预先存放在内存中,该部分内存即为缓存内存。
  • total=used+free+buff/cache
  • available=free+buff/cache(空闲部分)

 

 

 

 

ps命令

  • ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。
  • a:显示现行终端机下的所有程序,包括其他用户的程序。
  • u:以用户为主的格式来显示系统状况。
  • x:显示所有程序,包括历史进程。
  • -e:显示所有进程(同a)
  • -f:显示UID、PPIP、C与STIME栏
  • -l:显示进程详细信息

ps aux 把系统所有的进程列出来

ps aux |grep nginx 查看系统中某一个进程  如nginx

ps -elf 和ps aux 是差不多的

kill  1346 杀死某一个进程 kill后面跟进程id

ls -l /proc/505/  查看进程在哪里启动起来的 ls -l /proc/后面跟进程id ,每一个进程都是应该目录

  • VSZ:虚拟内存
  • RSS:物理内存
  • START:什么时候启动的
  • TIME:运行多久
  •  STAT:表示进程状态。
  • 进程状态:

  • D:不能中断的进程
  • R:run状态的进程
  • S:sleep状态的进程
  • s:主进程
  • T:暂停的进程
  • Z:僵尸进程
  • <:高优先级进程
  • N:低优先级进程
  • L:内存中被锁定了内存分页
  • l:多线程进程
  • +:前台进程

进程/线程

进程

  • 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。

状态分类

  • 进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程可能具有以下三种基本状态:
  1. 就绪状态(Ready):进程已获得除处理器外的所需资源,等待分配处理器资源;只要分配了处理器进程就可执行。就绪进程可以按多个优先级来划分队列。例如,当一个进程由于时间片用完而进入就绪状态时,排入低优先级队列;当进程由I/O操作完成而进入就绪状态时,排入高优先级队列。
  2. 运行状态(Running):进程占用处理器资源;处于此状态的进程的数目小于等于处理器的数目。在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的空闲进程。
  3. 阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。该事件发生前即使把处理机分配给该进程,也无法运行。

线程

  • 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。
  • 在单个程序中同时运行多个线程完成不同的工作,称为多线程。

分类

  • 用户级线程:管理过程全部由用户程序完成,操作系统内核心只对进程进行管理。
  • 系统级线程(核心级线程):由操作系统内核进行管理。操作系统内核给应用程序提供相应的系统调用和应用程序接口API,以使用户程序可以创建、执行、撤消线程。

 

 

 

查看网络状态

  • netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况。
  • -a:=all 显示所有连线中的socket
  • -l:=listening 显示监控中的服务器的socket
  • -n:=numeric 直接使用IP地址
  • -p:=programs 显示正在使用socket的程序识别码和程序名称
  • -t:=tcp 显示tcp传输协议的连接状况

netstat -lnp 查看监听端口

netstat -an 查看系统网络连接状况

netstat -ltnp 只看tcp协议连接,不看socket

netstat -ltunp

需要关注ESTABLISHED,数字很大的话说明系统很忙,可以说明并发连接数。通常情况下数字在1000以内的话是可以接受的。

查看tcp协议状态的命令:

ppt会放到网址centos7.aminglinux.com里面

ss命令

  • ss命令用来显示处于活动状态的套接字信息。ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效,缺点是不会显示进程的名称。
  • -a:显示所有套接字(socket)
  • -n:不解析服务器名称,以数字方式显示

ss -an

ss -an |grep -i listen

 

 

 

 

linux下抓包

tcpdump命令

安装命令yum install -y tcpdump

  • tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。
  • -i:指定网卡名,使用指定的网络送出数据包
  • -c:指定数量
  • -w:指定存放位置
  • -r:=read,从指定文件查看数据包数据

用法

  • tcpdump -nn -i ens33 (第一个n表示以数字形式显示IP,如果不加该选项会显示成主机名)
  • tcpdump -nn eth0 port 22 (not port 22)指定端口为22的(非22的)
  • tcpdump -nn eth0 port 22 and host 192.168.8.1 指定多个条件(host:主机,后面跟主机名或IP)
  • tcpdump -nn -i ens33 -c 100 -w /tmp/1.cap 指定抓包数量和存放位置

  • cap内容无法使用cat命令查看,可使用tcpdump -r命令查看
  •  包内内容为使用tcpdump打包时的数据
  • tcpdump -r 1.cap 查看指定数据包内容

tshark命令

  • 该命令也是用于抓包的。
  • 使用前需要安装工具

  • 查看指定网卡80端口的1个web服务的访问情况(类似于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" ]

 

 

 

linux网络相关

ifconfig命令

  • 查看网卡IP
  • 查看网卡IP还可以使用命令:ip add,这个显示有点乱!
  • 如果系统没有命令使用yum安装

  • ifconfig -a
  • 显示所有网卡信息(包括down掉的或者没有IP地址的网卡)

启动/关闭网卡

  • ifup/ifdown [网卡名]
  • 应用环境:更改单个指定网卡配置后需要重启才能生效,为了避免关闭或重启所有网卡可以对单个网卡执行该命令
  •  如果网卡正在使用中,不要单独使用ifdown命令!!!解决办法: “# ifdown ens33 && ifup ens33”,使两个命令一起执行!

增加虚拟网卡

  • 切换至网卡配置文件复制系统网卡

  • 编辑复制的配置文件
  • 更改NAME、DEVICE、IPADDR,系统已经设定网关可DNS,所以在此可以删除GATEWAY和DNS,也可以保留,但是,如果要保留该选项则必须保持其与系统网卡配置一致!

  • 重启系统网卡

  • 查看网卡信息

  • 检测虚拟网啊IP是否通畅在Windows系统cmd下ping该IP即可!

查看网卡是否连接

  • 方法1 mii-tool [网卡名]
  • link ok说明网卡连接OK!

  • 方法2 ethtool [网卡名]
  • Link detected: yes说明网卡连接OK

  • 更改主机名&主机名配置文件
  • 更改后的主机名要在系统重启之后才会显示,或者进入子目录
  • centos6不支持该命令,centos7支持

  • DNS配置文件:/etc/resolv.conf

  • 在 /etc/syscinfig/network-scripts/ifcfg-ens33中定义

  •  更改网卡配置即可更改DNS配置文件,更改后需要重启网卡(ifdown/ifup)后生效,也可编辑‘/etc/resolv.conf’临时更改DNS配置,该办法在重启网卡后会被网卡配置文件中的DNS覆盖!

  • DNS配置文件:/etc/resolv.conf

  • vim  /etc/hosts
  •  使用vi命令可在该配置文件下可以自定义IP所对应的域名(一个IP对应多个域名或一个域名对应多个IP,用空格隔开,当一个域名对应多个IP时,以配置文件中靠后面的配置为准),但是该域名配置只在本机生效!

 

课堂笔记

三次握手小例子:

在红军时代,A连和B连分在左右翼,约定在几时几分一同发起打击。这个几时几分的信息就需要人工通过通讯员来走路传递。所以A连指挥官派出通讯员。

这是第一次。

假设通讯员到达了B连,并且告知了B连指挥官几时几分,B连指挥官一定会让通讯员再回去通知A连指挥官,可怜的通讯员只能冒着危险返回A连,因为A连指挥官看不到通讯员返回的话,不知道几时几分这个信息到底传达到了B连没有。

这是第二次。

现在B连指挥官开始担心通讯员是否回到了A连,如果没回到,B连指挥官会设身处地的想一想A连指挥官见不到返回的通讯员,肯定是不敢打的,所以B连指挥官最盼望的是再次看到通讯员出现在B连,所以A连指挥官会让通讯员再回B连一次。

这是第三次。

这就是三次握手

 

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

第一次挥手:

Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:

Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:

Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

 

 

 

  • CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。
  • LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
  • SYN_RCVD :表示接收到了SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。
  • SYN_SENT :这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
  • ESTABLISHED :表示TCP连接已经成功建立。
  • FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到。
  • FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。
  • TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
  • CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。
  • CLOSE_WAIT :表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。
  • LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。

 

 

 

ip命令使用

1. 设置和删除IP

ip addr add 192.168.10.10/24 dev eth0

ip addr show eth0

ip addr del 192.168.10.10/24 dev eth0

 

2. 路由相关设置

ip route show

ip route add default via 192.168.10.1

ip route add 192.168.5.0/24 dev eth0

ip route del 192.168.10.1

 

另外用route命令来管理路由:

(a)、网络路由

route add -net 192.168.1.0/24 gw 172.16.1.106

(b)、主机路由

route add -host 192.168.1.110 gw 172.16.1.106

(c)、默认路由

route add default gw 172.16.1.106

route add -net 0.0.0.0 gw 172.16.1.106

(d)、删除路由

route del -host 192.168.1.110

route del -net 192.168.1.0/24

3. 显示网络统计数据

ip -s link

ip -s -s link ls eth0

 

3. 停止开启网卡

ip link set eth0 down

ip linke set eth0 up

 

更改网卡名字

ip link set ens37 name eth1

永久保存:https://blog.csdn.net/jyusun/article/details/71513086

 

tcp三次握手四次挥手(重点) http://www.doc88.com/p-9913773324388.html
tshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值