记录一次loadavg报警及其排查

问题描述:

上线项目之后一直会有loadavg报警

  • 服务器上线一段时间后运行没问题,在某一个时间段(通常是上线2小时以后),loadreport会突然顶到很高(100以上)然后逐渐降低.
  • 多出了2000多个Timer线程(这个看服务具体情况,多出的线程不一定多少)

如图:

排查过程:

经过最后逐一排查(查了足足十天),发现是在一个jar包里修改了一个关于数据库的连接池的配置导致的这个问题.

  1. 使用ps查到java进程id;__具体命令:ps -ef | grep java
  2. 之后使用ps查看占用cpu较高的线程;__具体命令:ps p $TARGET_PID -L -o pcpu,pid,tid,time,tname,stat,psr | sort -n -k1 -r
  3. 然后使用jstack PID去抓进程中的线程情况;__具体命令:jstack PID
  4. 之后根据@2步出来的cpu占用情况查到线程id为:751511
  5. 之后进行进制转换,把751511转换为16进制:b7797
  6. 在相对应的jstack输出结果中查找b7797,查找到对应进程的调用栈.

找到调用栈之后就比较好具体定位是什么原因了:

可以发现

是dbcp连接池的问题,启动了一个timer一直在执行什么任务.队列过长而导致的loadavg过高

最终定位到代码:

由于修改了dbcp的配置属性

在82行配置了最少空闲为5

所以会有一个timer来一直扫描所有的连接,检查其是否空闲.

由于是一个db使用非常重的工程,可能同时存在连接上百个库的情况.所以会有大量连接排队等待扫描回收.

这样造成了loadavg过高.

总结:

以后可以快速使用ps和jstack工具来定位到具体的线程和调用栈.来方便查找问题.

时间: 2024-08-30 08:24:44

记录一次loadavg报警及其排查的相关文章

记录一次抽奖超发排查问题过程

接到运营方提出的bug,说是移动端优惠券超发,通过拉取线上数据,确实存在超发现象,而且恰好是设定的两倍. 通过在测试和仿真环境新建一个活动页面添加优惠券进行测试,又不会出现超发现象,想到可能是并发没控制好,找代码问题,根据逻辑下来没什么问题,微调redis缓存控制并发策略,提测上线. 上线后第二天接到运营反馈,还是存在超发现象,而且仅仅是移动端超发,PC端不会超发,在测试仿真模拟领取,用测试工具模拟并发,都不会出现超发现象.到这没办法解决了,直接报告领导存在这样的问题,没招了,怎么办? 领导询问

阿里云环境迁移记录 - 服务监控及报警

服务监控的方案有很多,譬如naigos,zabbix这种,不但可以监控服务,还可以监控cpu.内存.磁盘.网络流量.服务端口等,关于naigos和zabbix的搭建配置,需要另外篇幅介绍,这里使用服务器自身的定时任务+脚本+邮件功能完成一个简单的监控. Part1 邮件服务搭建 安装mailx yum -y install mailx ##############################qq个人邮箱配置############################ vim /etc/mail.

一次网站负载排查记录

背景: 某天早上9.39分,nagios监控突然报警,我们一台手机业务机器出现负载升高,达到60多,这台机器仅8核心8G内存,伴随其他监控出现socket timeout,连接失败.一看该问题就会想到会严重影响业务,并且问题肯定会进行扩散,影响其他业务.不出所料,没到10分钟,其他同业务机器出现大面积报警,nginx出现端口链接超时,各种状态码监控失效.......这种问题,不及时处理的话,客户那边的投诉会很快打进来的. 排查: 1.先排查负载高的具体进程通过top -c -d 1,查看当前有那

linux常用命令 、查看日志、web排查

linux常用命令 ps aux|grep xxx (比如 ps aux|grep tomcat ps aux|grep tomcat-portalvip ps aux|grep nginx 等) rpm -qa|grep xxx (查找系统有没有安装 比如 rpm -qa|grep mysql rpm -qa|grep MySQL rpm -qa|grep jdk 等) 强制卸载 rpm -e 上一步查找结果的内容 --nodeps 查看端口是否被占用 netstat -an|grep 端口

Entity Framework 6.X实现记录执行的SQL功能

Entity Framework在使用时,很多时间操纵的是Model,并没有写sql语句,有时候为了调试或优化等,又需要追踪Entity framework自动生成的sql(最好还能记录起来,方便出错时排查) 方式一: 通过System.Data.Entity.DataBase.Log属性指定一个无返回值的委托,来实现记录日志的功能 public partial class EFContext<T> : DbContext where T : class { public EFContext(

spring boot继承web和mybatis时,调用接口删除记录出现的空指针以及解决办法

前两天在学spring boot的时候,出现了一个很奇怪的错误,因为是第一次使用spring boot,所以没想到会遇到这种莫名其妙的bug,即调用接口删除数据库中一条记录的时候,数据库中记录事实上以及被删除了,但是却返回一个null,这就令我百思不得其解了,理论上,删除的话,会返回受影响的记录的条数. 最后排查了一圈,结果却十分令我大跌眼镜,真的很简单!下面写的代码: controller类,这里由于后来数据库sql改了,为了测试like的搜索功能,所以前面的index方法参数并未进行及时修改

监所安防平台如何迎接大数据时代

大数据时代已经到来,从谷歌利用大数据来分析猪流感的疫情到阿里巴巴利用大数据来分析一个人的信用资质.在安防领域,大数据也不再是一个陌生的新名词, 例如在海康威视参与建设的长沙.贵阳等诸多成功的平安城市建设案例中,涉及的数据已经是PB级别,这些大数据对平台在快速调取.精确定位.智能分析等方面 有着诸多要求.相比平安城市.智慧城市等项目,监所类安防系统的建设中,对大数据的关注也逐渐在提高.那么,监所类方案平台在大数据处理方面面临着哪些需 求呢? 一.监所安防平台面临的大数据 在一般意义的监所安防平台上

监控方案

第一:统一监控报警平台设计思路 构建一个智能的运维监控平台,必须以运行监控和故障报警这两个方面为重点,将所有业务系统中所涉及的网络资源.硬件资源.软件资源.数据库资源等纳入统一的运维监控平台中,并通过消除管理软件的差别,数据采集手段的差别,对各种不同的数据来源实现统一管理.统一规范.统一处理.统一展现.统一用户登录.统一权限控制,最终实现运维规范化.自动化.智能化的大运维管理. 智能的运维监控平台,设计架构从低到高可以分为6层,三大模块,如图1所示: 数据收集层:位于最底层,主要收集网络数据.业

京东前端:PhantomJS 和NodeJS在网站前端监控平台的最佳实践

1. 为什么需要一个前端监控系统 通常在一个大型的 Web 项目中有很多监控系统,比如后端的服务 API 监控,接口存活.调用.延迟等监控,这些一般都用来监控后台接口数据层面的信息.而且对于大型网站系统来说,从后端服务到前台展示会有很多层:内网 VIP.CDN 等. 但是这些监控并不能准确地反应用户看到的前端页面状态,比如:页面第三方系统数据调用失败,模块加载异常,数据不正确,空白开天窗等. 相关厂商内容 Native动态化最新技术解析 不可错过的智能时代的大前端 性能优化最佳实践经验谈 百度技