网站宣传的手段有哪些?(写出五种以上),wordpress根据id排序,2022年最新新闻播报稿件,电子商务有哪些工作岗位1、如何了解系统的负载情况#xff1f;
每次发现系统变慢时#xff0c; 我们通常做的第⼀件事#xff0c; 就是执⾏top或者uptime命令#xff0c; 来了解系统的负载情况。 ⽐如像下⾯这样#xff0c; 我在命令⾏⾥输⼊了uptime命令#xff0c; 系统也随即给出了结果。
…1、如何了解系统的负载情况
每次发现系统变慢时 我们通常做的第⼀件事 就是执⾏top或者uptime命令 来了解系统的负载情况。 ⽐如像下⾯这样 我在命令⾏⾥输⼊了uptime命令 系统也随即给出了结果。
$ uptime
02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88它们分别是当前时间、 系统运⾏时间以及正在登录⽤户数。
02:34:03 //当前时间
up 2 days, 20:14 //系统运行时间
1 user //正在登录用户数⽽最后三个数字呢 依次则是过去1分钟、 5分钟、 15分钟的平均负载Load Average 。
2、什么是平均负载
平均负载 这个词对很多⼈来说 可能既熟悉⼜陌⽣ 我们每天的⼯作中 也都会提到这个词 但你真正理解它背后的含义吗
我猜⼀定有⼈会说 平均负载不就是单位时间内的 CPU 使⽤率吗 上⾯的0.63 就代表CPU使⽤率是63%。 其实并不是这样 如果你⽅便的话 可以通过执⾏man uptime命令 来了解平均负载的详细解释。
简单来说 平均负载是指单位时间内 系统处于可运⾏状态和不可中断状态的平均进程数 也就是平均活跃进程数 它不仅包括了****正在使用CPU的进程*还包括了*等待CPU*和*等待I/O****的进程。它和CPU使⽤率并没有直接关系。 这⾥我先解释下 可运⾏状态和不可中断状态这俩词⼉。
所谓可运⾏状态的进程 是指正在使⽤CPU或者正在等待CPU的进程 也就是我们常⽤ps命令看到的 处于R状态Running 或 Runnable 的进程。
不可中断状态的进程则是正处于内核态关键流程中的进程 并且这些流程是不可打断的 ⽐如最常⻅的是等待硬件设备的I/O响应 也就是我们在ps命令中看到的D状态Uninterruptible Sleep 也称为Disk Sleep 的进程。
⽐如 当⼀个进程向磁盘读写数据时 为了保证数据的⼀致性 在得到磁盘回复前 它是不能被其他进程或者中断打断的 这个时候的进程就处于不可中断状态。 如果此时的进程被打断了 就容易出现磁盘数据与进程数据不⼀致的问题。
所以 不可中断状态实际上是系统对进程和硬件设备的⼀种保护机制。
因此 你可以简单理解为 平均负载其实就是平均活跃进程数。 平均活跃进程数 直观上的理解就是单位时间内的活跃进程数 但它实际上是活跃进程数的指数衰减平均值。 这个“指数衰减平均”的详细含义你不⽤计较 这只是系统的⼀种更快速的计算⽅式 你把它直接当成活跃进程数的平均值也没问题。
既然平均的是活跃进程数 那么最理想的 就是每个CPU上都刚好运⾏着⼀个进程 这样每个CPU都得到了充分利⽤。 ⽐如当平均负载为2时 意味着什么呢
l 在只有2个CPU的系统上 意味着所有的CPU都刚好被完全占⽤。
l 在4个CPU的系统上 意味着CPU有50%的空闲。
l ⽽在只有1个CPU的系统中 则意味着有⼀半的进程竞争不到CPU。
3、平均负载为多少时合理
讲完了什么是平均负载 现在我们再回到最开始的例⼦ 不知道你能否判断出 在 uptime 命令的结果⾥ 那三个时间段的平均负载数 多⼤的时候能说明系统负载⾼ 或是多⼩的时候就能说明系统负载很低呢
我们知道 平均负载最理想的情况是等于 CPU个数。 所以在评判平均负载时 ⾸先你要知道系统有⼏个 CPU 这可以通过top 命令或者从⽂件 /proc/cpuinfo 中读取 ⽐如
#关于grep和wc的用法请查询它们的手册或者网络搜索
$ grep model name /proc/cpuinfo | wc -l2
或者lscpu | grep ^CPU:
CPU: 2有了CPU 个数 我们就可以判断出 当平均负载⽐ CPU 个数还⼤的时候 系统已经出现了过载。
不过 且慢 新的问题⼜来了。 我们在例⼦中可以看到 平均负载有三个数值 到底该参考哪⼀个呢
实际上 都要看。 三个不同时间间隔的平均值 其实给我们提供了 分析系统负载趋势的数据来源 让我们能更全⾯、 更⽴体地理解⽬前的负载状况。
打个⽐⽅ 就像初秋时北京的天⽓ 如果只看中午的温度 你可能以为还在7⽉ 份的⼤夏天呢。 但如果你结合了早上、 中午、晚上三个时间点的温度来看 基本就可以全⽅位了解这⼀天的天⽓情况了。
同样的 前⾯说到的CPU的三个负载时间段也是这个道理。
l 如果1分钟、 5分钟、 15分钟的三个值基本相同 或者相差不⼤ 那就说明系统负载很平稳。
l 但如果1分钟的值远⼩于15 分钟的值 就说明系统最近1分钟的负载在减少 ⽽过去15分钟内却有很⼤的负载。
l 反过来 如果1分钟的值远⼤于 15 分钟的值 就说明最近1分钟的负载在增加 这种增加有可能只是临时性的 也有可能还会持续增加下去 所以就需要持续观察。 ⼀旦1分钟的平均负载接近或超过了CPU的个数 就意味着系统正在发⽣过载的问题 这时就得分析调查是哪⾥导致的问题 并要想办法优化了。
这⾥我再举个例⼦ 假设我们在⼀个单 CPU 系统上看到平均负载为 1.73 0.60 7.98 那么说明在过去 1 分钟内 系统有73% 的超载 ⽽在 15 分钟内 有 698% 的超载 从整体趋势来看 系统的负载在降低。
那么 在实际⽣产环境中 平均负载多⾼时 需要我们重点关注呢
在我看来 当平均负载⾼于 CPU 数量70%的时候 你就应该分析排查负载⾼的问题了。 ⼀旦负载过⾼ 就可能导致进程响应变慢 进⽽影响服务的正常功能。
但70%这个数字并不是绝对的 最推荐的⽅法 还是把系统的平均负载监控起来 然后根据更多的历史数据 判断负载的变化趋势。 当发现负载有明显升⾼趋势时 ⽐如说负载翻倍了 你再去做分析和调查。
4、平均负载与CPU使⽤率
现实⼯作中 我们经常容易把平均负载和 CPU 使⽤率混淆 所以在这⾥ 我也做⼀个区分。
可能你会疑惑 既然平均负载代表的是活跃进程数 那平均负载⾼了 不就意味着 CPU 使⽤率⾼吗
我们还是要回到平均负载的含义上来 平均负载是指单位时间内 处于可运⾏状态和不可中断状态的进程数。 所以 它不仅包括了正在使⽤ CPU 的进程 还包括等待 CPU 和等待 I/O 的进程。
⽽ CPU 使⽤率 是单位时间内 CPU 繁忙情况的统计 跟平均负载并不⼀定完全对应。 ⽐如
l CPU 密集型进程 使⽤⼤量 CPU 会导致平均负载升⾼ 此时这两者是⼀致的
l I/O 密集型进程 等待 I/O 也会导致平均负载升⾼ 但 CPU 使⽤率不⼀定很⾼
l ⼤量等待 CPU 的进程调度也会导致平均负载升⾼ 此时的CPU使⽤率也会⽐较⾼。
5、平均负载案例分析
下⾯ 我们以三个示例分别来看这三种情况 并⽤ iostat、 mpstat、 pidstat 等⼯具 找出平均负载升⾼的根源。
因为案例分析都是基于机器上的操作 所以不要只是听听、 看看就够了 最好还是跟着我实际操作⼀下。
*你的准备*
下⾯的案例都是基于 Ubuntu 18.04 当然 同样适⽤于其他 Linux 系统。 我使⽤的案例环境如下所示。
l 机器配置 2 CPU 8GB 内存。
l 预先安装 stress 和 sysstat 包 如 apt install stress sysstat。
在这⾥ 我先简单介绍⼀下 stress 和 sysstat。
stress 是⼀个 Linux 系统压⼒测试⼯具 这⾥我们⽤作异常进程模拟平均负载升⾼的场景。
stress参数说明
-? 显示帮助信息
-v 显示版本号
-q 不显示运行信息
-n--dry-run 显示已经完成的指令执行情况
-t --timeout N 指定运行N秒后停止--backoff N 等待N微妙后开始运行
-c --cpu 产生n个进程 每个进程都反复不停的计算随机数的平方根
-i --io 产生n个进程 每个进程反复调用sync()sync()用于将内存上的内容写到硬盘上
-m --vm n 产生n个进程,每个进程不断调用内存分配malloc和内存释放free函数--vm-bytes B 指定malloc时内存的字节数 (默认256MB)--vm-hang N 指示每个消耗内存的进程在分配到内存后转入休眠状态与正常的无限分配和释放内存的处理相反这有利于模拟只有少量内存的机器
-d --hadd n 产生n个执行write和unlink函数的进程--hadd-bytes B 指定写的字节数默认是1GB--hadd-noclean 不要将写入随机ASCII数据的文件Unlink时间单位可以为秒s分m小时h天d年y文件大小单位可以为KMG⽽ sysstat 包含了常⽤的 Linux 性能⼯具 ⽤来监控和分析系统的性能。 我们的案例会⽤到这个包的两个命令 mpstat 和pidstat。
mpstat 是⼀个常⽤的多核 CPU 性能分析⼯具 ⽤来实时查看每个 CPU 的性能指标 以及所有CPU的平均指标。
pidstat 是⼀个常⽤的进程性能分析⼯具 ⽤来实时查看进程的 CPU、 内存、 I/O 以及上下⽂切换等性能指标。
源码安装sysstat
wget http://sebastien.godard.pagesperso-orange.fr/sysstat-12.1.2.tar.gz
tar -xzf sysstat-12.1.2.tar.gz
cd sysstat-12.1.2/
./configure
make
make install
碰到缺乏某个软件的依赖包则使用apt安装即可。常用的参数 -u默认的参数显示各个进程的cpu使用统计 -r显示各个进程的内存使用统计 -d显示各个进程的IO使用情况 -p指定进程号 -w显示每个进程的上下文切换情况 -t显示选择任务的线程的统计信息外的额外信息 -T { TASK | CHILD | ALL } 这个选项指定了pidstat监控的。TASK表示报告独立的taskCHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。 注意task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔这些统计信息只有在子线程kill或者完成的时候才会被收集。 -V版本号 -h在一行上显示了所有活动这样其他程序可以容易解析。 -I在SMP环境表示任务的CPU使用率/内核数量 -l显示命令名和所有参数
此外 每个场景都需要你开三个终端 登录到同⼀台 Linux 机器中。
另外要注意 下⾯的所有命令 我们都是默认以 root ⽤户运⾏。 所以 如果你是⽤普通⽤户登陆的系统 ⼀定要先运⾏ sudo su root 命令切换到 root ⽤户。
如果上⾯的要求都已经完成了 你可以先⽤ uptime 命令 看⼀下测试前的平均负载情况
$ uptime
..., load average: 0.11, 0.15, 0.09*场景⼀ CPU 密集型进程*
⾸先 我们在第⼀个终端运⾏ stress 命令 模拟⼀个 CPU 使⽤率 100% 的场景
$ stress --cpu 1 --timeout 600接着 在第⼆个终端运⾏uptime查看平均负载的变化情况
#-d 参数表示高亮显示变化的区域
$ watch -d uptime
..., load average: 1.00, 0.75, 0.39最后 在第三个终端运⾏mpstat查看 CPU 使⽤率的变化情况
#-P ALL 表示监控所有CPU后面数字5表示间隔5秒后输出一组数据
$ mpstat -P ALL 5
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:30:06 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:30:11 all 50.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 49.95
13:30:11 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
13:30:11 1 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00从终端⼆中可以看到 1 分钟的平均负载会慢慢增加到 1.00 ⽽从终端三中还可以看到 正好有⼀个 CPU 的使⽤率为100% 但它的 iowait 只有 0。 这说明 平均负载的升⾼正是由于 CPU 使⽤率为 100% 。
那么 到底是哪个进程导致了 CPU 使⽤率为 100% 呢 你可以使⽤ pidstat 来查询
#间隔5秒后输出一组数据
$ pidstat -u 5 1
13:37:07 UID PID %usr %system %guest %wait %CPU CPU Command
13:37:12 0 2962 100.00 0.00 0.00 0.00 100.00 1 stress从这⾥可以明显看到 stress进程的CPU使⽤率为100%。
*场景⼆ I/O 密集型进程*
⾸先还是运⾏ stress 命令 但这次模拟 I/O 压⼒ 即不停地执⾏ sync
$ stress -i 1 --timeout 600还是在第⼆个终端运⾏uptime查看平均负载的变化情况
$ watch -d uptime
..., load average: 1.06, 0.58, 0.37然后 第三个终端运⾏mpstat查看 CPU 使⽤率的变化情况
#显示所有CPU的指标并在间隔5秒输出一组数据
$ mpstat -P ALL 5 1
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:41:28 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
13:41:33 all 0.21 0.00 12.07 32.67 0.00 0.21 0.00 0.00 0.00 54.84
13:41:33 0 0.43 0.00 23.87 67.53 0.00 0.43 0.00 0.00 0.00 7.74
13:41:33 1 0.00 0.00 0.81 0.20 0.00 0.00 0.00 0.00 0.00 98.99从这⾥可以看到 1 分钟的平均负载会慢慢增加到 1.06 其中⼀个 CPU 的系统CPU使⽤率升⾼到了 23.87 ⽽ iowait ⾼达67.53%。 这说明 平均负载的升⾼是由于 iowait 的升⾼。
那么到底是哪个进程 导致 iowait 这么⾼呢 我们还是⽤ pidstat 来查询
#间隔5秒后输出一组数据-u表示CPU指标
$ pidstat -u 5 1
Linux 4.15.0 (ubuntu) 09/22/18 _x86_64_ (2 CPU)
13:42:08 UID PID %usr %system %guest %wait %CPU CPU Command
13:42:13 0 104 0.00 3.39 0.00 0.00 3.39 1 kworker/1:1H
13:42:13 0 109 0.00 0.40 0.00 0.00 0.40 0 kworker/0:1H
13:42:13 0 2997 2.00 35.53 0.00 3.99 37.52 1 stress
13:42:13 0 3057 0.00 0.40 0.00 0.00 0.40 0 pidstat可以发现 还是 stress 进程导致的。
*场景三 ⼤量进程的场景*
当系统中运⾏进程超出 CPU 运⾏能⼒时 就会出现等待 CPU 的进程。
⽐如 我们还是使⽤ stress 但这次模拟的是 8 个进程
$ stress -c 8 --timeout 600由于系统只有 2 个CPU 明显⽐ 8 个进程要少得多 因⽽ 系统的 CPU 处于严重过载状态 平均负载⾼达7.97
$ uptime
..., load average: 7.97, 5.93, 3.02接着再运⾏pidstat来看⼀下进程的情况
#间隔5秒后输出一组数据
$ pidstat -u 5 1
14:23:25 UID PID %usr %system %guest %wait %CPU CPU Command
14:23:30 0 3190 25.00 0.00 0.00 74.80 25.00 0 stress
14:23:30 0 3191 25.00 0.00 0.00 75.20 25.00 0 stress
14:23:30 0 3192 25.00 0.00 0.00 74.80 25.00 1 stress
14:23:30 0 3193 25.00 0.00 0.00 75.00 25.00 1 stress
14:23:30 0 3194 24.80 0.00 0.00 74.60 24.80 0 stress
14:23:30 0 3195 24.80 0.00 0.00 75.00 24.80 0 stress
14:23:30 0 3196 24.80 0.00 0.00 74.60 24.80 1 stress
14:23:30 0 3197 24.80 0.00 0.00 74.80 24.80 1 stress
14:23:30 0 3200 0.00 0.20 0.00 0.20 0.20 0 pidstat可以看出 8 个进程在争抢 2 个 CPU 每个进程等待 CPU 的时间也就是代码块中的 %wait 列 ⾼达 75%。 这些超出 CPU计算能⼒的进程 最终导致 CPU 过载。
6、⼩结
分析完这三个案例 我再来归纳⼀下平均负载的理解。
平均负载提供了⼀个快速查看系统整体性能的⼿段 反映了整体的负载情况。 但只看平均负载本身 我们并不能直接发现 到底是哪⾥出现了瓶颈。 所以 在理解平均负载时 也要注意
平均负载⾼有可能是 CPU 密集型进程导致的平均负载⾼并不⼀定代表 CPU 使⽤率⾼ 还有可能是 I/O 更繁忙了当发现负载⾼的时候 你可以使⽤ mpstat、 pidstat 等⼯具 辅助分析负载的来源。