cpu高负载解决思路

服务器上tomcat启动之后,使用top查看cpu使用率,竟然达到200%,虽然服务器配置有8核,但是业务量一大,扛不住滴。于是,通过以下方法排查问题:

1、查看占用cpu高的进程数:

根据top命令,发现PID为14586的Java进程占用CPU高达200%,出现故障。

通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么精确到问题所在呢?

首先显示线程列表:

ps -mp pid -o THREAD,tid,time

找到耗时最高的线程id为:14634,14635

其次将需要的线程ID转换为16进制格式:

printf "%x\n" tid

最后打印线程的堆栈信息:

jstack pid |grep tid -A 30

同样的,看下另外一个线程。也是这样的情况,经过分析,开发认为是之前版本获取数据的线程一直处于等待状态,更改版本为:每隔5分钟启动进程,加入容器功能等等。细节要开发才明白了。

最后,总结下排查CPU故障的方法和技巧有哪些:

1、top命令:Linux命令。可以查看实时的CPU使用情况。也可以查看最近一段时间的CPU使用情况。

2、PS命令:Linux命令。强大的进程状态监控命令。可以查看进程以及进程中线程的当前CPU使用情况。属于当前状态的采样数据。

3、jstack:Java提供的命令。可以查看某个进程的当前线程栈运行情况。根据这个命令的输出可以定位某个进程的所有线程的当前运行状态、运行代码,以及是否死锁等等。

4、pstack:Linux命令。可以查看某个进程的当前线程栈运行情况。

时间: 2024-10-25 06:38:55

cpu高负载解决思路的相关文章

Java多线程与高并发:高并发解决思路

Java多线程与高并发:高并发解决思路 小玲子之凌空蹈虚关注 122018.11.21 09:55:30字数 1,553阅读 4,228 來源:http://www.wangtianyi.top/blog/2018/05/11/javaduo-xian-cheng-yu-gao-bing-fa-liu-gao-bing-fa-jie-jue-si-lu/ 缓存并发 image.png 当大量请求访问同一个没有被缓存的数据的时候,会发送大量请求给数据库,导致数据库压力过大,还会导致一致性问题,所以

磁盘I/O很高的解决思路

介绍 磁盘IO突然很高是运维人员经常碰到的问题,这是由于有大量的磁盘读和写造成的,通常发生在数据库身上,然而发生的场景各种各样.本文举几个例子阐述解决思路. 正文 找到是什么程序在大量的进行读写操作.可以通过监控软件(如zabbix)或工具(如atop)查看磁盘IO的历史记录. 本文假设场景发生在xen虚拟机上,在母机上用iostat查看IO状态 # iostat -xdk 2 输出如下: Device:         rrqm/s   wrqm/s     r/s     w/s    rk

关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法

原地址 http://blog.sina.com.cn/s/blog_912e77480101nuif.html 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要好半天才反映过来,看到任务管理器有多个winlogon.exe进程和占用CPU高,百度查了下,说是有人在破解远程,最后按教程修改3389端口和改密码,重启后CPU直接降下来了,winlogon.exe进程也只有一个,一切恢复正常. 我太懒了,之前知道winlogon.exe进程多,但没这几天严重,今天查

关于各地区并发高的解决思路

各位同仁,目前各地区云平台的因非冠病毒引发的学生大量使用,对云平台的并发能力要求极高.单台服务器应对教师用户是完全可以通过优化解决的,但如果再加上十几倍的学生用户,就不是一台服务器可以处理的事情了.经分析,我个人认为主要的矛盾点在于MYSQL数据库的压力太高,究其原因有两个:(1)研发人员没有很好的通过缓存对数据库进行保护,造成大量查询穿透.(2)数据库到目前为止,没有横向扩展的能力. 第一个原因历史很久,短时间内无法根本解决,目前只能通过技术方案+堆硬件服务器(注意:最好是多台物理服务器,如果

CPU高负载的排查办法

今天线上一个tomcat进程cpu负载100%.按以下步骤查出原因. 1.执行top -c命令,找到cpu最高的进程的id 2.执行top -H -p pid,这个命令就能显示刚刚找到的进程的所有线程的资源消耗情况.找到CPU负载高的线程tid 8627, 把这个数字转换成16进制,21B3. 3.执行jstack -l pid,拿到进程的线程dump文件.这个命令会打出这个进程的所有线程的运行堆栈. 4.用记事本打开这个文件,搜索"21B3",就是搜一下16进制显示的线程id.搜到后

.Net高并发解决思路

转自: 本文如有不对之处,欢迎各位拍砖扶正.另源码在文章最下面,大家下载过后先还原一下nuget包,需要改一下redis的配置,rabbitmq的配置以及Ef的连接字符串.另外使用的是CodeFirst,先update-database生成数据库后再进行操作 高并发 高并发一直是网站上线后会遇到的一个严峻的考验,渡过了一切都好,渡不过就是宕机. 在电商时代如此发达的今天,高并发无此不在双十一 .618.双十二,还有雷猴王的某米手机抢购.首先我们要分析高并发究竟会给我们开发者带来什么样的挑战 大量

Visual Studio 2012安装VASSISTX插件后导致CPU高的解决办法

笔者一直都喜欢用VAX插件来做C++的开发,但发现VS2012安装了VAX后,CPU占用超级高,有时界面卡死得非常厉害.我卸了又装,升级最新版,都不管用. 直到有天,看到网友说:VS2012的sdf文件和pch文件夹很大,可以设置个临时目录进行存放,以便及时删除而节约硬盘空间.所以我也跟着做了如下设置: 在选项->文本编辑器->C/C++->高级里,把回退位置设为TRUE,并指定了回退位置的保存文件夹. 设置完后,我突然发现工程不会再让CPU跑到50%以上,连续开了3个VS工程,也都运行

Linux系统CPU高负载处理

公司在阿里云的Linux服务器CPU负载高达90几,太吓人了,现在把处理的过程记录如下:1 通过top定位到耗费CPU资源较多的进程,假设进程名为"abc",PID为1112 定位到进程目录下 cd /proc/111 ll exe3 如果发现不是正常的应用,可以直接删除对应的可执行文件4 如果exe没有指向的可执行文件,则:ps -el | grep 111 查看其进程状态,如果是D或Z,则kill无法将其杀死,因此需要找到其父进程,并将父进程杀死(如果父进程确实不需要的话): 查看

JAVA高性能高并发解决思路

1.代码质量,不要性能低下的sql和代码.有的一条sql搞定的事,有人用了多个循环才能搞定.取决于程序员的经验!2.项目前期的规划,由于java历史多用于企业开发,导致好多团队至今依然思想僵化.其实并发最高的是互联网,他们有很多非常好的实践经验和架构是可以直接照搬过来用的.tomcat的并发取决于每个请求执行的占用时常,如果一个请求耗时1秒,那按tomcat开启的线程数默认就几十个.江湖谣传tomcat并发400/秒左右,但是我又看到有的人说单机过万/秒,其实就是测试场景中请求执行时间不同,结果