`
xander
  • 浏览: 15892 次
  • 性别: 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秒钟,这里的 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 "塞满"。

分享到:
评论

相关推荐

    unix/linux loadagv的原理详解

    在Unix和Linux操作系统中,Load Average是一个非常关键的性能指标,它用来衡量系统在特定时间段内的平均负载。本文将深入探讨Load Average的工作原理,并解析其计算方式,帮助你更好地理解和利用这一信息。 **1. ...

    Collat​​eral Missing Value Estimation -- Unix/Linux Compatible Version:Collat​​eral Missing Value Estimation 软件可用于估计关联中的缺失值-matlab开发

    该工具箱与 Unix/Linux 兼容。 Windows 兼容版本可以从以下位置下载: www.gscit.monash.edu.au/~shoaib/cmve.html 或者...

    cpu-monitoring-scripts.rar_VHDL/FPGA/Verilog_Unix_Linux_

    2. "load-warning.sh":这应该是一个Unix/Linux shell脚本,当系统负载超过预设阈值时,它可能会发送警告通知,帮助用户及时采取措施。 3. "cpu-warning.sh":类似"load-warning.sh",这个脚本可能是针对CPU使用率...

    reipl.rar_Linux/Unix编程_Unix_Linux_

    在IT领域,Linux/Unix编程是开发者们必备的技能之一,尤其对于系统级程序员和管理员而言,理解并熟练掌握Unix/Linux系统的工作原理至关重要。本文将深入探讨标题"reipl.rar_Linux/Unix编程_Unix_Linux_"所涉及的...

    Linux下安装LoadRunner.docx

    本文将指导您在Linux系统下安装LoadRunner(LoadGenerator),从安装包的处理到添加用户和环境变量、检查运行环境、启动服务等步骤进行详细的讲解。 1. 安装包的处理 首先,需要挂载ISO文件,使用mkdir -p /mnt/...

    Linux下使用LoadRunner

    在Linux环境下部署LoadRunner LoadGenerator,主要用于集群的压力测试。整个过程包括安装准备、安装步骤、环境配置和后期验证等环节。 ##### 1. 安装包处理 - 创建安装路径:`mkdir –p /mnt/loadrunner` - 挂载...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    全志R16平台编译linux系统V1.0.txt 2017/4/11 13:36 (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!!!) rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar...

    GCT.RAR_单片机开发_Unix_Linux_

    标题"GCT.RAR_单片机开发_Unix_Linux_"暗示了这个压缩包包含的资源主要涉及单片机开发,并且与Unix或Linux操作系统环境有关。描述中的"使用内置EDID数据集或通过固件接口加载"是显示系统中处理显示器电子设备定义...

    UNIX Load Average Part 3 and addendum

    Load Average的计算涉及到系统的调度算法,比如Linux中的 Completely Fair Scheduler (CFS)。这些算法确保所有进程都能得到公平的CPU时间,而Load Average则是衡量这种公平分配效果的一个度量。 了解Load Average的...

    LInux Unix Windows 实验室服务器批量管理操作监控软件

    显示不同的操作界面,有分组管理,可以有效分类的对服务器,工作站,进行分实验室,分组管理,Unix linux服务器远程批量操作模式,批量操作模式 可以多线程操控Unix,Linux,服务器执行命令,获 取状态,输出命令执行...

    general_cluster.rar_Linux/Unix编程_Unix_Linux_

    在IT领域,Linux/Unix操作系统是开发者和系统管理员的重要工具,尤其在服务器和集群计算方面。"general_cluster.rar"这个压缩包文件似乎包含了与Linux/Unix集群编程相关的资源,特别是关于"Unix_Linux"的内容。从...

    Mysqld配置选项详细介绍

    * socket = filename:为 MySQL 客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于 UNIX/Linux 系统)。 语言设置 * character-sets-server = name:新数据库或数据表的默认字符集。 * collation-...

    史上图形最简单Linux-Unix-Windows批量管理服务器软件工具

    史上图形最简单Linux-Unix-Windows批量管理服务器软件工具 Windows 下 批量管理,批量监控,批量操作,批量安全扫描 linux Solaris Aix HP-Unix Windows 等操作系统界面最简洁的图形工具。 批量执行多台服务器...

    史上图形最简单Linux-Unix批量管理服务器软件工具

    Windows 下 批量管理,批量监控,批量操作,批量安全扫描 linux Solaris Aix HP-Unix Windows 等操作系统界面最简洁的图形工具。 批量执行多台服务器命令,批量修改密码,批量执行服务器脚本,批量上传文件,解放你...

    linux下mysql配置文件my.cnf详解

    * skip-networking: 只允许通过一个套接字文件(Unix/Linux 系统)或通过命名管道(Windows 系统)进行本地连接,不允许 ICP/IP 连接。 * user: 指定 Mysql 服务器在启动后将在给定 UNIX/Linux 账户下执行。 内存管理、...

    grumain.rar_驱动编程_Unix_Linux_

    描述中提到的"SN Platform GRU Driver"和"DRIVER TABLE MANAGER + GRU CONTEXT LOAD/UNLOAD"则涉及到具体的驱动组件和功能。 首先,"GRU"通常是指通用资源单元,它可能是一个抽象的概念,用于处理特定任务或管理...

    linux下mysql配置文件my.pdf

    5. **socket=filename**:设定MySQL客户端与服务器之间本地通信的套接字文件,Unix/Linux环境下通常是`/var/lib/mysql/mysql.sock`,Windows环境下则是命名管道。 6. **lower_case_table_names=1/0**:设置表名是否...

    有关往年百度笔试真题.pdf

    【描述】: 该文件包含了历年百度公司笔试环节的一些问题,涉及的知识点主要集中在计算机系统、Unix/Linux操作系统、网络编程、算法与程序设计以及系统设计等方面。 【标签】: 百度 教育/考试 cs 【部分内容】: 从...

    windows界面下批量操作,监控管理上万台Linux Unix 服务器

    Windows 下 批量管理,批量监控,批量操作,批量安全扫描 linux Solaris Aix HP-Unix Windows 等操作系统界面最简洁的图形工具。 批量执行多台服务器命令,批量修改密码,批量执行服务器脚本,批量上传文件,解放...

    dataload.zip

    3. Shell脚本:在Unix/Linux环境中,Shell脚本用于自动化执行一系列命令,包括数据文件的预处理、数据加载和后期清理工作。通过组合使用这些脚本,用户可以构建一个完整的数据加载流程,实现从数据源到Oracle EBS的...

Global site tag (gtag.js) - Google Analytics