java CPU 100% 排查

java CPU 100% 排查

一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。 (友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。 通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢? 首先显示线程列表: ps -mp pid -o THREAD,tid,time 找到了耗时最高的线程28802,占用CPU时间快两个小时了! 其次将需要的线程ID转换为16进制格式: printf "%x\n" tid 最后打印线程的堆栈信息: jstack pid |grep tid -A 30 找到出现问题的代码了! 现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106) ShortSocketIO是应用封装的一个用短连接Socket通信的工具类。readBytes函数的代码如下: public byte[] readBytes(int length) throws IOException { if ((this.socket == null) || (!this.socket.isConnected())) { throw new IOException("++++ attempting to read from closed socket"); } byte[] result = null; ByteArrayOutputStream bos = new ByteArrayOutputStream(); if (this.recIndex >= length) { bos.write(this.recBuf, 0, length); byte[] newBuf = new byte[this.recBufSize]; if (this.recIndex > length) { System.arraycopy(this.recBuf, length, newBuf, 0, this.recIndex - length); } this.recBuf = newBuf; this.recIndex -= length; } else { int totalread = length; if (this.recIndex > 0) { totalread -= this.recIndex; bos.write(this.recBuf, 0, this.recIndex); this.recBuf = new byte[this.recBufSize]; this.recIndex = 0; } int readCount = 0; while (totalread > 0) { if ((readCount = this.in.read(this.recBuf)) > 0) { if (totalread > readCount) { bos.write(this.recBuf, 0, readCount); this.recBuf = new byte[this.recBufSize]; this.recIndex = 0; } else { bos.write(this.recBuf, 0, totalread); byte[] newBuf = new byte[this.recBufSize]; System.arraycopy(this.recBuf, totalread, newBuf, 0, readCount - totalread); this.recBuf = newBuf; this.recIndex = (readCount - totalread); } totalread -= readCount; } } } 问题就出在标红

植物妈妈蚊香液补充液家用无味孕妇婴幼儿童专用宝宝插电驱蚊神器

植物妈妈蚊香液补充液家用无味孕妇婴幼儿童专用宝宝插电驱蚊神器

#拼多多特惠 植物妈妈蚊香液补充液家用无味孕妇婴幼儿童专用宝宝插电驱蚊神器 【原价】 7.74 【优惠券】1.00 【券后价】6.74 点击: http://f-li.cn/BXG 领券购买

爱丽丝无菌避孕套 情趣特大颗粒高潮刺激安全套 爱丽丝官网12只装

爱丽丝无菌避孕套 情趣特大颗粒高潮刺激安全套 爱丽丝官网12只装

#淘宝特惠 爱丽丝无菌避孕套 情趣特大颗粒高潮刺激安全套 爱丽丝官网12只装 【原价】 79.00 【优惠券】2.00 【券后价】77.00 长按复制整段文字,打开手机淘宝领券购买8:/👈/durOcqLPiM5/

日本Maxell麦克赛尔CR2032CR2025CR2016进口汽车钥匙遥控纽扣电池

日本Maxell麦克赛尔CR2032CR2025CR2016进口汽车钥匙遥控纽扣电池

【今日特惠】日本Maxell麦克赛尔CR2032CR2025CR2016进口汽车钥匙遥控纽扣电池 【原价】 11.90 【优惠券】2.00 【券后价】9.90 长按复制整段文字,打开手机淘宝领券购买$mvTL1tCUGgR$

STA斯塔新年盲箱盲袋虎年文具套装手绘绘画专用大礼包小学生惊喜奖品礼盒初中生奖励 马克笔/荧光笔儿童礼物

STA斯塔新年盲箱盲袋虎年文具套装手绘绘画专用大礼包小学生惊喜奖品礼盒初中生奖励 马克笔/荧光笔儿童礼物

#淘宝特惠 STA斯塔新年盲箱盲袋虎年文具套装手绘绘画专 【原价】 19.90 【优惠券】10.00 【券后价】9.90 长按复制整段打开手机淘宝领券购买8:/👈/w6tS29OJy2N/

联系我们

联系电话

4000-640-466

联系邮箱

service@f-li.cn

办公地址

上海黄浦区外滩源1号

谢谢,您的信息已成功发送。
请填写信息。