`

CPU占用高

 
阅读更多

前天下午,服务器突然没响应,日志出现内存溢出异常,最后确认CPU占用过高导致出现问题,使用jvisualvm来监控jvm,也无法连接上服务器,业务高峰期情况下,只能先启用备用服务器,以便检查,结果备用服务器没撑过10分钟,也出现同样现象,实际在线用户不多,按理并发量也不大,而且以前这个量也承受过来,在没办法情况下,只能再次启用多台备用服务器,然后一个人监控,负责kill,restart。留一台给我们做分析(在测试环境压测,无法重现改现象),jvisualvm监视视图,gc占用CPU并不高(感觉这个不准确),但整个堆内存将近封顶,之后只能尝试逐渐加上打印gc日志(-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/\heapdump.hprof -Xloggc:/tmp/gc.log -XX:+PrintGCDetails),并且利用jstack打印线程栈信息(见:http://lippeng.iteye.com/blog/2001254)


 只后查看gc日志和jstackfile文件,从gc日志发现,都在做full gc,每次gc后,新生代释放一点点内存,年老代没变,这样看来的确有东西一直在做死循环运算,并不断产生出对象,然后到达full gc临界值,触发full gc,释放的空间又马上被新产生的对象塞满;


 

从jstackfile文件,依照定位查找占用CPU高的线程



 检查代码,的确发现递归算法,最后确认数据存在问题,导致根据树型数据,获取所有下级节点出现死循环(有个节点,上级节点是其自身导致)。

因树形数据,是第三方准备,真TMD坑爹。

 

自己后来本地模拟改现象,发现jvisualvm监视视图对于CPU占用,还是蛮准确的,不知道为什么当时生产不准确:



 

如何定位进程中哪个线程占用CPU高,参见:http://www.iteye.com/topic/1132321

参考:

https://gist.github.com/rednaxelafx/1081908#file_notes.md

 

一篇JVM监控&调优参数好文:http://www.cnblogs.com/zhguang/p/3342039.html,摘选:

调优方法


一切都是为了这一步,调优,在调优之前,我们需要记住下面的原则:

  1. 多数的Java应用不需要在服务器上进行GC优化;
  2. 多数导致GC问题的Java应用,都不是因为我们参数设置错误,而是代码问题;
  3. 在应用上线之前,先考虑将机器的JVM参数设置到最优(最适合);
  4. 减少创建对象的数量;
  5. 减少使用全局变量和大对象;
  6. GC优化是到最后不得已才采用的手段;
  7. 在实际使用中,分析GC情况优化代码比优化GC参数要多得多;

GC优化的目的有两个(http://www.360doc.com/content/13/0305/10/15643_269388816.shtml):

  • 将转移到老年代的对象数量降低到最小;
  • 减少full GC的执行时间;

为了达到上面的目的,一般地,你需要做的事情有:

  • 减少使用全局变量和大对象;
  • 调整新生代的大小到最合适;
  • 设置老年代的大小为最合适;
  • 选择合适的GC收集器;

在上面的4条方法中,用了几个“合适”,那究竟什么才算合适,一般的,请参考上面“收集器搭配”和“启动内存分配”两节中的建议。但这些建议不是万能的,需要根据您的机器和应用情况进行发展和变化,实际操作中,可以将两台机器分别设置成不同的GC参数,并且进行对比,选用那些确实提高了性能或减少了GC时间的参数。

真正熟练的使用GC调优,是建立在多次进行GC监控和调优的实战经验上的,进行监控和调优的一般步骤为:
1,监控GC的状态
使用各种JVM工具,查看当前日志,分析当前JVM参数设置,并且分析当前堆内存快照和gc日志,根据实际的各区域内存划分和GC执行时间,觉得是否进行优化;
2,分析结果,判断是否需要优化
如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化;如果GC时间超过1-3秒,或者频繁GC,则必须优化;
注:如果满足下面的指标,则一般不需要进行GC:

  • Minor GC执行时间不到50ms;
  • Minor GC执行不频繁,约10秒一次;
  • Full GC执行时间不到1s;
  • Full GC执行频率不算频繁,不低于10分钟1次;

 

3,调整GC类型和内存分配
如果内存分配过大或过小,或者采用的GC收集器比较慢,则应该优先调整这些参数,并且先找1台或几台机器进行beta,然后比较优化过的机器和没有优化的机器的性能对比,并有针对性的做出最后选择;
4,不断的分析和调整
通过不断的试验和试错,分析并找到最合适的参数
5,全面应用参数
如果找到了最合适的参数,则将这些参数应用到所有服务器,并进行后续跟踪。

 

  • 大小: 10.8 KB
  • 大小: 245.1 KB
  • 大小: 266.8 KB
  • 大小: 103.2 KB
分享到:
评论

相关推荐

    Linux下如何查看某一进程的CPU占用率_linux进程cpu使用率.zip

    理解这些命令的使用,不仅可以帮助你定位到CPU占用高的进程,还有助于排查系统性能问题。例如,如果一个进程的CPU占用率持续过高,可能表明该进程存在性能瓶颈或者死循环。这时,可以结合`strace`命令跟踪进程调用,...

    交换机CPU使用率高故障处理.zip

    本专题主要探讨交换机CPU使用率高故障的识别、原因分析以及解决策略。 首先,我们需要理解交换机CPU使用率高的表现。通常,这可以通过交换机的管理界面或监控工具来观察。当CPU利用率长时间维持在80%以上,甚至达到...

    获取windows中cpu使用率最高的前5个进程

    了解CPU使用率最高的前五个进程可以帮助我们识别可能导致系统运行缓慢或资源占用过高的原因。以下是一些关于如何获取这些信息以及相关知识点的详细说明: 1. **任务管理器**:这是最直观且易于使用的工具,可以通过...

    专题--服务器CPU使用率高的原因分析与解决办法

    服务器 CPU 使用率高的原因分析与解决办法 服务器 CPU 使用率高是服务器管理员经常遇到的问题之一。造成 CPU 使用率高的原因有很多,我们可以从硬件、系统进程、应用软件和病毒木马四个方面来分析。 一、硬件因素 ...

    amtlib.dll-DWCS6运行是CPU占用高的补丁

    网上很多amtlib.dll补都会导致电脑的CPU占用增高,导致风扇狂转,这个amtlib.dll补丁可以完美的解决这个问题,用法和原来一样,只要替换安装目录下的amtlib.dll 就可以了,赶紧试试看吧!

    VMware虚拟机NAT CPU使用率高解决办法

    VMware虚拟机NAT CPU使用率高解决办法

    AI导致CPU占用过高.rar

    AI导致CPU占用过高.rar 具体可以参考: https://geo-ai.blog.csdn.net/article/details/124564268?spm=1001.2014.3001.5502

    高CPU占用 高CPU利用率 程序

    高CPU占用 高CPU利用率 程序高CPU占用 高CPU利用率 程序

    ideacpu占用率过高[造成cpu占用率过高的原因].pdf

    【CPU占用率过高】是许多计算机用户经常遇到的问题,尤其在使用IDE(集成开发环境)如Idea时,CPU资源的消耗可能导致系统运行缓慢甚至变得不可用。以下是一些可能导致CPU占用率过高的原因及其解决方案: 1. **防...

    sqlserver cpu使用率高排查

    SQL Server CPU 使用率高排查 在使用 SQL Server 过程中,可能会出现 CPU 使用率高达 100% 的情况,这种情况可能是由于多种原因导致的。下面将从几个方面对此进行分析和排查。 1. Max degree of Parallelism 设置...

    Delphi CPU占用率

    本文将深入探讨如何使用Delphi进行CPU占用率的实时监控,以及这背后涉及的关键知识点。 首先,要理解CPU占用率的概念。CPU占用率是指CPU在给定时间内被占用执行任务的比例,它反映了系统负载情况。当CPU占用率过...

    C# 任务管理器及控制台获取CPU占用率前3位进程

    本项目专注于使用C#编程语言实现一个任务管理器功能,特别关注于获取CPU占用率较高的前三个进程,这对于识别系统性能瓶颈、优化资源分配以及诊断潜在问题具有重要价值。 首先,我们要理解CPU占用率的概念。CPU占用...

    WIN10LTSC2021一键修复输入法BUG解决cpu占用高

    微软最新的WIN10 LTSC 2021终于出来了,基于WIN10 21H2版本。于是安装了原本体验了一下,发现了史上以来最大的BUG。在这里描述一下问题现象,和网上找来的解决方案总结,避免大家走弯路...解决WSAPPX进程占用CPU超高。

    c++获取cpu使用率(包含系统和单进程)

    系统整体的CPU使用率是所有进程占用CPU时间的总和除以总的CPU时间,而单进程的CPU使用率则是该进程独占CPU的时间占比。 获取系统整体CPU使用率,可以利用操作系统的API或者系统调用来实现。在Linux系统中,可以通过...

    Foobar2000 CPU占用率居高不下.pdf

    【Foobar2000 CPU占用率居高不下】的问题可能是由于软件内部处理音频时的资源管理不当导致的。Foobar2000是一款高级的音频播放器,它支持多种音频格式和插件,但有时可能会因为开启过多的DSP模块或不恰当的输出设置...

    symantec占用cpu较高的解决办法

    如果以上操作完成后,还是无法解决 CPU 占用率过高的问题,就需要将防病毒软件病毒定义升级至最新版本,对全盘进行扫描查杀是否存在病毒。对于顽固的病毒,需要将该终端离线,在安全模式下进行彻底查杀。 Symantec...

    cpu以及内存使用率

    常见的导致CPU使用率高的原因包括运行大型软件、病毒或恶意软件活动、后台进程过多等。降低CPU使用率的方法有关闭不必要的程序、优化软件配置、升级硬件,或者进行病毒扫描。 内存使用率则是指系统当前分配给运行中...

    如何降低CPU使用率?

    ### 如何降低CPU使用率? #### 一、正常软件造成的CPU占用率100% ...通过上述方法,你可以有效地诊断并解决大多数与CPU使用率过高相关的常见问题。如果问题仍然存在,请考虑寻求专业技术人员的帮助。

    win10cpu占用高怎么办.docx

    在使用 Windows 10 操作系统时,用户可能会遇到 CPU 占用率居高不下的问题,这可能是由于多种原因引起的。以下是解决 Windows 10 CPU 占用高的问题的四种方法: 方法一:修改注册表 Windows 10 的 Cortana 功能...

Global site tag (gtag.js) - Google Analytics