Tyrusの実装を使用してWebSocketサーバーを作成しましたが、CPU使用量の50%が使用されますが、理由はわかりません。最初は私はそれ以外のプロセスだと思ったが、それ以降は非常にシンプルなwsサーバーを書いたが、それはまだ同じだ...WSサーバーでCPU使用が異常になっています
リソースモニター(Windows Server 2008 R2)のスクリーンショットです:
サーバーは、インテル(R)Xeon(R)CPU上で動作するE5-2650 0 @私は正確なアーキテクチャを知らない 4GBのメモリを搭載した2.00 GHzの...簡略化の
コードwsサーバー:
package wstest;
import javax.websocket.DeploymentException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.glassfish.tyrus.server.Server;
public class Wstest {
private static final Logger logger = LogManager.getLogger();
public static void main(String[] args) {
runServer();
}
private static void runServer() {
Server server = new Server("localhost", 8025, "/tp", null, wsendpoint.class);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
logger.info("Server stopped.");
}
});
try {
server.start();
logger.info("Server started.");
while (true) { }
} catch (DeploymentException ex) {
logger.fatal(ex);
}
}
}
package wstest;
import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ServerEndpoint(
value = "/test"
)
public class wsendpoint {
private static final Logger logger = LogManager.getLogger();
@OnOpen
public void onOpen(Session session) {
logger.info("Client " + session.getId() + " connected");
}
@OnClose
public void onClose(Session session, CloseReason closeReason) {
logger.info("Client " + session.getId() + " disconnected.");
}
@OnMessage
public void onMessage(String request, Session session) {
logger.info(session.getId() + " sent message : " + request);
}
@OnError
public void onError(Session session, Throwable t) {
logger.error("Error !", t);
}
}
は、ここで私が使用しているlibrairies:
理由は明らかです.Jur Clerkx氏の答えによると、 'while(true){}'はスピンロックなので、どこで使用するのかわかりませんが、停止してください。 'while'を削除すると、プログラムは実行を停止しますか? – Kayaman
しばらくすると停止します。 – Phoste