html5app cpu占用高,load高但是cpu占用率低的排查

CPU不高的情况,一遍cpu的wait或idle都有较大的值,表明CPU利用率不高

1. 一种情况是磁盘IO过高,导致线程等待

使用vmstat 命令,查看io的情况。

vmstat 2 5

或使用iotop工具,默认显示对IO高低进行倒序实时显示,其中tid即是pid

Ubuntu:apt-get install iotop -y

2. 另一种情况,比较复杂,可能是运行的应用线程频繁切换导致

load 呈现的是CPU等待处理的请求队列的压力,load太高表明有太多请求等待处理

排查导致load高的原因

tips:系统load高,不代表cpu资源不足。Load高只是代表需要运行的队列累计过多。但队列中的任务实际可能是耗cpu的,也可能是耗i/0及其他因素的

vmstat 2 5

查看系统整体运行状态

io的bi(block in)--bo(block out)列,表示I/O状态。

system的中断数(in)、上下文切换(cs)特别频繁,进程上下文切换次数较多的情况下,很容易导致CPU将大量的时间耗费在寄存器、内核栈、以及虚拟内存等资源的保存和恢复上,进而缩短了真正运行进程的时间造成load高。

CPU寄存器,是CPU内置的容量小、但速度极快的内存。程序计数器,则是用来存储CPU正在执行的指令的位置,或者即将执行的下一条指令的位置。

他们都是CPU在运行任何任务前,必须依赖的环境,因此也被叫做CPU上下文。

CPU上下文切换,就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文,到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。

排查大方向:频繁的中断以及线程切换(由于该台ecs上只存在一个JAVA服务,主要排查该进程)

通过vmstate只能查看总的cpu上下文切换,可通过pidstat命令查看线程层面的上下文切换信息 pidstat -wt 1 (1表示每1秒刷新一次)

如运行Java服务:

第一个是java线程特别多

第二个是很有规律的出现每秒上下文切换100+次的线程。

确认一下这些java线程的来源,查看该应用进程下的线程数

cat /proc/17207/status

线程数9749(非高峰)

排查方向:

线程数过多

部分线程每秒上下文切换次数过高

先排查主要原因,即部分线程上下文切换次数过高 拉一下线上该进程的堆栈信息,然后找到切换次数达到100+/每秒的线程id,把线程id转成16进制后在堆栈日志中检索

其他参考:

https://www.cnblogs.com/lddbupt/p/5779655.html

原文:https://www.cnblogs.com/51core/p/13640104.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值