Java进程cpu频繁100%问题解决方案

1.在一次周末收到部门的反馈,线上机器java进程的cpu会频繁100% 监控系统发了很多报警邮件,于是登录跳板机进行排查解决2.使用top命令查看进程情况

发现每隔个几秒cpu就达到100%左右,报警邮件确实是诚不欺我,java进程有问题

2.于是查看下到底是java进程下的哪个线程造成的cpu频繁100%

使用top -Hp 25567 查看进程下的线程信息

得到线程编号26250

3.查看该线程的栈信息

printf '%x\n' 26250 获取26250的16进制数为668a

jstack25567 |grep -A 30668a 得到该线程栈信息

ContainerBackgroundProcessor[StandardEngine[Catalina]] 这是什么任务,没见过啊,懵了

继续看下面的栈信息有apache.catalina之类的信息(上图没有截全)

我们的java服务是通过war包的形式发布到tomcat里的,想着是不是因为tomcat配置的问题

先网上查一下吧(吃了不了解tomcat底层的亏)

4.根据网上的资料,有一种说法说是因为tomcat的server.xml的reload属性设置为了true,那么reload属性有什么作用呢?

如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。在开发阶段将reloadable属性设为true,有助于调试,但这样用会加重服务器运行负荷,建议在Web应用的发存阶段将reloadable设为false。

看到这赶紧和其他节点的tomcat配置对比一下,发现其他节点的reload都配置为false,只有这一台有问题了的设置为了true。

什么也不说了修改reload为false进行重启,当然如果真的不是因为reload配置导致cpu频繁100%的话,设置reload为false对系统也是有好处的。

5.修改reload为false进行验证

修改配置重启后果然没有再频繁出现cpu 100%了,至于为什么运行这么久监控系统才发通知邮件呢,后来做监控的小伙伴说是因为他们那边信息采集出了问题,没有发现。

还有一个问题,为什么单单只有这一台reload为false了,真相只有一个,项目扩展节点时,小伙伴使用测试环境的server.xml配置文件,然后改改端口,war路径就给发上去了,这才引出这样的问题

问题总算解决了。。。。。。。。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Linux中使用Shell脚本查看Java线程的CPU使用情况

    线上Java应用,在业务高峰期的时候经常出现CPU跑高,需要查看实时的线程占用cpu情况,下面是一个很好用的脚本,可以快速导出每个线程的占用CPU情况,结合jstack日志,排查到具体的线程类名. 一.首先获得jvm的进程ID: 复制代码 代码如下: ps -ef|grep javatomcat     374   372  1 11:45 ?        00:02:30 jsvc.exec -java-home /usr/java/latest -user tomcat -pidfile

  • java实战CPU占用过高问题的排查及解决

    最近一段时间 某台服务器上的一个应用总是隔一段时间就自己挂掉 用top看了看 从重新部署应用开始没有多长时间CPU占用上升得很快 排查步骤 1.使用top 定位到占用CPU高的进程PID top 2.通过ps aux | grep PID命令 获取线程信息,并找到占用CPU高的线程 ps -mp pid -o THREAD,tid,time | sort -rn 3.将需要的线程ID转换为16进制格式 printf "%x\n" tid 4.打印线程的堆栈信息 到了这一步具体看堆栈的日

  • Java实现获取cpu、内存、硬盘、网络等信息的方法示例

    本文实例讲述了Java实现获取cpu.内存.硬盘.网络等信息的方法.分享给大家供大家参考,具体如下: 1. 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge.net/projects/sigar/files/latest/download?source=files 或点击此处本站下载. 解压压缩包,将lib下sigar.jar导入eclipse的CL

  • java如何获取系统CPU、内存占用

    说明:获取的数据是操作系统整体的资源占用情况,不是当前 java进程占用的资源 1. 获取系统CPU占用情况 : import java.lang.management.ManagementFactory; import com.sun.management.OperatingSystemMXBean; private static OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory.getOperati

  • Java进程cpu占用过高问题解决

    cpu是时分(time division)的,操作系统里有很多线程,每个线程的运行时间由cpu决定,cpu会分给每个线程一个时间片,时间片是一个很短的时间长度,如果在时间片内,线程一直占有,则是100%:我们应该意识到,cpu运行速度很快(主频非常高),除非密集型耗费cpu的运算,其它类型任务都会在小于时间片的时间内结束. 产生CPU100%的原因: 某一程序一直占用CPU是导致CPU100%的原因,大概有以下几种情况: 1.Java 内存不够或溢出导致GC overhead问题, GC ove

  • JVM---jstack分析Java线程CPU占用,线程死锁的解决

    本文章主要演示在Windows环境,Linux环境也差不多. 一.分析CPU占用飙高 首先写一个Java程序,并模拟一个死循环.让CPU使用率飙高.CPU负载过大的话,新的请求就处理不了了,这就是很多程序变慢了甚至不能访问的原因之一. 下面是我这里的Controller,启动程序之后,开多个请求访问这个方法.死循环代码就不贴了,自己构造.我这里模拟的一个截取字符串的死循环. /** * 演示死循环导致cpu使用率飙高 * */ @RequestMapping("/loop") publ

  • java排查一个线上死循环cpu暴涨的过程分析

    问题,打一个页面cpu暴涨,打开一次就涨100%,一会系统就卡的不行了. 排查方法,因为是线上的linux,没有用jvm监控工具rim链接上去. 只好用命令排查: top cpu排序,一个java进程cpu到500%了,什么鬼..... 查到对应java进程 jps || ps -aux | grep 端口 pid=13455 查看进程中线程使用情况 T排序 查看cpu占用time最高的线程编号 top -Hp 13455 有个线程9877 的时间一直在爆涨 获取线程十六进制地址9877 (十六

  • java应用cpu占用过高问题分析及解决方法

    使用jstack分析java程序cpu占用率过高的问题 1,使用jps查找出java进程的pid,如3707 2,使用top -p 14292 -H观察该进程中所有线程的CPU占用. [root@cp01-game-dudai-0100.cp01.baidu.com ~]# top -p 14292 -H top - 22:14:13 up 33 days, 7:29, 4 users, load average: 25.68, 32.11, 33.76 Tasks: 113 total, 2

  • Java CPU性能分析工具代码实例

    这篇文章主要介绍了Java CPU性能分析工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 背景 有处理过生产问题的同学基本都能遇到系统忽然缓慢,CPU突然飙升,甚至整个应用请求不可用.当出现这种情况下,在不影响数据准确性的前提下,我们应该尽快导出jstack和内存信息,然后重启系统,尽快回复系统的可用性,避免用户体验过差.本文针对CPU飙升问题,提供该问题的排查思路,从而能够快速定位到某线程甚至某快代码导致CPU飙升,从而提供处理该

  • Java进程cpu频繁100%问题解决方案

    1.在一次周末收到部门的反馈,线上机器java进程的cpu会频繁100% 监控系统发了很多报警邮件,于是登录跳板机进行排查解决2.使用top命令查看进程情况 发现每隔个几秒cpu就达到100%左右,报警邮件确实是诚不欺我,java进程有问题 2.于是查看下到底是java进程下的哪个线程造成的cpu频繁100% 使用top -Hp 25567 查看进程下的线程信息 得到线程编号26250 3.查看该线程的栈信息 printf '%x\n' 26250 获取26250的16进制数为668a jsta

  • MySQL服务器进程CPU占用100%的解决方法

    朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysqld-nt.exe) CPU 占用率总为 100% 高居不下.此主机有10个左右的 database, 分别给十个网站调用.据朋友测试,导致 mysqld-nt.exe cpu 占用奇高的是网站A,一旦在 IIS 中将此网站停止服务,CPU 占用就降下来了.一启用,则马上上升. MYSQL CPU 占用 100% 的解决过程 今天早上仔细检查了一下.目前此网站的七日平均日 IP 为

  • Java多线程导致CPU占用100%解决及线程池正确关闭方式

    简介 情景:1000万表数据导入内存数据库,按分页大小10000查询,多线程,15条线程跑. 使用了ExecutorService executor = Executors.newFixedThreadPool(15) 本地跑了一段时间后,发现电脑CPU逐渐升高,最后CPU占用100%卡死,内存使用也高达80%. 排查问题 Debug 发现虽然创建了定长15的线程池,但是因为数据量大,在For中循环分页查询的List会持续加入LinkedBlockingQueue() 队列中每一个等待的任务,又

  • 服务器大量php-cgi.exe进程导致CPU占用100%的解决方法

    windows 2003+IIS6中优化fastcgi配置文件fcgiext.ini,减少php-cgi.exe进程数量和所占内存大小 本来听说fastcgi比isapi好就在服务器中装上了,配置环境为windows 2003+IIS6+fastcgi(FCGI)+PHP5.2.17,经过与很长一段时间观察,发现工作在FastCGI模式下的PHP会占用越来越多的内存,访问量稍微多点php-cgi进程就多了N个,同样情况下能比原来用isapi模式的时候多出几百M,我的服务器内存只有2G伤不起啊.

  • PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析

    后来,我通过跟踪发现,这类情况的出现,跟 PHP 的 file_get_contents() 函数有着密切的关系. 大.中型网站中,基于 HTTP 协议的 API 接口调用,是家常便饭.PHP 程序员们喜欢使用简单便捷的 file_get_contents("http://example.com/") 函数,来获取一个 URL 的返回内容,但是,如果 http://example.com/ 这个网站响应缓慢,file_get_contents() 就会一直卡在那儿,不会超时. 我们知道

  • 开机CPU就是100%cmd.exe病毒进程清除方法

    发布时间:2007-02-09  中毒症状:      开机CPU就是100%,查进程,原来是cmd.exe 占用了绝大部分的CPU.关闭cmd.exe后,CPU实用率恢复正常.但是再次开机的时候,CPU又是100%,cmd.exe 依然占用了绝大部分的CPU. 1.装了ewido 查杀木马,查出了几个感染目标,已删除.但是今 天早上开机,CPU又是100%,cmd.exe 依然占用了绝大部分的CPU. 2.再装"木马清除专家2006",查杀,结果没有发现木马. 3.查system 3

  • Java String index out of range:100错误解决方案详解

    问题出错情况:字符串截取长度,没有那么长的长度所以截取失败. 在这里进行debug之后可以看到,异常在substring中: 也就是判断字符串的时候报错:具体原因就是string字符串indexof的值本身只有5,然后在这里去取其第100 个字符作为截止,因此就会报这个错: 知识点:主要是堆String概念不清.下面针对字符串相关概念做一个简介. 针对上述问题解决办法: 到此这篇关于Java String index out of range:100错误解决方案详解的文章就介绍到这了,更多相关J

  • JAVA进程突然消失问题解决方案

    引言 JVM进程消失可能有哪些原因? 这个问题也是面试中经常出现的,如下图所示 ps:由于两年多没写crud了,所以忘记mybatis怎么用了,所以上面那个问题,我选择了无视. 那我们就开一篇文章说一下这个问题,其实很easy的,无外乎三种情况. linux的OOM killer杀死 JVM自身故障 jvm的OOM导致进程退出(很罕见,我至今没遇见过) Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量

  • 记一次tomcat进程cpu占用过高的问题排查记录

    本文主要记录一次tomcat进程,因TCP连接过多导致CPU占用过高的问题排查记录. 问题描述 linux系统下,一个tomcat web服务的cpu占用率非常高,top显示结果超过200%.请求无法响应.反复重启依然同一个现象. 问题排查 1.获取进程信息 通过jdk提供的jps命令可以快速查出jvm进程, jps pid 2.查看jstack信息 jstack pid 发现存在大量log4j线程block,处于waiting lock状态 org.apache.log4j.Category.

随机推荐