1

我有一个在大约 150 台计算机上运行在 WinXP 上的 Swing GUI 应用程序(每台计算机的配置相同)。

但在其中一些(如 5)上,当应用程序尝试通过 RXTX(pos 打印机)与串行端口通信时,java cpu 使用率上升到近 100%,因此阻塞了整个机器。

此串行端口上的写入是在特定线程中完成的。其中一个看起来像这样:

... queries on the hsql database
... writing results in a byte array called "stream"

CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM2");
serialPort = (SerialPort) portId.open("Sending", 2000);
serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

OutputStream out = serialPort.getOutputStream();
out.write(stream);
out.close();
serialPort.close();

在编写之前我首先认为查询存在问题,但我的应用程序在其他线程中执行了很多查询并且没有此类问题。

在这些计算机上,打印时间是可变的(最多 10 分钟,在此期间机器被阻塞)。在其他计算机上,打印在 2 秒内完成,而不会增加 CPU 使用率。

你有什么想法从哪里来的这个问题?

4

2 回答 2

0

建议 检查服务器和工作站允许的波特率 检查发送机器的硬件 RAM 数量 检查 jre 配置面板中允许多少 RAM Java 检查防病毒

于 2012-10-12T09:01:23.060 回答
0

尝试在 Java 发行版(1.6 及更高版本)中包含的VisualVM中分析您的应用程序,同时出现高 CPU 使用率。(您可以连接到正在运行的 JVM 对其进行分析。)

这将告诉您哪个函数或库调用正在使用您的 CPU,因此您可以优化或修复您的代码(如果是您的代码导致它)或识别行为异常的库。

在 Debian/Ubuntu 上,您可以从visualvm包中获取 VisualVM。jvisualvm请注意,无论出于何种原因,运行它的命令都是。

于 2012-10-12T09:07:50.437 回答