关于load过高的几种情况

2023-11-07

Linux 中 load啥意思
"Load" 在 Linux 系统中通常是指系统的负载情况,也称为系统负荷。它指的是系统正在运行的进程数量以及这些进程对系统资源的使用情况,例如 CPU、内存、磁盘 I/O 等。Linux 系统的负载通常由三个数字表示,分别对应于过去 1 分钟、5 分钟和 15 分钟内的平均值。通常,当这些数字高于 CPU 核心数的 70% 左右时,就可以认为系统的负载较高,需要进一步分析和优化。

Linux PID TID啥意思
在Linux系统中,每个正在运行的进程都有一个唯一的数字标识符,称为进程ID(PID)。PID是一个非负整数,通常在系统启动时自动分配。进程ID的范围通常是从1到32768,但具体取决于系统配置。
在进程内部,还有一种标识符叫做线程ID(TID),它也是一个非负整数,用于标识一个进程内部的线程。每个线程都有一个唯一的TID,但是它们都共享相同的PID,因为它们是同一个进程的不同执行路径。
因此,PID是进程的唯一标识符,而TID是线程的唯一标识符。在Linux中,通过PID和TID可以管理和控制进程和线程的行为。


关于负载过高情况(load)
情况一:CPU高,load高
当CPU高,load也高时,表示系统正在处理大量的任务,但CPU资源不足以处理这些任务,导致任务队列(即进程等待队列)中的进程数目增加,从而导致load增加。这种情况通常被称为CPU过载,是指系统的CPU资源不足以满足当前正在运行的任务需求。
对于这种情况,可以通过以下方法来缓解负载过高的问题:
优化进程或应用程序,尽量减少CPU的占用率。
增加CPU资源,例如增加处理器数量或提高处理器速度。
增加系统内存,以便更多的进程可以在内存中运行,从而减少对CPU的竞争。
调整系统的调度策略,例如增加时间片大小,减少进程的上下文切换等,以优化CPU的利用率。
将任务分配到不同的计算节点,以减少单个节点的负载。
需要注意的是,当CPU过载时,系统的响应时间和处理能力都会受到影响。因此,及时采取措施来缓解负载过高的问题是非常重要的。

找占用最高的PID 通过PID找最高线程TID 若是java程序,打印线程堆栈信息,
1.top查看cpu最高的进程PID(进程号)
2.top -Hp PID 查看占用CPU最高的TID
3.若是java程序,jstack打印线程堆栈信息
查看Java进程的ID:jps
查看java线程堆栈信息:jstack PID进程号
将信息写入到指定文件:jstack  PID进程号> stacktrace.txt
jstack命令会暂停Java进程的所有线程,以便获取线程堆栈信息 避免在高峰期进行操作。
4.printf %x tid 打印最消耗CPU线程的十六进制。printf是一个用于格式化输出的命令。%x是一种格式控制字符,用于指定输出格式为十六进制数。线程的ID(即TID)

vmstat 查看系统维度的CPU负载
top 查看进程维度的CPU负载

vmstat -n 1  结果一秒刷新一秒 (使用vmstat查看系统维度的CPU负载)
r:系统中CPU等待处理的线程,由于CPU每次只能处理一个线程,所以该数值越大系统运行越慢
b:进程阻塞
us:用户CPU时间,
sy:系统CPU时间
wa:消耗的CPU时间百分比,
id:处于空闲状态的CPU时间百分比
cpu负载重原因:
r大于4且id少于40,等待处理的线程过大
bi,bo长期不等0,表示内存不足
disk进程不等于0,b大于三,表示io性能差

使用top 查看进程维度的CPU负载
top 查看CPU,内存等资源的使用情况
界面第三行显示CPU资源的总体使用情况,下方显示各个进程的资源占用情况
直接在界面输入大写字母P,使用率排序监控结果,定位CPU占用CPU较高的进程。
根据系统日志和程序自身相关日志,对相应进程做进一步排查分析,判断占用过高CPU的原因。


Linux上进程的五种状态
R (TASK_RUNNING):可执行状态,只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态。
S (TASK_INTERRUPTIBLE):可中断的睡眠状态,处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。
D (TASK_UNINTERRUPTIBLE):不可中断的睡眠状态,进程处于睡眠状态,但是此刻进程是不可中断的。TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。
T (TASK_STOPPED or TASK_TRACED):暂停状态或跟踪状态。
Z (TASK_DEAD - EXIT_ZOMBIE):退出状态,进程成为僵尸进程。进程已终止,但进程描述还在,直到父进程调用wait4()系统调用后释放。

情况二  CPU利用率低、Load负载高
等待磁盘I/O完成的进程过多,导致进程队列长度过大,但CPU运行的进程很少,体现负载过大,cpu使用率低。
说明处于等待状态的任务很多,负载越高,代表可能很多僵死的进程。通常这种情况是IO密集型的任务,大量任务在请求相同的IO,导致任务队列堆积。
I/O:CPU等待IO,磁盘IO,网络IO
top 查看%wa(cpu等待IO时间)
iostat -d -x -m 1 10 查看磁盘IO情况(yum install -y sysstat)
sar -n DEV 1 10 查看网络IO
查看占用IO的程序:
ps -e -L h o state,cmd | awk '{if($1=="R"||$1=="D"){print $0}}' | sort | uniq -c | sort | uniq -c | sort -k 1nr

top观察,CPU很空闲,但是load average非常高。
cpu高而负载高,等待磁盘I/O完成的进程过多,导致队列长度过大,这样体现到负载过大了,实际此时CPU被分配去执行别的任务或空闲
情况一:磁盘读写请求过多导致大量I/O等待
情况二:MySQL中存在没有索引的语句或存在死锁等情况
情况三:外接硬盘故障,常见有挂了NFS,但是NFS server 故障

处理办法
load average 是对 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。
出现此种情况时,可能是由于僵尸进程导致的。可以通过指令ps -axjf查看是否存在 D 状态进程。
D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。


cpu利用率   和cpu负载区别

cpu利用率 使用率占用率区别他们是一样的吗
虽然这些指标都涉及到CPU资源的利用情况,但它们的计算方法和指向的对象有所不同。因此,在实际使用中,需要根据具体的情况选择合适的指标来评估CPU的利用情况。

什么是时间片?
现在基本的操作系统都是多任务操作系统,即可以同时运行多个程序。一个cpu内核在多个进程之间轮流切换,每个进程占用CPU一小段很短的时间(5ms-800ms),用户基本觉察不到,这里的一小段时间就是时间片。


CPU使用率?CPU利用率?和CPU占用率 ? CPU负载?
CPU使用率就是程序对CPU的占用情况,即CPU使用率=CPU时间片被程序使用的总时间/CPU的总时间。即全部进程的占用时间/(总占用时间+空闲时间)
CPU利用率显示的是程序在运行期间实时占用的CPU百分比
CPU占用率分为用户态CPU使用率和系统态CPU使用率。
用户态CPU使用率:执行应用程序代码的时间占总CPU时间的百分比。
系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。
系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。
系统态的CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。
CPU负载显示的是一段时间内正在使用和等待使用CPU的平均任务数。这里的一段时间指的是CPU一个总时间(运行加空闲)
CPU利用率是CPU实时使用情况,CPU负载是CPU当前以及未来一段时间的使用情况
无论CPU的利用率是高是低,后面有多少任务在排队(CPU负载)无必然关系
CPU利用率可以是百分百,这时候CPU负载不一定只是一 根据总核数在一到总核数之间为正常

uptime 和w 都可以查看CPU平均负载,top也可,top还能看到CPU负载总体使用率以及各个进程占用CPU的比例。

 可以查看物理CPU个数
cat /proc/cpuinfo| grep “physical id”| sort | uniq| wc -l 

查看物理CPU的核的个数
cat /proc/cpuinfo| grep “cpu cores” | uniq

查看逻辑CPU的个数
cat /proc/cpuinfo| grep “processor”| wc -l

情况三 负载低利用率高
这表示CPU的任务并不多,但是任务执行的时间很长,大概率就是你写的代码本身有问题,通常是计算密集型任务,生成了大量耗时短的计算任务。

直接top命令找到CPU使用率最高的进程(记录PID号),如果代码没有问题,那么过段时间CPU使用率就会下降的
找该进程的线程:top -Hp pid (最靠前的几个占用最高 )
线程PIDh转16进制,printf “0x%x\n”PID号
通过16进制的PID号找有问题的代码
jstack 进程的PID | grep ‘线程16进制代码’ -C5 --color

网络协议:
应用层:
http协议格式
请求行、请求头、空一行、请求体
请求行包括:请求方法、统一资源定位符(URL)、http协议及版本
响应报文格式:状态行、响应头、空一行、响应体
状态行包括:协议及版本、状态码、状态码解释

http和https的区别

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于load过高的几种情况 的相关文章

随机推荐

  • 【STM32】电子时钟(1)

    一直想系统的学习STM32 但是公司的项目主要是电机算法 每天看到头都快炸了 打算仿照手机上的时钟应用写一个电子时钟 因为这个任务的定位是 好吧 就没有定位 主要是边玩边学 也不设时间期限和具体的功能指标 有空了就搞搞 想到了什么就加上去
  • 成功解决Myeclipse2017破解时遇到的crack.bat文件闪退问题

    解决问题 解决Myeclipse2017破解时遇到的crack bat文件闪退问题 解决方法 是环境变量设置有错 1 新建系统环境变量 JAVA HOME D Program Files MyEclipse2017CI7 binary co
  • Linux 音视频开发杂记之一-环境配置使用vscode

    开发环境 开发环境选择window10 Visual Studio Code ubuntu20 64 虚拟机 一Windows 安装 1 安装git for windows 安装过程直接下一步 主要原因是windows OpenSSH在vs
  • Flutter - Route传参

    Navigator 组件支持通过使用通用标识符从应用程序的任何地方导航到特定路由 在某些情况下 你可能还希望能够传递参数给特定路由 例如 你希望导航到 user 路由并携带上用户信息 在 Flutter 中 你能通过提供额外的 argume
  • 博客使用方法

    这里写自定义目录标题 凯哥英语视频 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左
  • 数据模型所描述的内容包括三个部分:数据结构、数据操作、数据约束。

    http www cnblogs com joechinochl articles 5252518 html 数据模型所描述的内容包括三个部分 数据结构 数据操作 数据约束 1 数据结构 数据模型中的数据结构主要描述数据的类型 内容 性质以
  • 大数据毕业设计题目选题推荐

    文章目录 0 前言 1 如何选题 1 1 选题技巧 如何避坑 重中之重 1 2 为什么这么说呢 1 3 难度把控 1 4 题目名称 1 5 最后 2 大数据 选题推荐 2 1 大数据挖掘类 2 2 大数据处理 云计算 区块链 毕设选题 2
  • if语句c语言编程题,c语言if语句的练习题答案

    1 编写程序输入a和b 求a和b的余数和商 includevoid main int a b scanf printf 商为 d 余数为 d 2 输入一个整型数据 分别求出各位数字 如 469 则个位数是9 十位数是6 百位数 是4 inc
  • 某型雷达的报文收发实录

    某型雷达的报文收发实录 前言 工作中需要与某型激光雷达进行通讯 读写报文解析出相应的角度 位置 在目前的工作中 切实遇到的问题是报文的收发 这里记录之 以下内容尚未进过实践检验2020 6 20 激光雷达的报文的接收 使用的API为wins
  • matlab怎么搭建神经网络,matlab实现神经网络算法

    怎样用matlab建立bp神经网络 net train net p t 把这句改成net train net p t 试试 matlab应该默认使用列向量 或者直接使用matlab提供的图形界面取训练 在命令行输入nnstart 谷歌人工智
  • 递归求解迷宫问题

    package com yg recursion author GeQiLin date 2020 2 24 16 01 public class MiGong private static int col 7 private static
  • Codeforces Round 881 (Div. 3) 题解

    目录 A Sasha and Array Coloring 题意 思路 代码 B Long Long 题意 思路 代码 C Sum in Binary Tree 题意 思路 代码 D Apple Tree 树形dp 题意 思路 代码 E T
  • 2022年C语言程序设计题库习集带答案(史上最全版)

    C语言程序设计 试题一 一 填空题 1 C语言中基本的数据类型有 2 C语言中普通整型变量的类型说明符为 在内存中占 字节 有符号普通整型的数据范围是 3 整数 35在机内的补码表示为 4 执行下列语句int a 8 a a a a 后 a
  • springboot集成微信app支付

    一 准备工作 以下信息需要自行开通和申请 public static final String APP ID app的id 需要app应用 public static final String KEY api密钥 商户账户信息里面去获取 p
  • 一个mysql语句报错引发的故事

    昨天在自己的本上装了mysql 打算练习sql语句 在创建表的时候报了错 Invalid default value for sex 就是说我sql语句中有个性别的默认值设置是无效的 性别用的是enum数据类型 出错原因是因为数据库的编码不
  • 【Python字典】

    字典类型的基本概念 通过任意键信息查找一组数据中值信息的过程叫映射 Python语言中通过字典实现映射 Python语言中的字典可 以通过大括号 建立 建立模式如下 lt 键1 gt lt 值1 gt lt 键2 gt lt 值2 gt l
  • C++11--包装器与可变参数摸板

    文章目录 可变参数模板 递归函数方式展开参数包 函数包装器 举个例子 bind函数 举个例子 可变参数模板 C 11的新特性可变参数模板能够让我们创建可以接受可变参数的函数模板和类模板 Args是一个模板参数包 args是一个函数形参参数包
  • 【人脸检测】 Tinaface复现(数据集准备、测试与评估)

    转载自 https blog csdn net qq 35975447 article details 110430390 人脸检测 Tinaface复现 数据集准备 测试与评估 参考 TinaFace Strong but Simple
  • Linux服务篇之DNS服务器搭建

    文章目录 一 DNS介绍 1 DNS简介 2 DNS工作原理 3 DNS的资源记录 二 实验 1 DNS正向解析实验 2 反向解析 3 主从服务器配置 三 总结 一 DNS介绍 1 DNS简介 DNS 全称 Domain Name Syst
  • 关于load过高的几种情况

    Linux 中 load啥意思 Load 在 Linux 系统中通常是指系统的负载情况 也称为系统负荷 它指的是系统正在运行的进程数量以及这些进程对系统资源的使用情况 例如 CPU 内存 磁盘 I O 等 Linux 系统的负载通常由三个数