Tag: cpu usage

如何查找从属节点中的CPU负载(CPU利用率百分比)

您正在开发java中的负载平衡算法。 在我的系统中,将有一个主节点和从节点列表,其中主节点将传入请求分发给其一个从节点。 我想在每个从节点中找到CPU负载(所用CPU的百分比)。 这样主节点就可以有效地将请求分发给其最小负载的从节点之一。 任何人都可以建议我如何找到它。 The getSystemLoadAverage() method in JMX 可用于查找当前系统的cpu负载。 是否有可能使用相同的方法来查找从站中的负载..如果可能请建议我如何找到它。 如果不可能,请建议我采取其他一些方法来做同样的事情。 如果有人为此提供正确答案,我将更加感激。

Java限制资源使用

有没有办法限制java使用的核心数量? 同样,是否有可能限制使用该核心的数量?

如何停止Java循环吃掉> 50%的CPU?

好吧,我在一个空程序上测试了这个,只是运行一段时间(真实){}给了我50%的CPU。 我有一个我正在使用的游戏,它使用while循环作为它的主循环,并且它的CPU始终为100。 我怎样才能让Java一遍又一遍地重复一些事情而不吃掉超过50%的CPU来做重复?

Java应用程序中的高CPU利用率 – 为什么?

我有一个Java应用程序(基于Web),有时显示非常高的CPU利用率(几乎90%)几个小时。 Linux TOP命令显示了这一点。 在应用程序重启时,问题就消失了。 所以要调查 : 我使用Thread Dump来查找线程正在做什么。 在’RUNNABLE’状态中找到了几个线程,其中一些在其他几个状态中。 在重复的线程转储中,我确实看到一些始终存在于’RUNNABLE’状态的线程。 所以,他们似乎是罪魁祸首。 但是我无法确定,哪个Thread正在占用CPU或进入无限循环(从而导致高CPU利用率)。 日志不一定有用,因为违规代码可能没有记录任何内容。 我如何调查 – 应用程序的哪个部分或什么线程导致高CPU利用率? – 还有其他想法吗?

似乎在等待的线程的高CPU利用率

我目前正在运行一些JMeter测试来测试Web服务的性能。 它使用了非常多的CPU。 对于一个JMeter请求线程,它使用10-30%的任何位置(取决于请求的类型)。 当我将其提升到仅仅15个线程时,我获得了~95%的CPU利用率。 当然,我想知道发生了什么。 我做了一个Hprof CPU示例(我尝试了时间选项但是花了一个半小时才启动我的服务而没有消息会通过)。 以下是该抽样结果的片段(跨度超过15分钟)。 CPU样本开始(总计= 220846)2014年8月22日星期五13:38:54排名自我累积计数跟踪方法1 14.96%14.96%33038 300514 java.net.PlainSocketImpl.socketAccept 2 14.84%29.80%32776 301258 sun.nio.ch. EPollArrayWrapper.epollWait 3 12.45%42.26%27505 313002 sun.nio.ch.EPollArrayWrapper.epollWait 4 7.48%49.73%16517 300604 java.net.PlainSocketImpl.socketAccept 5 7.18%56.91%15856 303203 sun.nio.ch.EPollArrayWrapper.epollWait 6 6.18%63.09%13639 313001 sun.nio.ch.ServerSocketChannelImpl.accept0 7 6.04%69.13%13329 304259 sun.nio.ch.EPoll.epollWait 8 5.11%74.23%11275 307102 sun.nio.ch.EPollArrayWrapper.epollWait 以及那些顶级样本的相应堆栈: TRACE 300514: java.net.PlainSocketImpl.socketAccept(:未知行) java.net.AbstractPlainSocketImpl.accept(:未知行) java.net.ServerSocket.implAccept(:未知行) java.net.ServerSocket.accept(:未知行) sun.rmi.transport.tcp.TCPTransport $ AcceptLoop.executeAcceptLoop(:未知行) sun.rmi.transport.tcp.TCPTransport $ AcceptLoop.run(:未知行) […]

获取Java中的CPU线程使用情况

我有一个关于获得给定JNI块的CPU利用率的问题。 我在底层的C ++ JNI本机方法中进行了一些密集的CPU计算。 我正在优化这个计算,并希望根据不同的输入进行基准测试。 我需要一些关于如何测量这个的指导。 到目前为止我考虑的替代方案是 使用JMX ThreadMXBean来测量调用JNI方法调用的当前线程的系统CPU使用率。 但是,我不确定JNI代码是否在调用线程上下文中执行。 当线程产生更multithreading时会发生什么? 使用JMX OperatingSystemMXBean获取整个JVM的CPU使用率。 理想情况下,这不是我想要的,因为在JVM中可能存在可能调整基准测试的并行执行。 使用getrusage(..)外部测量。 我想知道的是它与使用OperatingSystemMXBean有何不同。

限制java应用程序的内存和CPU使用率

说,“运行myApp.jar,cpu = 800,内存= 1024” 我已经做了多年的java编程,问这个问题是一个尴尬。 我甚至不知道这是否可能。 如果是这样,怎么样? 我只想知道是否可以设置java程序的最大内存和CPU使用率。 我突然想到了这一点,因为我最近开始开发移动应用程序。 我想知道应用程序在具有非常有限的内存和处理器的设备上的行为。 我看到了带有在浏览器上运行的演示应用程序的物理引擎,或者我可以在我的PC上执行。 如果我在移动设备上运行它会怎么样? 性能是否相同? 我不是开发一个示例移动应用程序来测试库的性能,而是首先使用我的PC运行特定的cpu和内存。 顺便说一下,我试着谷歌搜索…我发现只是监控和性能调整。 我可能使用错误的关键字。

使用Sigar API获取JVM CPU使用率

我正在使用Sigar来获取应用程序服务器中当前运行的JVM的CPU使用率,并将其存储为此数据的历史视图,但我总是获得0%的CPU百分比。 同时,我保持我的visualVM开放以监控CPU使用率,并且我看到CPU%在visualVM中定期更改,而它总是使用Sigar报告0%。 这是我定期运行的代码: Sigar sigar = new Sigar(); ProcCpu cpu = null; long pId = sigar.getPid(); // This one gives me the same process ID that I see in visualVM try { cpu = sigar.getProcCpu(pId); } catch (SigarException se) { se.printStackTrace(); } System.out.print(cpu.getPercent()); 此代码始终为0%。 在这种情况下,我做错了什么? 如何让Sigar显示类似于VisualVM中显示的CPU使用率? 我尝试添加 cpu.gather(sigar, pId); 在调用getProcCpu(pid)之后,即使我不断增加和减少服务器上的负载,我仍然只获得两个值(0.0和9.08729312E-315)…

服务时间与线程数成正比

我的系统是带有超线程的i5-Dual核心。 Windows向我展示了4个处理器。 当我一次由单个线程运行单个优化的cpu绑定任务时,其服务时间始终显示为35ms。 但是,当我将2个任务同时切换到2个线程时,他们的服务时间显示为70毫秒。 我想问我的系统有4个处理器,那么为什么在2个线程运行teir任务的情况下服务时间是70,而2个线程应该在2个处理器上运行而没有任何调度开销。代码如下。 CPU绑定任务如下。 import java.math.BigInteger; public class CpuBoundJob implements Runnable { public void run() { BigInteger factValue = BigInteger.ONE; long t1=System.nanoTime(); for ( int i = 2; i <= 2000; i++){ factValue = factValue.multiply(BigInteger.valueOf(i)); } long t2=System.nanoTime(); System.out.println("Service Time(ms)="+((double)(t2-t1)/1000000)); } } 运行任务的线程如下。 public class TaskRunner extends Thread { CpuBoundJob job=new CpuBoundJob(); public […]

获取内存和CPU使用率

我想获得总物理内存,CPU使用率和使用的内存量。 我查看了Runtime.freeMemory() ,但这不是整个系统的可用内存。