`
yanghuidang
  • 浏览: 950680 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Unix/Linux 的 Load 初级解释

阅读更多

几乎每个接触类 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秒钟). 参见 Linux Kernel 这段代码:

 869        count -= ticks;
 870        if (unlikely(count  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 讲究其实不少。英文信息其实比较全的,尽量保证加入一点新信息到这篇文章里。入看到有写的不合理的地方或者有异议,请指正或告知。

分享到:
评论

相关推荐

    Understanding Unix/Linux Programming

    《理解Unix/Linux编程》这本书是Unix/Linux编程领域的经典之作,旨在帮助读者深入理解这两个操作系统的核心原理和编程技术。书中的内容不仅涵盖了基础的系统调用、文件操作,还包括进程管理、网络编程等高级主题,是...

    Systems Programming in Unix/Linux 1st Edition

    Covering all the essential components of Unix/Linux, including process management, concurrent programming, timer and time service, file systems and network programming, this textbook emphasizes ...

    操作系统接口:兼容Unix/Linux命令接口

    操作系统接口:兼容Unix/Linux命令接口。 为Windows操作系统建立一个兼容Unix命令的命令接口;实现命令包括ls,cat,cp,mv,md/mkdir,rd/rmdir,cd,sort,more,print,命令的内容与详细格式请查阅unix命令手册;可以字符...

    Unix/Linux 编程实践 附录光盘

    在Unix/Linux环境中进行编程是一项需要深入理解操作系统内核、文件系统、网络通信、进程管理等多方面知识的任务。"Unix/Linux 编程实践 附录光盘"包含了丰富的资源,帮助用户深入掌握这一领域的核心技能。 光盘说明...

    Unix-Linux编程实践教程(中文清晰带书签).pdf

    这本书涵盖了从基本的命令行操作到复杂的系统调用和库函数的使用,是学习Unix/Linux编程的宝贵资源。 在Unix和Linux操作系统中,编程主要涉及以下几个核心知识点: 1. **命令行接口**:Unix/Linux操作系统以命令行...

    Unix/Linux Shell编程(完整版)权威发布

    《Unix/Linux Shell编程(完整版)权威发布》是一本深入探讨Unix/Linux环境下Shell编程的教程,旨在帮助读者全面掌握Shell脚本的编写技巧和实践应用。对于那些希望提升系统管理效率,或者对自动化任务处理感兴趣的...

    Unix/linux进程池管理

    在Unix/Linux系统中,进程池(Process Pool)是一种高效的进程管理机制,广泛应用于服务器和后台服务,例如银行系统。进程池的基本思想是预先创建一组进程,这些进程在池中待命,等待处理到来的任务,而不是每次有新...

    UNIX/Linux 系统管理技术手册(第四版)

    ### UNIX/Linux系统管理技术手册(第四版)知识点总结 #### 一、书籍概述 《UNIX/Linux系统管理技术手册(第四版)》(简称ULAHv4)是Evi Nemeth等作者共同编著的一本权威指南,旨在为读者提供全面且深入的UNIX/Linux...

    Unix/linux 挂载 usb 移动硬盘 命令 dvd

    Unix/Linux 挂载 USB 移动硬盘命令 DVD Unix/Linux 操作系统中,挂载(mount)命令是非常重要的,使用该命令可以将各种外部设备连接到系统中,使用户能够访问这些设备中的数据。下面将详细介绍如何在 Unix/Linux ...

    UNIX/Linux 系统管理技术手册(第四版) 英文版

    1. UNIX和Linux系统管理:本书名为《UNIX/Linux 系统管理技术手册(第四版) 英文版》,它专注于UNIX和Linux系统的管理技术。这表明书中涵盖了系统管理的基本概念和高级技术,适用于希望深入理解UNIX和Linux系统的管理...

    Unix/Linux编程实践教程CD

    《Unix/Linux编程实践教程》是一本深入探讨Unix/Linux操作系统编程的实用教材,旨在帮助学习者通过实践提升在这些系统上的编程技能。CD中包含了丰富的学习资源,如PPT课件和编程示例代码,尽管没有提供习题解答,但...

    Unix/Linux Utils for Windows Environment

    标题中的"Unix/Linux Utils for Windows Environment" 指的是一系列专门为Windows操作系统设计的Unix/Linux命令行工具。这些工具使得Windows用户能够在不离开Windows环境的情况下,享受到Unix/Linux系统中的便捷...

    unix/linux编程实践教程part1 pdf版

    unix/linux编程实践教程(中文)&lt;br/&gt;Bruce Molay著 &lt;br/&gt;pdf版共3个part &lt;br/&gt;

    UNIX/Linux编程实践教程

    《Unix\Linux编程实践教程》通过解释Unix的工作原理,循序渐进地讲解实现Unix中系统命令的方法,让读者理解并逐步精通Unix系统编程,进而具有编制Unix应用程序的能力。书中采用启发式、举一反三、图示讲解等多种方法...

    Understanding unix/linux programming源代码

    《理解Unix/Linux编程源代码》是Bruce Molay撰写的一本实战型教程,旨在帮助读者深入理解和掌握Unix/Linux系统下的编程技巧。这本书通过丰富的实例和源代码解析,将复杂的系统编程概念化,使得初学者和有经验的...

    Unix/Linux和Windows图形应用程序

    标题中的“Unix/Linux和Windows图形应用程序”涉及到的是在不同操作系统之间进行图形用户界面(GUI)交互的技术。在传统的操作系统环境中,Unix和Linux系统通常依赖于X Window System(简称X11或X)来提供GUI服务,...

    近期UNIX/Linux漏洞.pdf

    "近期UNIX/Linux漏洞" 近期UNIX/Linux漏洞是指在UNIX/Linux操作系统中存在的安全漏洞,这些漏洞可能被黑客利用,危及系统的安全性。本文将对近期的一些UNIX/Linux漏洞进行总结和分析。 1. HP-UX Ignite—UX...

    Unix/Linux 聊天室程序

    在本课程中,我们将深入探讨如何在Unix/Linux操作系统环境下开发一个聊天室程序。"Unix/Linux 聊天室程序"这个项目旨在让学生掌握Unix/Linux系统编程的基础知识,特别是网络编程和多线程技术,这对于任何想要在...

    中南大学 UNIX/Linux课件

    【中南大学 UNIX/Linux 课件】是一套全面介绍UNIX/Linux操作系统的教学资源,适合初学者作为入门学习的材料。UNIX系统是最早流行的多用户、多任务操作系统之一,而Linux则是其开源版本,两者在很多方面有着共通之处...

Global site tag (gtag.js) - Google Analytics