=2013-06-04 11:12:17,355 ERROR [Timer-6] timer.ClaspHandsTimer (ClaspHandsTimer.java:67) - xxx gmlc exception is:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:124)
at com.xxx.util.SocketUtil.sendMsg(SocketUtil.java:116)
at com.xxx.timer.ClaspHandsTimer.run(ClaspHandsTimer.java:63)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
=2013-06-04 11:12:18,295 ERROR [Timer-5] timer.HeartBeatTimer (HeartBeatTimer.java:74) - xxxgmlc exception is:
java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:124)
at com.xxx.util.SocketUtil.sendMsg(SocketUtil.java:116)
at com.xxx.timer.HeartBeatTimer.run(HeartBeatTimer.java:70)
at java.util.TimerThread.mainLoop(Timer.java:512)
at java.util.TimerThread.run(Timer.java:462)
在定位系统中出现此异常,找了很多资料,最后终于解决:
有可能是linux的线程机制会产生JVM出错的问题,特别是在连接高峰期间经常出现这样的问题
解决办法是在环境变量中设置: _JAVA_SR_SIGNUM = 12 基本就可以解决。
在windows环境变量中设置: _JAVA_SR_SIGNUM =12, 若Linux下用 export _JAVA_SR_SIGNUM=12, 基本就可以解决.
linux:
export _JAVA_SR_SIGNUM=12
source /etc/profile
sun的解释:
--posted by: cooper
Below is a clipping from Sun on working around JVM crashes under high
thread counts in the JVM 1.3 for Linux
On Linux, use a larger signal number for hotspot thread
suspension/resumption handler. The signal number being used is
specified by environment variable _JAVA_SR_SIGNUM. Setting it to a
number larger than SIGSEGV (11) will solve the problem. A good number
to use is 12, which is SIGUSR2. Using signal 16 to work around the
problem might have potential problems. So on tcsh, "setenv
_JAVA_SR_SIGNUM 12" can solve the problem.