我正在开发一个独立的(Swing)Java EE 客户端。应用服务器是 JBoss 6.1.0。有些 Windows 工作站在客户端运行时冻结,有些则不会。32 位和 64 位 Windows 工作站都冻结了,而且,一些 32 位和 64 位 Windows 工作站也可以正常工作。客户端在 Linux 上运行良好,没有任何问题。
我已按照 StackOverflow 的说明进行操作,人们建议使用-Dsun.java2d.noddraw=true
. 它没有帮助。
最让我困惑的是,一些工作站几乎完全相同——相同的 Windows 版本、相同的图形驱动程序、相同的 JRE,但有些运行良好,有些则不行。
该应用程序大量使用 Preferences API 来存储可停靠的各种位置(来自 Docking Frames 项目),它使用 JBoss 客户端类。
我正在调查对 Windows 注册表的并发访问是否会导致此问题(如果您遇到类似问题,请告诉我)...
第一个猜测是在 GUI 线程的某个地方发生了争用条件,并且 GUI 冻结了。但这只会冻结 GUI,它不应该冻结整个 Windows。
机器一旦冻结,就会响应 ping,但没有 Windows 服务工作。
我将不胜感激任何可以帮助我解决问题的提示。
编辑:
- CPU 使用率始终在 10% 左右。
- 线程数永远不会超过 30,但并非所有线程都是守护线程(这包括 AWT 线程、RMI 线程等)。