栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

性能问题定位二:隔段时间某个进程导致CPU升高的问题

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

性能问题定位二:隔段时间某个进程导致CPU升高的问题

发现问题过程

首先打开项目服务器,此服务器部署了很多项目,看他在没有压力情况下,资源使用率

命令:top

load average:负载也不高

1个进程在运行

zombie:0,没有僵尸进程

2个CPU:user和sys 都不高

mem:还剩2个G,充足

再看进程CPU使用情况:都比较底

但是在观察一段时间返现进程突然升高,然后又降低了

这是怎么回事?

为了进一步查看CPU使用率

命令:mpstat -P ALL 1 观察一段时间

如图,进一步验证了CPU隔断时间就会升高,那是那个进程或线程导致升高呢

命令:pidstat -ut 1,观察一段时间

如图:48秒和59秒分别出现,看到都是进程:10764中的线程:10814,导致CPU升高,所以,定位线程后,下面就需要定位为什么这个线程导致CPU升高

命令:printf "%xn" 10814(TID)十进制转成16进制

命令:jstack 10764 | grep 2a3e -A 30,如果没有出现多试几次此命令

[adminm@test_tomcat1 ~]$ jstack 10764 | grep 2a3e -A 30

"ContainerBackgroundProcessor[StandardEngine[Catalina]]" #30 daemon prio=5 os_prio=0 tid=0x00007fea0c0c1800 nid=0x2a3e runnable [0x00007fe9ed9d1000]

java.lang.Thread.State: RUNNABLE

at java.io.UnixFileSystem.canonicalize0(Native Method)

at java.io.UnixFileSystem.canonicalize(UnixFileSystem.java:172)

at java.io.File.getCanonicalPath(File.java:618)

at org.apache.catalina.webresources.AbstractFileResourceSet.file(AbstractFileResourceSet.java:90)

at org.apache.catalina.webresources.DirResourceSet.getResource(DirResourceSet.java:101)

at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)

at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)

at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)

at org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)

at org.apache.catalina.loader.WebappClassLoaderbase.modified(WebappClassLoaderbase.java:705)

at org.apache.catalina.loader.WebappLoader.modified(WebappLoader.java:342)

at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:286)

at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5612)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.processChildren(Containerbase.java:1392)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.processChildren(Containerbase.java:1396)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.processChildren(Containerbase.java:1396)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.run(Containerbase.java:1364)

at java.lang.Thread.run(Thread.java:748)

[adminm@test_tomcat1 ~]$ jstack 10764 | grep 2a3e -A 30

"ContainerBackgroundProcessor[StandardEngine[Catalina]]" #30 daemon prio=5 os_prio=0 tid=0x00007fea0c0c1800 nid=0x2a3e runnable [0x00007fe9ed9d1000]

java.lang.Thread.State: RUNNABLE

at java.util.zip.ZipFile.getEntry(Native Method)

at java.util.zip.ZipFile.getEntry(ZipFile.java:316)

- locked <0x00000000fb61e1c0> (a java.util.jar.JarFile)

at java.util.jar.JarFile.getEntry(JarFile.java:240)

at java.util.jar.JarFile.getJarEntry(JarFile.java:223)

at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.getArchiveEntry(AbstractSingleArchiveResourceSet.java:97)

at org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(AbstractArchiveResourceSet.java:257)

at org.apache.catalina.webresources.StandardRoot.getResourceInternal(StandardRoot.java:281)

at org.apache.catalina.webresources.Cache.getResource(Cache.java:62)

at org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:216)

at org.apache.catalina.webresources.StandardRoot.getClassLoaderResource(StandardRoot.java:225)

at org.apache.catalina.loader.WebappClassLoaderbase.modified(WebappClassLoaderbase.java:705)

at org.apache.catalina.loader.WebappLoader.modified(WebappLoader.java:342)

at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:286)

at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:5612)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.processChildren(Containerbase.java:1392)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.processChildren(Containerbase.java:1396)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.processChildren(Containerbase.java:1396)

at org.apache.catalina.core.Containerbase$ContainerBackgroundProcessor.run(Containerbase.java:1364)

at java.lang.Thread.run(Thread.java:748)

此时找开发协助定位问题

解决方案

命令:ps aux|grep 10764

发现是中台后台项目,是使用了Tomcat启动的,进入Tomcat配置文件

命令:vi /datadisk/tomcat/tomcat-obdpadmin-8082/conf/server.xml

-----------------------------

resourceName="UserDatabase"/>

unpackWARs="true" autoDeploy="true">

prefix="localhost_access_log" suffix=".txt"

pattern="%h %l %u %t "%r" %s %b" />

--------------------------------------------

修改后保存:wq!

命令:kill -9 10764

/datadisk/tomcat/tomcat-obdpadmin-8082/bin/startup.sh

tail -f /datadisk/tomcat/tomcat-obdpadmin-8082/logs/catalina.out

项目正常起来后

再次使用命令:pidstat -ut 1,观察一段时间

如图,没有再次升高,解决问题

为什么这么改呢?

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/467845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号