怎么解决线上服务器CPU占用率高如何排查定位问题


本篇文章给大家分享的是有关怎么解决线上服务器CPU占用率高如何排查定位问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。定位进程登录服务器,执行top命令,查看CPU占用情况:$top
PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
1893admin2007127m2.6g38mS181.732.610:20.26javatop命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。通过以上命令,我们可以看到,进程ID为1893的Java进程的CPU占用率达到了181%,基本可以定位到是我们的Java应用导致整个服务器的CPU占用率飙升。定位线程我们知道,Java是单进程多线程的,那么,我们接下来看看PID=1893的这个Java进程中的各个线程的CPU使用情况,同样是用top命令:$top-Hp1893
PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND
4519admin2007127m2.6g38mR18.632.60:40.11java通过top -Hp 1893命令,我们可以发现,当前1893这个进程中,ID为4519的线程占用CPU最高。定位代码通过top命令,我们目前已经定位到导致CPU使用率较高的具体线程, 那么我么接下来就定位下到底是哪一行代码存在问题。首先,我们需要把4519这个线程转成16进制:$printf%x4519
11a7接下来,通过jstack命令,查看栈信息:$sudo-uadminjstack1893|grep-A20011a7
“HSFBizProcessor-DEFAULT-8-thread-5″#500daemonprio=10os_prio=0tid=0x00007f632314a800nid=0x11a2runnable[0x000000005442a000]
java.lang.Thread.State:RUNNABLE
atsun.misc.URLClassPath$Loader.findResource(URLClassPath.java:684)
atsun.misc.URLClassPath.findResource(URLClassPath.java:188)
atjava.net.URLClassLoader$2.run(URLClassLoader.java:569)
atjava.net.URLClassLoader$2.run(URLClassLoader.java:567)
atjava.security.AccessController.doPrivileged(NativeMethod)
atjava.net.URLClassLoader.findResource(URLClassLoader.java:566)
atjava.lang.ClassLoader.getResource(ClassLoader.java:1093)
atjava.net.URLClassLoader.getResourceAsStream(URLClassLoader.java:232)
atorg.hibernate.validator.internal.xml.ValidationXmlParser.getInputStreamForPath(ValidationXmlParser.java:248)
atorg.hibernate.validator.internal.xml.ValidationXmlParser.getValidationConfig(ValidationXmlParser.java:191)
atorg.hibernate.validator.internal.xml.ValidationXmlParser.parseValidationXml(ValidationXmlParser.java:65)
atorg.hibernate.validator.internal.engine.ConfigurationImpl.parseValidationXml(ConfigurationImpl.java:287)
atorg.hibernate.validator.internal.engine.C 香港云主机onfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:174)
atjavax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
atcom.test.common.util.BeanValidator.validate(BeanValidator.java:30)通过以上代码,我们可以清楚的看到,BeanValidator.java的第30行是有可能存在问题的。3问题解决接下来就是通过查看代码来解决问题了,我们发现,我们自定义了一个BeanValidator,封装了Hibernate的Validator,然后在validate方法中,通过Validation.buildDefaultValidatorFactory().getValidator()初始化一个Validator实例,通过分析发现这个实例化的过程比较耗时。我们重构了一下代码,把Validator实例的初始化提到方法外,在类初始化的时候创建一次就解决了问题。4总结以上,展示了一次比较完成的线上问题定位过程。主要用到的命令有:top 、printf 和 jstack另外,线上问题排查还可以使用Alibaba开源的工具Arthas进行排查,以上问题,可以使用一下命令定位:thread-n3//查看cpu占比前三的线程以上就是怎么解决线上服务器CPU占用率高如何排查定位问题,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注开发云行业资讯频道。

相关推荐: win7丢失MSVCP120.dll怎么解决

本篇内容主要讲解“win7丢失MSVCP120.dll怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win7丢失MSVCP120.dll怎么解决”吧!方法/步骤:1.首先从他人的电脑上复制mxvcp120.…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/12 12:43
Next 08/12 12:43

相关推荐