Linux相关知识练习02

拥有回忆 提交于 2020-01-01 01:21:08

Linux相关知识练习
每日几题

1.命令

iostat 的各项指标的含义,哪些项体现iops ,哪些体现吞吐量,await 和svctm两项数据差别大(当await 远大于svctm)说明什么问题?当%util接近或大于100%,说明什么?
假如我的机器有很多磁盘分区,要求只监控其中某一个比如sda,每秒采集一次,并打印时间,共采集一分钟。

iostat用于输出CPU和磁盘I/O相关的统计信息。
用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]

常用选项说明:

-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出

iostat,结果为从系统开机到当前执行时刻的统计信息
在这里插入图片描述
avg-cpu: 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值。重点关注iowait值,表示CPU用于等待io请求的完成时间。

iostat -c    #只显示cpu统计信息,即单独输出avg-cpu结果,不包括device结果

在这里插入图片描述

iostat -c 1    #只显示cpu使用情况统计,并且每隔1秒输出一次到终端
按 Ctrl+c停止显示

在这里插入图片描述
iostat -d:单独输出Device结果,不包括cpu结果
在这里插入图片描述

Device: 各磁盘设备的IO统计信息。各列含义如下:

Device: 以sdX形式显示的设备名称
tps: 每秒进程下发的IO读、写请求数量
KB_read/s: 每秒从驱动器读入的数据量,单位为K。
KB_wrtn/s: 每秒从驱动器写入的数据量,单位为K。
KB_read: 读入数据总量,单位为K。
KB_wrtn: 写入数据总量,单位为K。

iostat -x -k -d 1 3。每隔1S输出磁盘IO的详细信息,总共采样3次。
在这里插入图片描述
以上各列的含义如下:

rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率

重点关注参数:

1. iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。

2. avgqu-sz 表示磁盘IO队列长度,即IO等待个数。

3. await 表示每次IO请求等待时间,包括等待时间和处理时间。

4. svctm 表示每次IO请求处理的时间.

5. %util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态。
IOPS (Input/Output Per Second)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。 

*随机*读写频繁的应用,如小文件存储(图片)、OLTP数据库、邮件服务器,关注随机读写性能,IOPS是关键衡量指标。 

*顺序*读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播VOD(Video On Demand),关注连续读写性能。数据吞吐量是关键衡量指标。

await 参数代表平均每次设备I/O操作的等待时间 (毫秒), 也要多和 svctm 来参考。差的过高就一定有 IO 的问题。
如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;
如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢。
如果%util接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

题目:假如我的机器有很多磁盘分区,要求只监控其中某一个比如sda,每秒采集一次,并打印时间,共采集一分钟。
使用命令 iostat -tx 1 sda即可,按Ctrl+c停止输出到屏幕,1表示每隔一秒显示一次。
在这里插入图片描述

2.三剑客

使用grep处理上一篇博文中的top. log,现在需要第一行到第三行,同时只需要所有root用户的进程信息,并且我想保留进程项标题(就是PID USER PR那行)。用一条grep命令实现。

在这里插入图片描述
在这里插入图片描述

3.概念了解

什么叫容器?容器和虚拟机有什么不同?容器有什么特点,解决了哪些问题?了解docker和k8s特点,架构,使用场景等。

容器中运行的就是一个或者多个应用程序,以及应用运行所需要的环境。容器直接运行在操作系统内核之上的用户空间。容器技术可以让多个独立的用户空间运行在同一台宿主机上。容器既可以运行在物理机也可以运行在虚拟机上,当然也可以运行在公有云主机上。
简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为容器镜像的包中。通过将应用程序本身,和其依赖容器化,操作系统发行版本和其他基础环境造成的差异,都被抽象掉了。
Docker的大部分操作都围绕着它的三大核心概念——镜像、容器和仓库而展开。

虚拟化和容器有什么不同?
    容器和虚拟机具有相似的资源隔离和分配优势,但功能不同,因为容器虚拟化操作系统而不是硬件。容器更便携和高效。
    容器是应用程序层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为孤立进程运行。容器占用的空间少于虚拟机(容器映像的大小通常为几十MB),并且几乎立即启动。 
    虚拟机(VM)是将一台服务器变成多台服务器的物理硬件的抽象。管理程序允许多台虚拟机在单台机器上运行。每个VM都包含一个操作系统的完整副本,一个或多个应用程序,必需的二进制文件和库 - 占用数十GBVM也可能启动缓慢。
    使用虚拟化技术时,可以被分发的文件包是一台虚拟机,它包含了整个操作系统和应用。一台运行着三个虚拟机的物理服务器,需要有一个管理虚拟机软件的中间层,以及运行在这个中间层之上的三个独立操作系统。

容器的特点:
    相较之下,一台运行着三个容器应用的服务器,只需要一个操作系统,而每个容器都可以和别的容器共享同一个操作系统内核。操作系统中被容器共享的部分是只读的,如果需要写入,每个容器都可以挂载独立的服务。这也就是说,容器比虚拟机要轻量级很多,它消耗的资源相较于虚拟机也少得多。
    除了上文提到的更轻量、资源消耗更少外,一个容器的文件大小可能只有几十M,但是一个拥有完整操作系统的虚拟机却可能是几个G。正因为这一点,对于一个独立服务器来说,它能承载的容器的数量比虚拟机的数量多得多。
容器的第二个优点体现在了启动速度上,虚拟机可能要花费好几分钟,而容器几乎能瞬间完成。
    另一个主要的优点是,虚拟机可能要耗费好几分钟的时间,才能启动操作系统、开始运行应用;然而容器中应用的启动几乎可以瞬间完成。这意味着,如果需要部署更多的容器,它们的实例化可以很快完成;如果不需要这些容器了,也可以很快将它们从宿主服务器上释放掉。
   容器的第三个优点体现在模块化上,使用容器可以实现更好的模块化。
   容器化更好地顾及到了模块化。一个复杂的应用可以被细分成小的模块(比如数据库、应用前端等等),而不是将它运行在某一个容器中。这种方式通常被称为“微服务”。
   使用这种方法构建的应用更容易被管理,因为每个模块都相对简单,而且需要更新某些模块时,不需要重新构建整个应用。因为容器非常轻量级,单独模块(或微服务)只有在它们被需要时才会被实例化,然后几乎瞬间就变得可用了。

Docker容器的特点 
1.轻量级 
在一台机器上运行的Docker容器共享该机器的操作系统内核; 他们立即开始并使用更少的计算和内存。图像由文件系统层构建并共享公用文件。这最大限度地减少了磁盘使用量,图像下载速度更快。 
2.标准 
Docker容器基于开放标准,可在所有主要Linux发行版,Microsoft Windows以及任何基础架构(包括虚拟机,裸机和云中)上运行。 
3.安全 
Docker容器将应用程序彼此隔离并从底层基础架构中分离出来。Docker提供了最强大的默认隔离功能,可以将应用程序问题限制在一个容器中,而不是整个机器上。

在这里插入图片描述

  • 虚拟机和容器有不同的应用场景:
    虚拟机技术是对不同的用户进行隔离;
    容器技术是对不同的应用进行隔离。

Docker的组成:
Docker是一个C/S架构的程序,Docker的客户端只需向Dosker的守护进程发出请求,守护进程将完成所有工作并返回结果,Docker的守护进程有时又称为Docker引擎。
镜像:镜像是构建Docker世界的基石,用户基于镜像来运行自己的容器,镜像是一种层次的文件结构,由一系列的指令一步一步构建出来。
容器:容器是基于镜像启动起来的,我们的应用就是在容器中运行的,容器不直接和操作系统进行交互,通过Docker守护进程来进行,通过这种方式来保证容器的隔离性。
仓库:由于构建镜像,仓库分为两种:公有的和私有的,Docker公司运营的公有仓库叫Dcoker Hub,用户在Docker Hub上保存自己的私有镜像,甚至可以架设自己的私有仓库。

k8s是一个docker容器管理工具
k8s的应用场景

k8s最适合跑微服务架构
k8s的核心功能

自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。

弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量

服务的自动发现和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。

滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。 

一个K8S系统,通常称为一个K8S集群(Cluster)。

这个集群主要包括两个部分:

一个Master节点(主节点)

一群Node节点(计算节点)

Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
首先是Master节点。
Master节点包括API Server、Scheduler、Controller manager、etc。

API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。

Scheduler负责对集群内部的资源进行调度,相当于“调度室”。

Controller manager负责管理控制器,相当于“大总管”。

然后是Node节点。

Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。

Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。除了Pod之外,K8S还有一个Service的概念,一个Service可以看作一组提供相同服务的Pod的对外访问接口。

Docker是创建容器的。

Kubelet主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。

Kube-proxy主要负责为Pod对象提供代理。

Fluentd主要负责日志收集、存储与查询。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!