微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线程已处于活动状态 xxxx 毫秒并且可能挂起 - 在方法执行中修改 int 原语的 While 循环中

如何解决线程已处于活动状态 xxxx 毫秒并且可能挂起 - 在方法执行中修改 int 原语的 While 循环中

下面给出的是 Groovy util 文件中的代码片段,并从不同的 groovy 文件调用,该文件基本上是使用 java.lang.groovyObject.invokeMethod(methodName,paramvalues) 从 Java 类中调用

运行时的参数值:x 和 y 的 0 和 4708。

在 WebSphere 中作为应用程序的一部分运行时,有几个挂起的线程问题正好在线上报告 inc +=base ,这是在while循环内。 错误和跟踪如下,

ThreadMonitor W WSVR0605W:线程“WebContainer : 2”(000001b0) 已经活动了 607463 毫秒并且可能被挂起。该服务器中总共有 1 个线程可能挂起。

在 xxx.xxxx.xxxxx.getIncrementValue(FileName:LinNumber) . . 在 Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java : 90) . . 在 groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)

private static int getIncrementValue(int x,int y){
 int base = 100;
 int range = 0;
 if(x < 0){
   range = x;
   range = y + Math.abs(range);
 }else{
   range = y;
}
int inc = (range) /6;
if((range / 10) == 0){
base = 1;
} else if ((range / 100 <= 10){
base = 10;
}
inc = roundToHundred(inc)
if((inc * 6) <= range) {
while((inc * 6) <= range){
inc += base;
}
}
return inc;
}
}

我真的不知道这里可能是什么问题。因为 while 循环只处理原始堆栈内存值。有人可以解释一下在这种情况下还有什么可能。

注意:此问题并非每次都会发生。一个月只发生两次或三次。

解决方法

WSVR0605W 不是错误,只是一个通知。如果一个线程长时间处于忙碌状态,它可能会被挂起,因此 WebSphere 为系统操作员的信息提供此通知。

触发通知的时间间隔是可配置的,见:

https://www.ibm.com/support/knowledgecenter/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/ttrb_confighangdet.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。