簡體   English   中英

Java SerialPort編寫將cpu使用率提高到100%

[英]Java SerialPort writing rises up cpu usage to 100%

我有一個在大約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使用率。

您有什么想法可以解決此問題嗎?

建議檢查服務器和工作站都允許的波特率,檢查發送計算機具有的硬件RAM的數量,檢查jre config面板中允許的RAM數量,是否具有防病毒功能

當CPU使用率很高時,請嘗試在Java發行版(1.6和更高版本)附帶的VisualVM中對應用程序進行性能分析。 (您可以連接到正在運行的JVM對其進行概要分析。)

這將告訴您正在使用哪個函數或庫調用的CPU,因此您可以優化或修復代碼(如果是導致問題的代碼)或識別行為異常的庫。

在Debian / Ubuntu上,您可以從visualvm軟件包中獲取VisualVM。 請注意,無論出於何種原因,運行它的命令都是jvisualvm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM