`
xylong
  • 浏览: 190896 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

cpu 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% 繁忙,咋办?


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


读文初技术博客摘自
http://www.cnblogs.com/realviv/articles/1883679.html
分享到:
评论

相关推荐

    项目压力测试文件(cpuload)

    在这个名为“项目压力测试文件(cpuload)”的压缩包中,我们可以看到一系列与Amazon Web Services(AWS)相关的PHP脚本,这些脚本很可能是为了模拟和监控CPU负载情况而设计的。以下是对这些文件及其可能代表的知识...

    32位高性能嵌入式CPU中Load Aligner模块的设计与实现.pdf

    【32位高性能嵌入式CPU的Load Aligner模块】是CPU设计中的关键组件,它位于数据高速缓存(DCACHE)和数据通道之间。Load Aligner的主要职责是处理从DCACHE读取的数据,对数据进行重排和扩展,以便它们能够正确地进入...

    嵌入式系统/ARM技术中的32位高性能嵌入式CPU中Load Aligner 模块的设计与实现

    在嵌入式系统和ARM技术领域,32位高性能嵌入式CPU的设计至关重要,而Load Aligner模块则是其中的关键组成部分。Load Aligner的作用在于优化数据从内存到CPU寄存器的传输过程,以提高系统的整体性能。在MIPS4KC处理器...

    一款通用CPU中的Load Aligner数据通道的全定制设计.pdf

    本文详细描述了一款通用CPU中Load Aligner数据通道的全定制设计,涵盖了从逻辑设计到电路设计再到版图设计的整个过程,展示了在深亚微米工艺下解决高性能CPU设计挑战的方法。这种设计对于理解和优化现代处理器的...

    load test for video publish, pull

    在IT行业中,负载测试(Load Testing)是一种关键的质量保证措施,用于评估系统在高负载条件下的性能、稳定性和可扩展性。"load test for video publish, pull" 主要关注的是视频发布(publish)和视频拉取(pull)...

    性能压力测试load5

    【性能压力测试load5】是一种针对软件系统进行的测试方法,旨在评估和验证系统在高负载和并发情况下的性能、稳定性和可扩展性。这种测试通常用于确定一个系统在正常和峰值使用情况下的表现,帮助开发者和运维人员找...

    Loadtest方法与经验

    4. **压力测试**:通过不断增加用户负载,找出系统性能瓶颈,通常表现为响应时间显著增长或CPU占用率持续高位。 这些测试场景有助于全面评估系统在不同条件下的表现,为优化和扩展提供依据。通过学习和应用Loadtest...

    pathload2客户端程序源代码

    - **CPU亲和性**:为了减少上下文切换的开销,Pathload2可能将线程绑定到特定CPU核心上。 5. **日志和调试**: - **日志系统**:Pathload2可能包含一个日志系统,记录运行过程中的关键信息,便于问题排查。 - **...

    前端开源库-load-balancer

    “前端开源库-load-balancer”为Node.js Worker提供了强大的负载平衡功能,有助于前端开发者构建高性能、可扩展的应用。通过合理选择和配置负载平衡策略,开发者能够充分利用硬件资源,优化用户体验,同时确保系统的...

    MIPS单周期CPU设计(24条指令+差异化指令 OR 45条指令) 详细实现

    本主题主要关注MIPS单周期CPU的设计,涵盖24条基础指令以及可能包含的差异化指令集,这可能是45条指令的扩展。我们将探讨CPU设计的基本原理,MIPS指令集的特点,以及如何实现这些指令的单周期处理。 首先,单周期...

    Java获取CPU&主板&硬盘序列号

    double cpuLoad = osMxBean.getSystemCpuLoad(); ``` 获取CPU序列号通常需要借助本地方法,这超出了Java标准库的能力范围。 2. **主板序列号获取**: 主板序列号同样需要操作系统级别的访问权限,Java标准库...

    性能测试load6

    【性能测试load6】是一种针对软件系统进行性能评估和优化的方法,主要目的是验证系统在高负载情况下的稳定性、响应速度以及资源利用率。在IT行业中,性能测试是确保应用能够满足用户需求并具备扩展性的重要环节。 ...

    java代码模拟CPU

    - 定义一套适合模拟CPU的简单指令集,如ADD(加法)、SUB(减法)、MOV(移动)、JMP(跳转)、LOAD(加载)、STORE(存储)等。 - 设计每条指令的格式,包括操作码(opcode)和可能的操作数。 2. **寄存器管理**...

    一个小巧精致的CPU监视器

    - **初始化**:在`Form_Load`事件中调用`CPU.InitCPUUsage`方法,初始化CPU监视器。 #### 2. CPU使用率的获取 为了获取CPU使用率,程序定义了一个名为`CPUUsage`的类。这个类包含了两个关键方法:`InitCPUUsage`...

    压力测试工具http_load

    在实际应用中,http_load通常与其他性能监控工具结合使用,例如监控服务器CPU、内存使用情况,以获取更全面的测试数据。通过对比不同参数设置下的测试结果,开发者可以找到服务器的最佳工作状态,或者找出性能瓶颈,...

    load testing for dotnet

    - **ASP.NET**:作为 ASP 的升级版,ASP.NET 提供了编译而非解释的执行方式,提高了性能和可扩展性。 - **Web Forms**:是 ASP.NET 的一部分,允许开发者创建交互式网页应用,通过服务器端控件和事件驱动模型来...

    31条指令CPU测试集合

    10. **向量运算指令**:在现代CPU中,可能会有SIMD(单指令多数据)指令,如MIPS的DSP扩展,用于高效处理数组和多媒体数据。 通过执行这些测试,我们可以分析CPU在不同场景下的表现,比如指令执行速度、内存访问...

    VHDL写的八位模型机CPU

    对于给定的文件"EXP_CPU_COM_RAM",这个名字可能是实验或扩展CPU的内存组件,可能包含RAM(随机访问存储器)的实现。RAM是CPU用来存储数据和程序的地方,VHDL描述的RAM可能会定义读写操作的时序和逻辑。 设计这样的...

    zhilingji.rar_CPU 指令_cpu指令集。chm_zhilingji

    Intel CPU的指令集经过多次演变,从早期的8086到现在的酷睿系列,指令集不断发展和完善,以满足高性能计算的需求。 二、Intel CPU指令集的历史发展 Intel的指令集经历了8086的X86、 Pentium时代的MMX、Pentium Pro...

Global site tag (gtag.js) - Google Analytics