Linux性能优化学习笔记1

运维入门的时候,掌握的其中两个命令是top、uptime。

这两个命令在某一个点其实是一样的,就是对于cpu平均负载这个点上。如下图所示

这两个命令得到的load average(平均负载)是一样的。这里一共有三个数值。分别代表了cpu在1分钟、5分钟、15分钟的平均负载。 通过观察这里。我们可以以三个时间段cpu的平均负载情况来判断。服务器的cpu平均负载的趋势。

1、假设服务器是有2个核心的cpu,那么怎么样才算是一个较为合理的平均负载呢。一般来说,我们都是已达到70%的数值来判断是较为合理的,当然了这个数值不是绝对的,在不同的场景可以有不同的判断,但最为粗暴。我们理论上来说,平均负载是2,就是实现cpu核心处理刚刚好,1.4是较为合理的状态。

2、cpu平均负载≠cpu利用率,两者有着很大的区别。其中影响到cpu平均负载的,我能了解到的有正在使用cpu的进程、正在等待cpu的进程、IO进程,这些都会影响到cpu的平均负载,所以不能单纯的就直接判断cpu平均负载等于cpu利用率。

在这里我们使用到2个工具,stress、sysstat

stress是专业的cpu压力测试模拟工具,例如

stress --cpu 1 --timeout 600 # 打满1个cpu,运行600秒

stress -i 1 --timeout 600 $ 模拟IO

watch -d uptime # 查看uptime负载均衡情况,默认2秒刷新一次

mpstat -P ALL 5 # 查看cpu的使用详细情况5次

pidstat -u 5 1 # 查看cpu使用最大的5个进程情况,打印1次

通过各种组合,我们可以发现cpu的平均负载,是一个综合情况来的。可以结合专业的工具进行排查,找到正常的原因。

cpu上下文

cpu里面有两个概念,分别是寄存器和计时器。一个是负责记录cpu切换上下文的记录的。计数器没晓得是干啥的。

cpu切换上下文,说白了就是为了确保任务看起来,并且确保任务的连续性,同时性的。

cpu切换上下文,从位置来分,可以分为用户态和内核态。用户态无法直接访问底层的资源,而内核态可以。举个例子。用户有个命令让cpu去执行。顺序应该是用户指令(用户态)---调用器---cpu记录执行中指令的记录、下一个待执行指令的记录---执行完毕后更新记录---调用器---用户态

从使用方式来说,分为线程上下文切换、进程上下文切换、中断上下文切换

最高优先级是中断(内核态)

较优的是线程(资源共享)

常见的是进程(资源不共享)

但过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值