Linux系统之User CPU time解析

简介: 在Linux操作系统中,通常采用8个不同的指标来研究Unix / Linux操作系统中的CPU消耗:用户CPU时间(us)、系统CPU时间(sy)、良好的CPU时间(ni)、空闲CPU时间(id)、等待CPU时间(wa)、硬件中断CPU时间(hi),软件中断CPU时间(si),被盗CPU时间(st)。在本文中,我们主要对“用户CPU时间”进行解析。

      在Linux操作系统中,通常采用8个不同的指标来研究Unix / Linux操作系统中的CPU消耗:用户CPU时间(us)、系统CPU时间sy)、良好的CPU时间(ni)、空闲CPU时间(id)、等待CPU时间(wa)、硬件中断CPU时间(hi,软件中断CPU时间(si,被盗CPU时间st。在本文中,我们主要对“用户CPU时间”进行解析。  

什么是“用户” CPU时间?

      为了了解“用户CPU时间”,我们也应该同时了解“系统CPU时间”。用户CPU时间是处理器运行应用程序代码所花费的时间。系统CPU时间是处理器在运行连接到您的应用程序的操作系统(即内核)功能上花费的时间。假设我们的应用程序正在处理数组中的元素;然后,它将被计为“用户” CPU时间。假设我们的应用正在对外部应用组件进行网络调用。要进行网络调用,它必须将数据读/写到套接字缓冲区中,这是操作系统代码的一部分。这将被视为“系统CPU”时间。  

如何找到“用户” CPU时间?

      通常可以从以下来源找到用户CPU时间:

      1、可以使用基于网络的分析工具来报告“用户” CPU时间。如果“用户” CPU时间超出阈值,该工具便能够生成警报。

      2、Unix / Linux命令行工具“顶部”在“我们”字段中也报告了“用户” CPU时间,如下图命令行返回结果所示:


[administrator@JavaLangOutOfMemory nacos-docker ]%top
top - 14:06:23 up 70 days, 16:44,  2 users,  load average: 1.25, 1.32, 1.35
Tasks: 206 total,   1 running, 205 sleeping,   0 stopped,   0 zombie
Cpu(s):  5.9%us,  3.4%sy,  0.0%ni, 90.4%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
Mem:  32949016k total, 14411180k used, 18537836k free,   169884k buffers
Swap: 32764556k total,        0k used, 32764556k free,  3612636k cached
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                
28894 root      22   0 1501m 405m  10m S 52.2  1.3   2534:16 java                                                                   
18249 root      18   0 3201m 1.9g  11m S 35.9  6.0 569:39.41 java    
... ...


如何模拟较高的“用户” CPU时间?

      为了模拟高“用户” CPU报告,我们写个简单的Demon。将其打成jar包,使其运行以模拟各种性能问题。当我们启动此应用jar包时,它将导致主机上的“用户” CPU消耗激增。具体如下:


[administrator@JavaLangOutOfMemory cpu %]java  -jar devopsDemo.jar PROBLEM_CPU

      针对此应用jar包,我们看下其部分代码如下:


public class DevopsDemo {
  public static void start() {
    new DevopsrThread().start();
    new DevopsrThread().start();
    new DevopsrThread().start();
    new DevopsrThread().start();
    new DevopsrThread().start();
    new DevopsrThread().start();
    new DevopsrThread().start();
    new DevopsrThread().start();
    System.out.println("8 threads launched!");
  }
}
public class DevopsrThread extends Thread {
  @Override
  public void run() {
    while (true) {
      doSomething();
    }
  }
  public static void doSomething() {
    // Does nothing
  }  
}

      可以看到devopsDemo应用在“ DevopsDemo”类中启动8个“ DevopsrThread”。同时,我们会注意到“ DevopsrThread”正在进行无限的while循环,并一次又一次地调用“ doSomething()”函数。这个doSomething()方法没有任何作用。

      因此,如果线程在应用程序级代码上无限循环,那么“用户” CPU时间将开始增加。  

如何解决“用户” CPU时间过长的问题?

     通常主要有以下策略:

      1、重新启动CPU消耗很大的过程。此策略为临时方案

      2、借助相关工具,例如,jstatck之类的根本原因分析工具,识别导致CPU大量启动的应用程序中的代码行,并加以修复。

      具体可参考文章:Java ThreadDump 生成解析

      3、如果CPU消耗始终很高(即 7 x 24),则可能表明资源设备的计算能力不足。在这种情况下,我们可以尝试执行以下操作:升级设备的容量,可尝试将应用服务转移到更好的资源实例环境);减少该设备上运行的进程数;联机负载即,借助横向扩容方式分担压力

相关文章
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
306 20
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
3743 12
|
Linux
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
408 15
|
存储 Linux
Linux内核中的current机制解析
总的来说,current机制是Linux内核中进程管理的基础,它通过获取当前进程的task_struct结构的地址,可以方便地获取和修改进程的信息。这个机制在内核中的使用非常广泛,对于理解Linux内核的工作原理有着重要的意义。
707 11
|
存储 缓存 程序员
软考软件评测师——计算机组成与体系结构(CPU指令系统)
本内容详细解析了计算机中央处理器(CPU)的核心架构及其关键组件的工作原理。首先介绍了CPU的四大核心模块:运算单元、控制单元、寄存器阵列和内部总线,并阐述其在数据处理中的核心职责。接着深入探讨了算术逻辑部件(ALU)的功能与专用寄存器的作用,以及通用寄存器对性能提升的意义。随后分析了控制单元的指令处理流程及特殊寄存器的功能。此外,还解析了寄存器系统的分类与设计特点,并对比了不同内存访问模式的特点与应用场景。最后,通过历年真题巩固相关知识点,帮助理解CPU各组件的协同工作及优化策略。
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10827 2
|
存储 缓存 Linux
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
1929 8
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
954 11
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
613 6
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
955 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

热门文章

最新文章

推荐镜像

更多
  • DNS