生产环境java应用 CPU使用率过高问题排查
来源:互联网 发布:淘宝美国章鱼哥翻新 编辑:程序博客网 时间:2024/05/10 15:55
最近碰到几次java应用某台机器cpu比较高的情况,而且重启后基本上都会恢复正常。
正常情况下:
应用使用CPU在 :30%--40%
异常情况下:
CPU利用率在:80%---90%
在网上查了下,一般java应用cpu过高基本上是因为
1.程序计算比较密集
2.程序死循环
3.程序逻请求堵塞
分析步骤:
1.登陆应用机器,top命令查看 当前占用cpu资源最多的,一般排名第一位肯定是java进程
一般也可能存在多个java进程
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17766 nobody 20 0 5818m 2.4g 14m S 51.8 65.2 144:09.75 java
2.查看进程的哪个线程占用cpu比较高
取线上另外一台正常情况下利用cpu比较高的应用:通过
ps -mp PID号 -o THREAD,tid,time
可以可看到线程ID和线程使用的时间。。。
# ps -mp 18429 -o THREAD,tid,time
USER %CPU PRI SCNT WCHAN USER SYSTEM TID TIME
spider 93.8 - - - - - - 5-21:06:57
spider 0.0 19 - futex_ - - 18429 00:00:00
spider 93.7 19 - - - - 18430 5-21:01:16
spider 0.0 19 - futex_ - - 18431 00:00:10
TID为18430的线程利用cpu资源比较多,怎么能看到这个线程在干什么呢?
需要将18430转换为16进制,便于在jvm堆栈中查找。
printf "%x\n" 18430
通过jstack命令来查看下当前内存状态:
#sudo -u nobody jstack 18429 |grep 47fe -A 60 |less (或者切换到java程序运行的账户)
"main" prio=10 tid=0x00002aff38005800 nid=0x47fe runnable [0x00002aff35db4000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAvailable(Native Method)
at java.net.PlainSocketImpl.available(PlainSocketImpl.java:472)
- locked <0x00000007434484b0> (a java.net.SocksSocketImpl)
at java.net.SocketInputStream.available(SocketInputStream.java:217)
at com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:231)
at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:940)
剩下的事情,如果是自己写的代码就很好办了。
如果是有对应开发人员,接下来就是找开发人员确认这段代码是否可以优化。
本文出自 “运维者说:从菜鸟到老鸟” 博客,请务必保留此出处http://liuqunying.blog.51cto.com/3984207/1346864
- 生产环境java应用 CPU使用率过高问题排查
- 生产环境CPU过高问题
- java cpu 过高问题排查
- Linux环境mysql cpu过高问题排查
- java进程CPU过高问题如何排查?
- java cpu过高排查
- 生产环境下CPU过高故障排查--top、ps、grep、printf、jstack等命令排查
- 生产环境下CPU过高故障排查--top、ps、grep、printf、jstack等命令排查
- Java CPU使用率过高分析
- 进程cpu过高问题排查
- cpu load过高问题排查
- (一)JAVA CPU占用过高问题排查(linux)
- 线上java程序CPU占用过高问题排查
- 记一次java程序CPU占用过高问题排查
- 生产环境下JAVA进程高CPU占用故障排查
- 生产环境下JAVA进程高CPU占用故障排查
- 生产环境下JAVA进程高CPU占用故障排查
- 生产环境下JAVA进程高CPU占用故障排查
- Mysql字符类型和字符长度的区别
- cxf和spring集成注入值为NULL问题
- oracle的存储过程与函数
- 链表反转
- mysql JDBC
- 生产环境java应用 CPU使用率过高问题排查
- css学习之路(2)--css选择器
- Oracle DBA最常用的269条命令
- Arcgis for JS实现台风运动路径与影像范围的显示
- impdp因致命错误终止 ORA-7445 [kpodpals]
- WebService的开发、部署、调用
- 定时任务:Java中Timer和TimerTask的使用
- mysql系统性能优化方案
- 宝剑锋从磨砺出——编译器gcc的使用