我的客户cpu超过100%使用java进程。我搜索这个问题,我发现了奇怪的记录。一个线程进入睡眠状态(1000)10次,但需要花费50分钟! 到底是怎么回事??? 也许这个睡眠线程的问题来自高CPU使用或者由于睡眠线程而导致cpu出现。 我正在用visualvm看,我看到了睡觉的线程。之后,我使用visualvm中的“Perform GC”按钮进行测试。如果我按下这个按钮,线程的记录是o.k.如果java的设置可能错了?
java.lang.Runnable
public void destroy() {
LOG.debug("destroy " + getProgramName());
Runnable destroyer = new Runnable() {
public void run() {
Thread.currentThread().setName("RuntimeSystem-Destroyer");
synchronized (lock) {
runningSystemServiceDestroyers++;
}
try {
unlockKopfsatzsperren();
}
remotingClosed();
} catch (RemoteServiceException e) {
LOG.error("Fehler", e);
} finally {
synchronized (lock) {
runningSystemServiceDestroyers--;
}
}
}
};
destroyTask = executorService.submit(destroyer);
}
java.lang.Thread
private void unlockKopfsatzsperren() {
long timeout = System.currentTimeMillis() + 1000 * 60 * 1;
int maxWait = 10;
while (maxWait > 0) {
try {
LOG.info("wait for " + maxWait + " Sek.");
maxWait--;
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
...
以下是日志记录的片段:
查看时间戳!
和JVM参数