java GUI几秒钟没有响应



我们有一个java客户机/服务器应用程序,它的GUI经常(每半小时)平均在2到10秒内变得无响应。点击不同的按钮只会在几秒钟的挂起时间后生效。

我一开始以为是GC问题,但调查证明这边没有问题。

我更确信这是一个线程问题,与图形线程阻塞在某些时刻。

我如何在日志中检查图形线程的状态以见证其"无响应"?我想我可以每隔一秒左右从不同的线程检查它的状态,但是怎么做呢?要轮询哪个变量

关于如何解决这个问题还有其他想法吗?

谢谢

您可以向Java进程发出kill -QUIT(以及在Windows上等效的东西),这将导致所有线程将它们的堆栈跟踪转储到STDOUT,因此您可以看到正在发生什么。这还显示了哪些线程持有锁(同步块),哪些线程正在等待。

如果你不能在测试中重现问题,也不能关闭生产,那么你的问题就没有一个简单的答案。

看起来你可能有更大的问题,必须使用某种分析工具来诊断。我们使用JProbe &JProfiler和我都很幸运。

最坏的情况是,您可以使用JMX编写自己的代码,按照该链接的内容执行某些操作。过去它对我很有用。

http://www.javamex.com/tutorials/profiling/profiling_java5_threads_methodology.shtml

要了解ui线程被阻塞了多长时间,您可以执行以下操作:

ScheduledThreadPoolExecutor executor = ....
executor.scheduleAtFixedRate(new Runnable(){ 
   public void run() {testEventThread();}}, 5, 5, TimeUnit.SECONDS);
void testEventThread() {
   final long now = System.currentTimeMillis();
   SwingUtilities.invokeLater(new Runnable() {
       public void run() {
             System.out.println("event thread took:" + (System.currentTimeMillis()- now) + " to respond");
       }
   });

}

相关内容

  • 没有找到相关文章

最新更新