最近在做的一个java的后台服务器,在window下测试对cpu占用率极小,但是迁移到linux下去导致linux下的cpu占用率极高;
通过努力分析,终于在不起眼的地方发现问题所在:
public class BidCheck {
public static void main(String[] args) throws Exception{
////定时器,1秒后开始执行,每隔180秒再执行
Timer timer = new Timer();
timer.schedule(new java.util.TimerTask() { public void run() {
Run r = new Run();
Thread t = new Thread(r);
t.start();
} }, 1000, 180000);
//while(true){//)这个是用来停止此任务的,否则就一直循环执行此任务了
// try{
// int ch = System.in.read();
// if(ch-'c'==0){
// timer.cancel();//使用这个方法退出任务
// }
// }catch (IOException e) {
// e.printStackTrace();
// }
//}
}
}
就是这段代码导致问题,这段代码的目的是在用户输入了一个字符q的时候,终止后台运行,当把这段代码注释后,在此部署到linux系统,系统的cpu的占用率就下来了。
在分析,这段代码没有什么特殊的地方,我们只要关注这句话:read = System.in.read();
看来 System.in.read方法在linux和windows下面实现的效果是不同的。
建议大家在linux系统下面关注 System.in.read() 适当使用,防止导致linux负荷过高。
分享到:
相关推荐
请注意,由于JVM自身的开销,直接测量的CPU使用率可能包含JVM的消耗,因此在某些情况下可能需要进一步调整。 此外,还可以结合其他监控工具,如Prometheus、Grafana或JMX工具,将Java程序集成到更全面的系统监控...
通过以上方法,你可以深入了解Linux下Java进程及线程对CPU的占用情况,从而进行问题定位和性能优化。在实际操作中,通常会结合多个工具和方法,以便从不同角度全面分析。记得,持续监控和分析是找出问题的关键。
首先,Java程序需要识别运行的操作系统类型,因为不同的操作系统(如Windows和Linux)提供了不同的API或系统调用来访问CPU占用信息。在提供的代码示例中,`System.getProperty("os.name")`用于获取操作系统名称,...
- 内存分析是识别和解决Java应用程序中的内存泄漏、过度对象创建和内存消耗过高问题的关键步骤。 - jProfiler7提供了详细的内存分配和存活周期视图,帮助开发者定位内存占用大的对象和可能导致问题的代码片段。 2...
JVisualVM(包含在JDK中)和JProfiler等工具可以帮助分析内存使用、CPU消耗和线程状态,以优化应用性能。 总之,Java应用程序开发在Linux平台涉及众多方面,从基础环境配置到高级工具使用,都需要开发者具备全面的...
【描述】中提到,该程序是"纯Java编写",这意味着整个项目完全依赖于Java平台,利用Java的跨平台特性,可以在任何安装了Java运行环境(JRE)的Linux系统上运行。"有完善的图形界面"表明,开发者在设计时注重用户体验...
- 在某些情况下,我们可能需要将线程ID从十进制转换为十六进制格式,以便更好地与Java虚拟机(JVM)中的线程标识符匹配。 - 命令示例:`[root@3server ~]# printf '%0x' 5159` - 这里使用了`printf`命令,将线程ID ...
标题“CPU占用高”指的是计算机或服务器的中央处理器在运行过程中消耗资源过多,导致系统响应变慢或无法正常处理任务的现象。这种情况可能是由于多种因素引起的,包括但不限于恶意软件、资源密集型应用程序、系统...
因此,选择一个与系统兼容性较好的Eclipse版本,如2019-03-R,可以避免过度消耗CPU和内存资源,确保IDE的稳定运行。同时,如果确实遇到性能问题,可以通过增加虚拟机的CPU核心数和内存大小来提升性能。 标签...
在Linux环境下,JDK扮演着至关重要的角色,因为它使得开发者能够在Linux平台上构建和运行Java应用。 首先,我们来了解下JDK的核心组件: 1. **Java编译器(javac)**:它是将源代码(.java文件)转换为字节码(....
在Java开发过程中,有时会遇到项目运行时CPU占用率达到100%的问题,这可能是由于某个线程的无限循环、阻塞或者资源消耗过大导致的。以下是一套详细的排查步骤来帮助你找出是哪个jar包的哪个线程造成了这个问题。 ...
通过这些数据,我们可以分析出服务器是否受到CPU瓶颈的影响,或者哪个进程可能在消耗过多的CPU资源。 内存监控是另一个重要的方面。Sigar提供了获取物理内存、交换内存、以及各个进程内存使用情况的功能。这包括总...
3. **无休止循环**:某个线程陷入无限循环,不断消耗CPU资源。 4. **资源争抢**:多个线程竞争共享资源,导致CPU在等待锁的过程中被过度占用。 5. **垃圾收集问题**:Java的垃圾收集机制可能过于频繁或者执行时间过...
在"Java 服务器信息监控"项目中,开发者可以编写代码来获取不同操作系统(如Windows、Linux)下的系统资源信息。这些信息包括但不限于CPU利用率、内存使用情况、网络接口状态以及服务运行状态。 首先,让我们关注...
在当前的技术环境中,Linux网络计算机(Network Computer, NC)在执行Java应用程序时,常常面临性能不足的问题。Java虚拟机(JVM)作为运行Java应用的关键组件,其执行效率直接影响了整体系统的性能。针对这一挑战,...
《JProfiler在Linux环境下的安装与使用详解》 JProfiler是一款强大的Java性能分析工具,它提供了内存泄漏检测、CPU性能分析、线程监控等多种功能,是开发者优化Java应用的得力助手。本篇文章将详细讲解如何在Linux...
:本文主要探讨了在Linux网络计算机(NC)环境中优化Java虚拟机(JVM)性能的问题,提出了一种基于直接线索式解释器的优化方案,并设计了三项扩展优化策略,旨在提升JVM在Linux NC上的运行效率,同时降低CPU和内存...
本文将深入探讨如何在Linux环境下进行文件操作,解决Tomcat服务失效的问题,以及如何进行文件压缩。以下是对这些主题的详细阐述: 一、Linux文件操作 1. 文件与目录操作:在Linux中,文件和目录统称为文件对象。...