我们有一个Java客户端/服务器应用程序,其GUI定期(每半小时)平均无响应2到10秒。在不同的按钮上单击仅在挂起几秒钟后才会生效。
我最初以为有一个GC问题,但是调查证明这方面没有错。
我更确信这是一个线程问题,图形线程有时会阻塞。
如何检查图形线程的状态以在日志中见证其“无响应”?我想我可以每秒钟左右从另一个线程检查其状态,但是该怎么做呢?要轮询哪个变量?
关于如何解决这个问题还有其他想法吗?
谢谢
最佳答案
您可以向Java进程(在Windows上等效)发出kill -QUIT
,这将导致所有线程将其堆栈跟踪信息转储到STDOUT,因此您可以查看正在发生的情况。这也显示了哪些线程正在持有锁(同步块(synchronized block)),哪些正在等待。