java.net.PlainSocketImpl.socketAvailable CPU 100%

xiaoyu 2013-05-28
今天遇到一个很奇怪的问题,发现服务器一个java 线程cpu一直100% (sys很高), 然后做了一个stack dump:

"Thread-0" prio=10 tid=0x0952f000 nid=0x855 runnable [0x2e2d6000]
   java.lang.Thread.State: RUNNABLE
	at java.net.PlainSocketImpl.socketAvailable(Native Method)
	at java.net.PlainSocketImpl.available(PlainSocketImpl.java:472)
	- locked <0x34960f58> (a java.net.SocksSocketImpl)
	at java.net.SocketInputStream.available(SocketInputStream.java:217)
	at com.mysql.jdbc.util.ReadAheadInputStream.available(ReadAheadInputStream.java:232)
	at com.mysql.jdbc.MysqlIO.clearInputStream(MysqlIO.java:949)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2426)
	at com.mysql.jdbc.MysqlIO.disableMultiQueries(MysqlIO.java:3771)
	at com.mysql.jdbc.PreparedStatement.executePreparedBatchAsMultiStatement(PreparedStatement.java:1675)
	- locked <0x349c0468> (a com.mysql.jdbc.JDBC4Connection)
	at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1463)
	- locked <0x349c0468> (a com.mysql.jdbc.JDBC4Connection)
	at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
     .......



然后到了Mysql Server去使用show full processlist; 发现也没有任何sql被执行。 比较可惜的是我没有做core dump 就重启了应用(做了几次jstack -m pid 都失败了)。

我以为是网卡中断问题导致cpu 100%, 但是又想如果网卡中断问题,应该总有结束的时候(我可是等了快一个小时了,都没有发现恢复)(PS:不过查看网卡中断,的确这个通讯的网卡中断都是使用一个CPU的)

环境是:
2.6.38-8-generic-pae #42-Ubuntu SMP
java 6u31
mysql JDBC driver 5.1.22
mysql 5.5 server
xia5203166 2014-04-22
我也是这个问题 请教下 最后是怎么解决的?
RednaxelaFX 2014-04-23
楼主提到的stack trace可能调用到的native方法有这几个:

Java_java_net_PlainSocketImpl_socketAvailable
http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/0d7eefa2946a/src/solaris/native/java/net/PlainSocketImpl.c#l862

JVM_SocketAvailable
http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/942fdd23d6f5/src/share/vm/prims/jvm.cpp#l3665

os::socket_available
http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/942fdd23d6f5/src/os/linux/vm/os_linux.cpp#l4667

ioctl
http://man7.org/linux/man-pages/man2/ioctl.2.html

这里开始我就不熟悉了。楼主看到这里有啥思路不?
rink1969 2014-08-20
刚才一个朋友碰到同样的问题
在网上搜了一下,问题在这里
http://bugs.mysql.com/bug.php?id=73053
是linux内核(3.6及以下版本)的一个bug导致的,上面的帖子里面有内核补丁的链接
到处都是坑啊~~~
xia5203166 2014-09-28
据说是mysql-connnectoer的一个bug
xiaoyu 2014-11-29
rink1969 写道
刚才一个朋友碰到同样的问题
在网上搜了一下,问题在这里
http://bugs.mysql.com/bug.php?id=73053
是linux内核(3.6及以下版本)的一个bug导致的,上面的帖子里面有内核补丁的链接
到处都是坑啊~~~


应该就是这个问题了
Global site tag (gtag.js) - Google Analytics