设为首页 收藏本站
查看: 432|回复: 0

[经验分享] Unix/Linux 的 Load问题

[复制链接]

尚未签到

发表于 2016-2-1 09:09:04 | 显示全部楼层 |阅读模式
  
原文网址: http://www.dbanotes.net/arch/unix_linux_load.html




  几乎每个接触类 Unix 操作系统的工程师都知道如何查看系统负载。但这东西的工作机理到底是怎样的,可能没有多少能说清楚。对比了一些相关信息,加上自己的理解,做一下笔记。

什么是 Load ? 什么是 Load Average ?
  Load 就是对计算机干活多少的度量(WikiPedia
: the system load is a measure of the amount of work that a computer system is doing)。也有简单的说是进程队列的长度. Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。【最好的参考文章:UNIX® Load Average Part 1: How It Works

  下面是一个 uptime 命令输出:

$ uptime

18:57:48 up 423 days,  3:55,  2 users,  load average: 1.16, 1.12, 1.20
  尽管各种信息来源的定义都不太确定。能确定的一件事情是,你不能精确获取当前时间的 Load .  最小的计算粒度是 5 秒钟(CALC_LOAD 每 5HZ 计算一次
, 5HZ  为 5秒钟,这里的 HZ 是系统定义的变量). 参见 Linux Kernel 这段代码
:


869        count -= ticks;

870        if (unlikely(count < 0)) {

871                active_tasks = count_active_tasks();

872                do {

873                        CALC_LOAD(avenrun[0], EXP_1, active_tasks);

874                        CALC_LOAD(avenrun[1], EXP_5, active_tasks);

875                        CALC_LOAD(avenrun[2], EXP_15, active_tasks);

876                        count += LOAD_FREQ;

877                } while (count < 0);

878        }

879}

如何判断系统是否已经 Over Load ?

  对一般的系统来说,根据 CPU
数量去判断,如上面的例子, 如果平均负载始终在 1.2  以下,而你是 2 颗 CPU
的机器。那么基本不会出现 CPU
不够用的情况。也就是 Load 平均要小于 CPU
的数量。

  这是  Solaris 性能与工具(Solaris Performance Tools ) 一书推荐的评估方法。【在这里要推荐一下这本书,尽管在 Load 这个地方没有达到我期望的那么细致。但全书揭示了非常多的性能信息。每个 DBA、架构师 的必须书。】

  这么说实际上带来另外两个疑问:

  1 、如果是多核 CPU
/ 超线程的机器怎么判断?

对这样的机器,我的建议是看操作系统怎么识别的 CPU,根据系统识别出来的逻辑 CPU
数量来判断。如果要考虑性能系数,建议参考一下 Oracle 针对不同架构下多核 CPU
的收费标准。

  2 、如果应用是面向线程的怎么判断?
这实际上和 M:N 线程
模型有关。你的系统是怎样的? 把这个问题考虑进去即可了。

  多数情况下,Load 过高都未必和 CPU
有关。或许倒是有一个例外的,就是应用场景< >的问题。比如用单 CPU
的机器去做高并发 Web 服务器,麻烦就来了


Load 与容量规划(Capacity Planning)

  任何一个相对成熟的站点都会利用 Cacti(基于RRDTool) 等工具进行容量规划工作。抓取的 Load 会传 1、5、15  分钟列值过去,这三个度量采用哪个呢? 15 分钟为首选【参见Gunther 的 PPT
】。


Load 与系统预警

  很多对可用性要求比较高的环境都建立了 邮件或SMS 报警机制。关于 Load 报警阈值的制定也有看到不太合理的时候。这里建议 Critical 值(如果用 Nagios 之类的工具你明白这是什么)上限为 物理 CPU
的个数(当然你可以设置比这个低)。但比这个值高的话,意义就不大了。比如,数据库服务器有 4 颗 CPU,那么 Load 高于 4 就应该报警出来,设置比 4 高可能意义不大,因为接到报警还有个人为响应时间...


误解 一:系统 Load 高一定是性能有问题。


真相:系统 Load 高也或许是因为在进行 CPU
密集型的计算(比如编译)





误解 二:系统 Load 高一定是 CPU
能力问题或数量不够。

  真相:Load 高只是代表需要运行的队列累积过多了。但队列中的任务实际可能是耗 CPU的,也可能是耗 I/O 乃至其它因素的。


误解 三:系统长期 Load 高,首选增加 CPU。

  真相:Load 只是表象,不是实质。增加 CPU
个别时候会临时看到系统 Load 下降,但治标不治本。

  小小一个 Load 讲究其实不少。英文信息其实比较全的,尽量保证加入一点新信息到这篇文章里。入看到有写的不合理的地方或者有异议,请指正或告知。

  --EOF
--



FAQ

1:数据库服务器突然 CPU
100% 繁忙,咋办?

  一般情况下,这是由糟糕的 SQL
引起。建议抓取 Slow Query Log
,针对 I/O 开销比较大(重点看全表扫描)的 SQL
进行优化。根据经验值,每个 CPU
Core 一秒钟能处理 100-400MB 数据量。如果是大量的并发 I/O 操作,尽管存储的吞吐可能还没那么大,也可能会把 CPU
"塞满"。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-172118-1-1.html 上篇帖子: linux 常用命令 全拼 下篇帖子: linux 调试工具总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表