你如何限制while循环的CPU?
在这种情况下,while循环内部的代码:
Private Sub wait(ByVal time)
Dim sw As New Stopwatch
sw.Start()
Do While sw.ElapsedMilliseconds < time And StillOpen = True
Application.DoEvents()
Loop
sw.Stop()
End Sub
Run Code Online (Sandbox Code Playgroud)
但现在,这是问题所在.这个循环允许while循环每秒运行一次,每秒一次,并且waitsub正在导致这个延迟,正如它应该的那样.
如何限制占用的CPU?出于某种原因,我的任务经理表示它需要50个CPU来运行这个简单的任务,但它应该不会超过1或2.虽然经理说它占用了那么多的CPU,但我的计算机速度并没有受到影响所有这些都是奇怪的,因为它是一台已有两年历史的笔记本电脑.
我不希望任何用户对此感到恐惧,但是知道这些天人们是怎样的......
无论如何,语言是vb.net.有人可以帮帮我吗?
谢谢!
编辑:澄清一下,该代码不在while循环本身内,但调用子程序是,即 wait(1000)
我不会提供代码,因为它太长了.python脚本涉及执行在while循环中运行的大量命令.
基本结构
while True:
The meat goes here
with the odd if:
and stuff
Run Code Online (Sandbox Code Playgroud)
现在我已经完成了它,我注意到在运行它时,它使用100%CPU,没有例外.我是初学者,并不知道将这个问题归结为什么.我想也许是因为脚本无限期地运行(直到我手动退出),如果它重复循环一次,可能只会对CPU造成负担.我在while的底部添加了time.sleep(1)来查看是否存在没有改进的问题.
有人有主意吗?这是一个相当长的事件序列,但它们严重依赖于if语句,而这种语句并不是经常触发的.100%的CPU使用率发生在特定的if语句被触发之前,所以我真的很茫然.
编辑:忘了包含它在unix环境中运行(Debian)
我用了MPICH2.当我使用mpiexec启动我的应用程序时,它们在远程主机(Win7)上运行时具有25%的CPU使用率.如果这可以提高我的应用程序性能,我想增加百分比.我希望我的远程计算机专用于我的计算.我能怎么做?
谢谢
为了平均CPU负载,我uptime在ksh脚本中使用:
uptime | awk '{print $11}' | sed '$s/.$//' | read CPU
Run Code Online (Sandbox Code Playgroud)
然后我在那里使用变量CPU.
这$11部分是为了隔离最后五分钟的部分.但是,我今天注意到这不起作用.具体来说,最后五分钟部分返回$9.该函数返回的参数较少.这是因为机器最近重新启动,因此uptime显示自重启后的分钟而不是几天和几分钟.
有没有办法让我能够始终只获得正常运行时间的最后五分钟?
我正在计算几台服务器上的CPU使用率.但计算非常非常缓慢.
到目前为止,这是我的代码:
While it <= 5
Dim myOptions As New ConnectionOptions
myOptions.Username = _myParameters("user")
myOptions.Password = _myParameters("password")
Dim myRoot As String = "\\" & _myParameters("server") & "\root\cimv2"
Dim myScope As New ManagementScope(myRoot, myOptions)
Dim myQuery As New ObjectQuery(String.Format("select * from Win32_Processor"))
Dim mySearcher As New ManagementObjectSearcher(myScope, myQuery)
Dim myCollection As ManagementObjectCollection = mySearcher.Get
For Each OS As ManagementObject In myCollection
values.Add(OS("LoadPercentage"))
Next
Threading.Thread.Sleep(100) //Set some time between two calculations
itCounter += 1
End While
Run Code Online (Sandbox Code Playgroud)
代码每次都挂起
For Each OS As ManagementObject …Run Code Online (Sandbox Code Playgroud) 我正在Google Compute Engine上运行小型Cassandra集群。从我们的CPU图表(收集到的报告)中,我注意到在NICE中花费了大量的处理器时间。我如何找出消耗此过程的过程?我已经尝试过从头开始并盯着它看了一会儿,但是NICE cpu的使用有点棘手(大多数情况下,NICE为0%;只有偶尔会达到30-40%) “坐等”不是很有效。
我已经开发了一个Java套接字,但是它占用了太多的CPU和虚拟内存。您能告诉我代码中的问题是什么吗?
private void listen() {
try {
serverSocket = new ServerSocket(port);
System.out.println("Server socket listening on port: " + port);
System.out.println("Waiting for connections...");
while(true) {
// accept the connection
Socket socket = serverSocket.accept();
socket.setSoTimeout(30000);
System.out.println("Got connection");
// start processing the connection
Thread connectionManager = new Thread(new Elevator(socket, socket.getInputStream()));//new Thread(new ConnectionManager(socket, odometer));
connectionManager.start();
}
} catch (IOException exc) {
System.out.println(Listener.class.getName() + ": " + exc.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
在电梯班我有这个:
public class Elevator implements Runnable
{
private String imei;
private Socket socket;
private InputStream …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个Android项目.我想获得每个进程的总CPU使用率.所以我使用的是"/ proc/pid/stat"的内容.我提到这个答案来获取统计数据.现在我得到了所有的utime,stime等,问题在于"Hertz"的价值.答案是它是每秒钟的滴答数.即使经过大量浏览,我也无法获得时钟刻度的确切含义.什么是时钟滴答,它是处理器的频率?答案说我们可以使用时钟滴答
的sysconf(_SC_CLK_TCK)
我不知道如何在Android中使用这个linux命令来获取时钟滴答声.我用谷歌搜索它,我找不到它.请帮我解决这个问题.如果有一个这个时钟滴答的例子会更有帮助.
我正在尝试按以下方式计算Android中进程的CPU使用率,但是由于产生的输出,我不确定它是否正确。
要将吉菲转换为秒:吉菲/赫兹
第一步:使用/proc/uptime文件的第一个参数获取正常运行时间。
第二步:从中获取每秒的时钟滴答数/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq。
第三步:从中获取过程(utime(14) +stime(15))参数花费的总时间/proc/[pid]/stat
第四步:从/proc/[pid]/stat
Linux 2.6之后的时钟滴答(除以sysconf(_SC_CLK_TCK)除)表示的值中获取进程的starttime(22)。
第五步:获取自进程启动(uptime - (starttime / hertz)以来的总运行时间(因为正常运行时间以秒为单位,而启动时间以时钟滴答为单位)。
第六步:获取CPU使用率百分比((totaltime / hertz) / elapsedTime) * 100。
计算后的输出类似于5.702244483458246E-6,大约等于〜0.000005702244483
编辑
输出量
步骤1:226.06 1211.19
步骤2:1000000
步骤3:9347(example.com)S 3573 3573 0 0 -1 1077952832 8971 0 1 0 38 32 0 0 20 0 25 0 13137 983830528 14330 4294967295 1 1 0 0 0 0 4612 0 38136 4294967295 0 0 …
Perfiew是一个非常酷的工具.但是我使用它的调用树视图时遇到问题,因为它一次显示信息线程 - 除非你有一个非常繁忙的线程,否则它真的会失败.见下图.
相反,我想通过低于线程ID的东西看到最昂贵的堆栈,就像顶级方法一样(如ANTS和大多数其他性能分析器那样).这可能吗?如果是这样,怎么样?
见下图