linux tomcat java CPU 使用 过高 如何解决cpu使用过高

使用tomcat做为java容器cpu占用偏高的原因,目前公司服务器上面跑的ubuntu环境nginx+tomcat+mysql运行一段时间之后java进程cpu偏高会出现网站打不开的情况。所以进行了如下分析

一,首先查看tomcat日志如果囿出现OOM错误(内存溢出)可以对应的加大jvm的内存大小。

2修改参数之后重启tomcat,查看参数是否生效

经过上面的修改应该就可以完成对tomcat进程飙高的情况了如果运行一段时间之后通过jstat查看各个内存代的使用情况,发现老年代100% 一直在触发FULL GC 那就是内存大小的原因了有条件的可以添加内存,没条件的可以设置 每天重启一次tomcat或者一个星期重启一次来释放jvm内存问题解决。

二如果想查看是否是代码层的原因,就需要另外的办法

1使用命令jstack命令查看占用CPU最高的线程。

一个简单的监控脚本查看JAVA进程占用CPU最高的线程在做什么以此来分析是否是代码层的问题。

}

java性能调优里有cpu消耗分析现在我紦cpu使用过高的分析过程记录下来(一般分us过高,或者sy过高本章中以us过高为例)

1、linux下使用top或者pidstat命令查看进程消耗情况,下图使用top命令

us使用過高也叫用户空间占用cpu过高。进程为:31808

2、接下来我们查找占用cpu较高的线程按H键可以切换显示进程或者线程,然后按回车如下图

可以看到有两个线程较高,31849和31850

3、我们先查找31849线程过高的代码先把它转化为16进制,可以使用printf %x xxx如下图,转化后为7c69

4、最后使用jstack命令定位代码(设置好jdk的环境变量)其中 -A 4 是查找所在行的后4行,7c69为16进制线程pid

下面为我测试用的线程类

原因:执行线程没有任何挂起动作,且一直执行導致CPU 没有机会去调度执行其他的线程。导致us过高

ps:sy过高的原因一般为线程数过过,竞争激烈上下文切换频繁。

}

我要回帖

更多关于 如何解决cpu使用过高 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信