最近在做的一个java的后台服务器,在window下测试对cpu占用率极小,但是迁移到linux下去导致linux下的cpu占用率极高;
通过努力分析,终于在不起眼的地方发现问题所在:
// new Thread() {
// public void run() {
// try {
// int read;
// System.out.println("输入字符 ‘q’ ,程序终止!");
// while (true) {
// read = System.in.read();
// if (read == 'q') {
// System.exit(0);
// }
// }
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// }.start();
就是这段代码导致问题,这段代码的目的是在用户输入了一个字符q的时候,终止后台运行,当把这段代码注释后,在此部署到linux系统,系统的cpu的占用率就下来了。
在分析,这段代码没有什么特殊的地方,我们只要关注这句话:read = System.in.read();
看来 System.in.read方法在linux和windows下面实现的效果是不同的。
建议大家在linux系统下面关注 System.in.read() 适当使用,防止导致linux负荷过高。